卷2 第30章 TCP的用户需求
30.1 引言
tcp_usrreq处理TCP插口的用户请求。
30.2 tcp_usrreq函数
PRU_ATTACH
- 分配Internet PCB
- 分配TCP控制块
- 设置SO_LINGER
PRU_DETACH
- 关闭连接
- 释放资源
PRU_BIND
- in_pcbbind
PRU_LISTEN
- 设置LISTEN状态
PRU_CONNECT(主动打开)
- 分配临时端口
- in_pcbconnect
- tcp_template
- 设置SYN_SENT状态
- 发送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用户请求,连接管理、数据传输和选项控制。