- TCP三次握手/建立连接
- TCP是面向连接的传输层协议,所谓面向连接就是在真正的数据传输开始前要完成连接建立的过程,否则不会进入真正的数据传输阶段。
TCP的连接建立过程通常被称为三次握手(three-way handshake),过程如下:请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。这三个报文段完成连接的建立。
发送第一个SYN的一端将执行主动打开(active open)。接收这个SYN并发回下一个SYN的另一端执行被动打开(passive open)
当一端为建立连接而发送它的SYN时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。RFC 793 [Postel1981c]指出ISN可看作是一个32比特的计数器,每4 ms加1。这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它作错误的解释。
如何进行序号选择? 在4.4 BSD(和多数的伯克利的实现版)中,系统初始化时初始的发送序号被初始化为1。这个变量每0.5秒增加64000,并每隔9.5小时又回到0。另外,每次建立一个连接后,这个变量将增加64000。
TCP三次握手.png
TCP四次握手/终止连接- 一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独进行关闭。当一方完成它的数据发送任务后就发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一端已经终止了那个方向的数据传送。所以TCP终止连接的过程需要四个过程,称之为四次握手过程。
TCP四次握手.png
- 窗口实际上是一种流量控制的机制。
窗口控制.png
当窗口尺寸是1时,发送一个数据段后必须等待确认才可以发送下一个数据段,好处是在接收端接收的数据段顺序不会出错,缺点是传输速度慢,效率低。
利用大于1的窗口,可以同时发送几个数据包。当确认返回时,则发送新数据段。在这种方式下,可以提高传输效率。一个经过仔细调整的滑动窗口协议可以保持网络始终充满数据包,并且可以得到较高的吞吐量。
其优点是传输速度快,效率高;缺点是由于TCP靠IP传输数据,而IP在传输过程中可能会选择不同的路径而导致在接收端接收的数据段顺序混乱。
|