TCP的连接与释放
TCP的连接与释放
- TCP是面向连接的协议,它基于运输连接来传送TCP报文段
- TCP运输连接的建立和释放,是每一次面向连接的通信中必不可少的过程
- TCP运输连接有以下三个阶段:
- 通过“三报文握手”来建立TCP连接。
- 基于已建立的TCP连接进行可靠的数据传输。
- 在数据传输结束后,还要通过“四报文挥手”来释放TCP连接。
“三报文握手”建立TCP连接的目的在于解决以下三个主要问题
- 使TCP双方能够确知对方的存在。
- 使TCP双方能够协商一些参数(例如最大报文段长度、最大窗口大小、时间戳选项等)
- 使TCP双方能够对运输实体资源进行分配和初始化。运输实体资源包括缓存大小、各状态变量、连接表中的项目等。
- TCP规定同步标志位SYN被设置为1的报文段(例如TCP连接请求报文段和TCP连接请求确认报文段)不能携带数据,但要消耗掉一个序号。
- 按上述规定,TCP连接请求报文段不能携带数据(即没有数据载荷)但是会消耗掉序号x。
TCP规定第三次握手的报文段可以携带数据,但如果不携带数据,则不消耗序号
为什么不能采用两报文握手建立连接
四次挥手释放连接
从这里我们可以看到,FIN=1的报文段同样要消耗掉一个序号
为什么要等待一段时间之后再进入关闭状态?
- 处于时间等待(TIME-WAIT)状态后要经过2MSL时长,可以确保TCP服务器进程能够收到最后一个TCP确认报文段而进入关闭(CLOSED)状态。
- 另外,TCP客户进程在发送完最后一个TCP确认报文段后,再经过2MSL时长,就可是使本次连接持续时间内所产生的的所有报文段都从网络中消失。这样就可以使下一个新的TCP连接中不会出现旧连接中的报文段。
保活计时器
服务器每收到一次客户机发送的报文段,就会重置一次保活计时器,当保活计时器到时后,就向客户机发送探测报文。连续发送10次没有得到响应,就会释放TCP连接。