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

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

下面列出TCP头部中常用的字段含义:
a)以太网帧头+IP头+TCP头部
b)源端口和目的端口:分别为16位字节,最大为65535,详情参照计算机端口详解
c)序列号和确认号:序列号,标识发端到收端的字节流;确认号,确认的一端期望收到的下一个序号,详情参照TCP序列号与确认号详解 下文截图中,注意观察序列号与确认号的变化
d)标志比特:URG、ACK、PSH、RST、SYN和FIN,用于发端和收端的通信交流
e)窗口大小:发端有控制窗口,用于发端流量控制;收端有通用窗口,用于收端流量控制
二、三次握手与四次挥手
TCP建立时,三次握手;TCP终止时,四次挥手。其中,涉及到发端与收端的共计12种状态,如下图所示,

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

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

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

c)CLIENT收到SYN K和ack J+1,进入ESTABLISHED状态,并且发送ack K+1
d)SERVER收到ack K+1,进入ESTABLISHED状态
至此,经过三次握手,TCP正式建立连接

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

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

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

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)三次握手与四次挥手为最常见的情况,但同时存在双方同时打开与同时关闭的情况,但是发生的概率很小,仅需要四个报文段完成连接和终止
网友评论