关于python网络编程的一点更正

在去年的编程中我普遍使用了一中判断传输是否结束的方法

if recv_data == None:

现在看这种方式是不对的,也可能在py2中是合适的,但是在py3中是不合适的,因为None不是空,而是一种类型,这种类型叫空类型,所以它永远不与空字符串相等,所以线程会陷入死循环。正确的方法是用len函数判断字符串长度。

ps:事实证明recv方法是阻塞的。

对TCP/IP分层的理解

今天开始更新TCP/IP的内容。

TCP/IP是今年才听说的,但是圄于相关知识的匮乏一直没怎么敢了解,今天在图书馆接了一本书,叫《一本书读懂TCP/IP》,写的很好,语言通俗易懂,但是还是有很多地方不是那么明白。

我一直以为OSI模型与TCP/IP模型是前者包含后者的关系,但是我万万没想到后者两者是同一个层级,我也万万没想到因为OSI模型太过复杂所以只能用TCP/IP模型去构建网络,我一直认为我们现在用的就是OSI模型。

TCPIP模型就是一个缩减的OSI模型,他缩减了很多OSI模型不是很重要的东西,所以在现可以大行其道。他有四层分别是网络接口层、互联网层、传输层和应用层。

网络接口层感觉就是由局域网构成,这一层没有固定的定义,你可以在一个公网IP之下连接无数个路由,在路由上再连接无数个计算机,主要是为了搭建互联网的底层基础;互联网层又叫IP层,主要目的是通过IP协议将不同的主机相连;传输层中最重要的两个协议是UDP和TCP,前者可靠后者不可靠,它的主要目的是传输数据;应用层就是我们现在可以看到的界面,比如QQ,微薄新浪之类的都是在应用层上建立的,主要是为了更直观的使用网络。四层的功能不同,下层会对上层的功能实现建立基础,上层在下层的基础上进行信息的传输。