卷2 第27章 TCP的函数

27.1 引言

本章介绍TCP的辅助函数。

27.2 tcp_drain函数

  • 内存不足时调用
  • 不丢弃数据(与IP不同)

27.3 tcp_drop函数

  • 发送RST丢弃连接
  • 返回差错码

调用场景

场景差错码
连接请求拒绝ECONNREFUSED
收到RSTECONNRESET
重传超时ETIMEDOUT
用户中止ECONNABORTED

27.4 tcp_close函数

更新路由度量

  1. 判断是否发送足够数据
  2. 更新RTT和偏差
  3. 更新慢启动门限

释放资源

  1. 丢弃重组队列
  2. 释放首部模板
  3. 释放TCP控制块
  4. 释放Internet PCB

27.5 tcp_mss函数

计算MSS

  1. 获取路由
  2. 使用路由MTU
  3. 减去IP+TCP首部
  4. 对齐到MCLBYTES
  5. 非本地地址限制为512

初始化RT T估计器

  • 从路由表恢复度量

27.6 tcp_ctlinput函数

  • 处理ICMP差错
  • 源站抑制 → tcp_quench

27.7 tcp_notify函数

  • 处理软差错
  • 记录到t_softerror

27.8 tcp_quench函数

  • 源站抑制时调用
  • cwnd = 1段

27.9 TCP_REASS宏和tcp_reass函数

重组队列

  • 双向循环链表
  • 使用IP首部字段存储指针

tcp_reass函数

  1. 处理SYN中数据
  2. 查找插入位置
  3. 删除重复数据
  4. 插入队列
  5. 提交连续数据

27.10 tcp_trace函数

  • 调试支持
  • 保存到环形缓存
  • trpt程序读取

27.11 小结

TCP辅助函数处理连接关闭、MSS计算、ICMP差错和重组队列。