TCP之连接的建立与终止

一、TCP浅谈

TCP:传输控制协议,一种面向连接的、可靠的、端到端的字节流服务。TCP包首部如下图,

TCP包首部
IP首部

基于WireShark分析TCP首部字段的含义,如下图,

WireShark分析TCP首部

下面列出TCP头部中常用的字段含义:

a)以太网帧头+IP头+TCP头部

b)源端口和目的端口:分别为16位字节,最大为65535,详情参照计算机端口详解

c)序列号和确认号:序列号,标识发端到收端的字节流;确认号,确认的一端期望收到的下一个序号,详情参照TCP序列号与确认号详解 下文截图中,注意观察序列号与确认号的变化

d)标志比特:URG、ACK、PSH、RST、SYN和FIN,用于发端和收端的通信交流

e)窗口大小:发端有控制窗口,用于发端流量控制;收端有通用窗口,用于收端流量控制

二、三次握手与四次挥手

TCP建立时,三次握手;TCP终止时,四次挥手。其中,涉及到发端与收端的共计12种状态,如下图所示,

三次握手与四次挥手

为更好的解释连接与终止的过程,结合WireShark分析此过程,

Client主动连接

a)CLIENT主动连接,发送SYN J同步信号,从CLOSED状态进入SYN_SENT状态

SERVER接收SYN,并发送SYN K和ack J+1

b)SERVER接收SYN,进入SYN_RCVD状态,并且发送SYN K和ack J+1

CLIENT发送ack K+1

c)CLIENT收到SYN K和ack J+1,进入ESTABLISHED状态,并且发送ack K+1

d)SERVER收到ack K+1,进入ESTABLISHED状态

至此,经过三次握手,TCP正式建立连接

CLIENT发送FIN M,主动关闭连接

e)CLIENT发送FIN终止信号,主动关闭连接,进入FIN_WAIT_1状态;CLIENT不再发送数据,但SERVER仍然可以发送数据

SERVER发送ack M+1

f)SERVER收到FIN M,进入CLOSE_WAIT状态,并且发送ack M+1

SERVER发送FIN N

g)CLIENT收到ack M+1,进入到FIN_WAIT_2状态

CLIENT发送ack N+1

h)CLIENT收到FIN N,并且发送ack N+1,进入TIME_WAIT状态,在2MSL时间后,进入到CLOSED状态(2MSL在下文解释)

三、补充问题说明

a)主动终止也可以发生在SERVER端

b)发端进行主动SYN请求时,发生连接建立的超时情况,超时间隔由二进制指数退避算法确定

c)在连接建立阶段,收发双方会传送MSS(最大报文段长度),分别通告对方期望接受的选项

d)为什么终止需要四次挥手?因为TCP是一种全双工的模式,即通信双方同时双向传输数据,任意一段断开连接仅会进入半关闭状态,仍然单方向存在数据传输

e)MSL为报文段最大生存时间,假设网络不可靠,最后的ack确认指令丢失。该字段用于重发可能丢失的报文

f)在2MSL阶段,本地IP、端口号和远端IP、端口号构成四元组,理论上其他应用程序不能暂用,但是具体软件实现存在特殊情况

g)三次握手与四次挥手为最常见的情况,但同时存在双方同时打开与同时关闭的情况,但是发生的概率很小,仅需要四个报文段完成连接和终止

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容