TCP/IP协议栈测试
TCP/IP协议栈
一、TCP/IP协议栈核心功能列表及实现原理
1. 连接管理
-
连接建立(三次握手):
客户端 → SYN(seq=x) → 服务端 服务端 → SYN(seq=y)+ACK(ack=x+1) → 客户端 客户端 → ACK(ack=y+1) → 服务端
原理:通过序列号同步双方初始序列号,防止历史连接混淆
-
连接终止(四次挥手):
主动方 → FIN(seq=u) → 被动方 被动方 → ACK(ack=u+1) → 主动方 被动方 → FIN(seq=v) → 主动方 主动方 → ACK(ack=v+1) → 被动方
原理:双方独立关闭各自的数据传输通道
2. 数据包分段与重组
-
分段(MSS):
原理:发送方根据MSS(最大分段大小)将大数据分割// 内核实现伪代码 if (data_size > mss) {segments = ceil(data_size / mss);for (i=0; i<segments; i++) {send_segment(data + i*mss, min(mss, remaining));} }
-
重组:
原理:接收方根据序列号排序重组// 重组缓冲区管理 while (next_expected_seq != received_seq) {buffer[received_seq] = segment;if (is_contiguous(buffer)) {deliver_data();update_next_expected_seq();} }
3. 差错控制
-
校验和计算:
原理:发送方计算16位反码和def checksum(data):total = 0for i in range(0, len(data), 2):word = (data[i] << 8) + data[i+1]total = (total + word) & 0xFFFFreturn ~total & 0xFFFF
-
超时重传:
原理:基于RTT动态计算超时时间// Linux内核中的RTO计算 rtt = measure_rtt(); srtt = (1 - α) * srtt + α * rtt; rttvar = (1 - β) * rttvar + β * |srtt - rtt|; rto = max(MIN_RTO, srtt + 4 * rttvar);
-
重复包检测:
原理:接收方维护滑动窗口,丢弃序列号重复的包
4. 流量控制
- <