卷2 第30章 TCP的用户需求

30.1 引言

tcp_usrreq处理TCP插口的用户请求。

30.2 tcp_usrreq函数

PRU_ATTACH

  1. 分配Internet PCB
  2. 分配TCP控制块
  3. 设置SO_LINGER

PRU_DETACH

  • 关闭连接
  • 释放资源

PRU_BIND

  • in_pcbbind

PRU_LISTEN

  • 设置LISTEN状态

PRU_CONNECT(主动打开)

  1. 分配临时端口
  2. in_pcbconnect
  3. tcp_template
  4. 设置SYN_SENT状态
  5. 发送SYN

PRU_DISCONNECT

  • 开始关闭连接

PRU_SHUTDOWN

  • 禁止输出
  • 发送FIN

PRU_SEND

  • 添加数据到发送缓存
  • 调用tcp_output

PRU_ABORT

  • 发送RST

PRU_RCVOOB

  • 读取带外数据

PRU_SENDOOB

  • 发送带外数据
  • 设置紧急指针

30.3 tcp_attach函数

  • 分配PCB和TCP控制块
  • 设置默认缓存大小

30.4 tcp_disconnect函数

  • 正常关闭(发送FIN)
  • 硬关闭(发送RST,SO_LINGER=0)

30.5 tcp_usrclosed函数

  • 根据状态迁移到下一状态
  • CLOSED/LISTEN → 直接关闭
  • ESTABLISHED → FIN_WAIT_1
  • CLOSE_WAIT → LAST_ACK

30.6 tcp_ctloutput函数

TCP_NODELAY

  • 控制Nagle算法

TCP_MAXSEG

  • 设置/获取MSS

30.7 小结

tcp_usrreq处理所有TCP用户请求,连接管理、数据传输和选项控制。