读《《图解TCP/IP》》有感
TCP/IP
最近几天读完《《图解TCP/IP》》,收获蛮多,记得上学时读stevens的《《TCP/IP详解》》时那是一个囫囵吞枣,没认真看也看不下去。等有时间再拜读下《《TCP/IP详解》》吧,估计能有不少共鸣。
现在觉得,要想比较透彻理解TCP/IP,还得需要有服务器编程经验,学校应该同时开设《socket编程》》相关课程,最好同一个老师教,可以串讲,不然光理论不实战就是花架子,而且也不容易真正理解TCP/IP协议。
TCP/UDP一览
只有较为透彻的理解了TCP/UDP才知道为啥TCP叫传输控制协议,UDP叫用户数据包协议。TCP在背后帮你做了很多事,连接管理,保存时序,超时重发,拥塞控制,流控;通过mss自动帮你做分片,以减少传输途中路由器分片消耗(IPV6路由器是不会分片的),这叫传输控制协议,突出“控制”二字。而UDP什么都不帮你做,不保证时序,不做超时重传,是需要上层协议来保证,也就是用户来写规则,这也是第一个U(user)的含义;同时UDP没有mss,所以一次性发送数据最好不要太多,以免分片导致性能损耗。那UDP为什么叫用户数据包协议呢,说到数据包就得说说TCP和UDP的面向连接和无连接了。
我们知道TCP是面向连接的,而UDP是无连接的,这就直接导致了TCP会通过三次握手连接服务器,如果服务器端口不对TCP是知道,但UDP不一样,压根不知道服务器段的情况,即使服务器不在线,客户端照样发送数据。
In [22]: import socket
In [23]: s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
In [24]: s.sendto("hello world",("127.0.0.1",9999))
Out[24]: 11