Inside Linux TCP stack: Overview
Inside Linux TCP stack: Overview
Inside Linux TCP stack: Overview
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Rx Data: from NIC<br />
Key features: Rx data<br />
tcp_v4_do_rcv() tcp_rcv_established(FAST PATH)<br />
如果符合以下条件:顺序 SEG 、只有 PSH/ACK 标志、<br />
除 timestamp 外无其他选项、发送窗口未变化,就进<br />
入快速接收路径:<br />
1. 解析 timestamp 、进行PAWS检查,若失败就进<br />
入正常接收 iytk<br />
2. 如果 SEG 长度小于最小值,就丢包返回0<br />
3. 尝试使用 DMA channel 复制<br />
4. 如果当前任务就是接收方,尝试直接复制到 “ 接收区 ” 内。<br />
5. 如果以上尝试成功:<br />
5.1 如果 SEG 包含上次发送的第一个 SEG 的 ACK ,就更<br />
新 timesstamp 记录<br />
5.2 RTTM<br />
5.3 发送可能的数据。<br />
6. 如果以上优化尝试的都没有成功,就进行校验和检查,再<br />
执行第 5 步,之后将 SEG 放入接收队列<br />
7. 调用 tcp_ack() 处理接收到的 ACK ,更新 <strong>TCP</strong> 内部状态,<br />
如 snd_una ,刷新重传队列。<br />
8. 通知这个 socket 上的休眠任务。