TCP三次握手四次挥手详解

2017-09-02  本文已影响0人  曲谐_

TCP的运输连接管理

TCP是面向连接的协议。运输连接是用来传送TCP报文的。TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。因此,运输连接就有三个阶段即连接建立,数据传送和连接释放。运输连接的管理就是使运输连接的简历和释放都能正常地进行。
TCP连接建立过程中要解决以下三个问题:
1)要使每一方能够确知对方的存在。
2)要允许双方协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等)
3)能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。
TCP连接采用客户服务器方式。即C/S。

TCP的连接建立

TCP建立连接的过程叫做握手。握手需要在客户和服务器之间交换三个TCP报文段。

image.png

假定主机A运行的是客户端,B运行服务端。最初两端的TCP进程都处于CLOESD状态。图中在主机下面的方框分别是TCP进程所处的状态。请注意,在本例中,A主动打开连接,而B被动打开连接。
B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN状态,等待客户的连接请求。如有,则作出相应。
现在开始建立TCP连接。

连接建立的握手环节

A最后又发送一次确认的原因:防止已经失效的连接请求报文段突然又传送到了B,因而产生错误。
产生过程
1)A发出请求,但报文段丢失B未收到。
2)A重新传输,收到确认,建立了连接。数据传输完毕后释放。A共发送了两个连接请求报文段,其中第一个丢失,第二个到达了B。
3)那么此时,有可能连接请求报文段并没有丢失而是滞留在了网络节点中,延误后到达了B。此时它已经失效,若B收到以后或许会误认为A又发送了一次新的连接请求。于是又第二次握手发出确认报文段。同意建立连接。
4)由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据,但B却以为新的连接建立了,并一直等待A发来数据。B的许多资源就这样浪费了。

连接释放的挥手环节

数据传输结束双方都可释放连接,现在A和B都处于ESTABLISHED(已建立连接)状态。


四次挥手.png

为什么A在TIME-WAIT状态必须等待2MSL的时间呢?

有两个理由:
1)为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的收不到对己发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器。
捯饬一下这里面的时间:

如若ACK报文段无法传达,则B服务器TCP无法释放。

2)防止“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使得本连接持续的时间所产生的的所有报文段都从网络中消失。这样下一个新的连接不会出现旧的失效的报文段。

上一篇 下一篇

猜你喜欢

热点阅读