《Python网络编程》学习笔记--从例子中收获的计算机网络相关知识

       从以前笔记的四个程序中(http://www.cnblogs.com/take-fetter/p/8278864.html),咱们能够看出分别使用了谷歌地理编码API(对URL表示地理信息查询和如何获取JSON数据都进行的封装)、URL(标识了可经过HTTP获取的文档)、HTTP(支持面向文档的命令,例如GET,使用了原始的TCP/IP套接字,也是在这里遇到了一点麻烦,须要自行处理301错误)、TCP/IP套接字(只处理字符串的发送和接收)。层层深刻,Python对各网络层都提供了很是全面的支持。显然也能看出来,越底层程序的质量也明显随之降低。高层的网络协议一般会将其底层网络细节隐藏(相似于OSI参考模型中下层为上层提供服务的概念)。正确实现网络协议并不是易事(类如咱们遇到的301问题和须要使用代理访问的问题),所以咱们尽量使用标准库和第三方库来实现(造轮子难啊:( )。html

  socket()API之下的几层:Transmission Control Protocol (TCP)、Internet Protocol (IP)、最底层的链路层(书上是这么写的,可是按照OSI参考模型应该还有物理层吧)python

  书中在第一章中还提到了如下相关知识:git

  • 编码与解码

   Python3对字符串和底层字节序列作了明显的区分(字节Byte(8位二进制数)和字符串(包含Unicode字符)),两者的转化使用编码(字符串to字节,encode()方法)和解码(字节to字符串,decode()方法)操做。github

  例如书中的程序我作了一点简单的改变网络

  

#!/usr/bin/env python3
# Foundations of Python Network Programming, Third Edition
# https://github.com/brandon-rhodes/fopnp/blob/m/py3/chapter01/stringcodes.py

if __name__ == '__main__':
    # Translating from the outside world of bytes to Unicode characters.
    input_bytes = b'\xff\xfe4\x001\x003\x00 \x00i\x00s\x00 \x00i\x00n\x00.\x00'
    input_characters = input_bytes.decode('utf-16')
    print(repr(input_characters))

    # Translating characters back into bytes before sending them.
    output_characters = 'We copy you down, Eagle.\n'
    output_bytes = output_characters.encode('utf-8')
    with open('eagle.txt', 'wb') as f:  # wb以二进制形式写入文件eagle.txt
        f.write(output_bytes)
        print(output_bytes)

输出结果为socket

'413 is in.'
b'We copy you down, Eagle.\n'

而写入文件的结果为ide

We copy you down, Eagle.
  • 网际协议Internet Protocol (IP)与IP地址

    将主机名转换为IP地址编码

import socket

if __name__ == '__main__':
    hostname = 'www.qq.com'
    addr = socket.gethostbyname(hostname)
    print('The IP address of {} is {}'.format(hostname, addr))

    IPv4(32位二进制数)spa

    特殊的IP地址段 127.*.*.*(预留地址段) 10.*.*.*  172.16-31.*.* 192.168.*.* (私有子网 private subnet)计算机网络

     IPv6(32*4=128位二进制数)

  • 路由
  • 数据包分组(DF标记,是否对大于MTU的数据包进行分组)

   补充下 IP头部20字节,TCP头部20字节,UDP头部8字节,以太网的最大容量(包含头部)共1500B

   关于计算机网络部分的知识,仍是不细讲了,回顾一下基础知识。

相关文章
相关标签/搜索