TCP协议
传输层协议,其特点是面向连接、字节流和可靠传输。TCP的连接是全双工的,即双方的数据读写可以通过一个连接进行。
1. 字节流概念
与UDP的数据报服务不同,TCP是字节流服务,即应用对数据的发送和接收是没有边界限制的。
具体来讲,通过UDP协议来通信时,发送端应用每执行一次写操作,UDP模块就将其封装成为一个UDP数据报并发送,接收端必须及时针对每一个UDP数据报执行读操作,否则就丢包。
而使用TCP协议进行通信时,发送端应用程序连续多次执行写操作时,TCP模块先将这些数据放入TCP发送缓冲区中,当TCP模块真正开始发送数据时,缓冲区的这些数据会被封装成一个或者多个TCP报文段发出,即TCP模块发出的TCP报文段的个数与应用程序执行的写操作次数之间没有关系。接收端同理。
2. 四次挥手
2.1 2MSL
MSL是TCP报文段在网络中的最大生存时间。
TIME_WAIT状态,即等待2MSL再关闭,出现的原因:
- 可靠地终止TCP连接
如果报文段7丢失,会导致服务器重发报文段6,因此客户端需要在TIME_WAIT状态等待万一丢失而导致的重发报文段。 - 保证让迟来的TCP报文段有足够的时间被识别并丢弃
当一个TCP连接处于TIME_WAIT状态时,我们无法立即使用该连接占用的端口来建立一个新连接。反之,如果没有这个状态,则应用程序可以迅速建立一个和刚关闭的连接相似的连接(具有相同的IP地址和端口号),新的连接可能接收到属于上一个连接的、携带应用程序数据的报文段,这显然是不合理的。而等待2MSL和会使得网络中属于当前连接的报文段完全消失,便于安全地建立新的TCP连接。
TCP持续更新……