Python网络编程 1.1 协议栈、编解码、IP

1.参考书及源代码

本系列博客不适合Python零基础的同学,Python的基础语法推荐读《Python核心编程第二版》(第三版基础语法讲的不多,个人认为不适合零基础)。

所用参考书为Python网络编程(中文第三版),京东有售。源代码放在了源码-Python网络编程中。

2.url:描述了网络上特定文档的位置及获取方法,url包含了协议名称、保存文档的主机名和主机上该文档的路径。

3.随着使用的协议越来越底层,程序的质量会明显随之下降。因此,在项目中应该尽可能地使用标准库或第三方库,以免自己写出脆弱的代码。

书中Search1,2,3,4四个程序中涉及到的协议栈包括四层。

最上层:谷歌地理编码API,对如何用URL表示地理信息查询和如何获取包含坐标信息的JSON数据进行了封装。

URL:标识了可通过HTTP获取的文档。

HTTP:支持面向文档的命令如GET。该层的操作使用了原始的TCP/IP套接字。

TCP/IP套接字:只处理字节串的发送和接收。

可以看到,协议栈的每一层都使用了其底层提供的功能,并同时向上层协议提供服务。

4.Python网络编程的编解码

Python3对字符串和底层字节序列做了明显的区分。字节(byte)是计算机网络通信过程中实际传输的二进制数,每个字节由8位二进制数构成,从00000000到11111111,转换为十进制整数0~255。Python中的字符(character)串则包含了Unicode字符,比如a(Unicode标准中称之为“小写拉丁字母A”),或者}(右花括号),或者∅(空集)。尽管每个Unicode字符都有一个叫做编码点(code point)的数字标识符与之对应,我们还是可以将之视为内部实现细节。Python3对字符的处理相当谨慎,除非使用者主动请求Python对字符和外部可见的实际字节进行相互转化(编码、解码),否则对使用者可见的只有字符。

解码是在应用程序使用字节时发生的。此时需要理解这些字节的意义。编码是程序将字符串对外输出时所实施的过程。此时,应用程序使用某一种数字计算机使用的编码方法将字符串转化为字节。当计算机需要传输或存储符号时,字节才是真正使用的格式。

在Python中,使用decode()方法将读入的字节串转化为字符串,反之则用encode()方法。另外,相比Python2,在使用Python3编写代码时需要更多地调用de/encode方法。

5.IP(网际协议)是为全世界通过互联网连接的计算机赋予同一地址,使得数据包能从互联网的一端发送至另外一端。Python程序很少直接操作IP这么底层的协议。

IPv4协议中的ip地址长度为四个字节,IPv6长度为16个字节。由于Ip地址为数字组合,很难记,用户一般通过主机名来连接到对应的网站,而不是IP地址。将主机名解析为对应ip地址的工作是由操作系统实现的,即域名解析。操作系统会知道ip是什么版本并作出相应的解析。具体过程见于DNS解析详解。

你可能感兴趣的:(Python网络编程)