一些基础概念
TCP报文标志位和序列号
1.SYN (Synchronize Sequence Numbers)
同步序列号标志位
值为1或0(1位)
SYN=1 表示这是一个连接请求或连接接受报文
用于建立连接时的同步序列号
2.ACK (Acknowledgment)
确认标志位
值为1或0(1位)
ACK=1 表示确认号字段有效
在连接建立后所有报文的ACK都为1
3.seq (Sequence Number)
序列号
32位的数字
用于标识从TCP发送端向TCP接收端发送的数据字节流的序号
初始序列号(ISN)是随机的
表示这个报文段的第一个字节的序号是1000
4.ack (Acknowledgment Number)
确认号
32位的数字
期望收到对方下一个报文段的第一个字节的序号
等于已收到的数据的最后一个字节的序号加1
例如:ack=1001 表示序号为1000的数据已收到,下次期望收到1001序号的数据
三次握手过程
为什么需要三次握手
-
确认双方通信能力
- 发送能力
- 接收能力
- 双方的序列号能被对方正确接收和确认
-
防止旧连接
- 如果是历史连接的 SYN 报文,服务器回复 SYN+ACK 后
- 客户端会回复 RST 报文,而不是 ACK
- 从而避免建立错误的连接
-
同步双方初始序列号
- 防止网络包被延迟、重复或丢失
- 保证数据包的有序性
四次挥手过程
为什么需要四次挥手?
-
TCP是全双工通信
- 两端都能独立发送和接收数据
- 关闭连接时两个方向都需要单独关闭
-
确保数据完整传输
- 服务器收到关闭请求时可能还有数据需要发送
- 等待数据发送完毕后才能关闭