02.07.2013 Views

Inside Linux TCP stack: Overview

Inside Linux TCP stack: Overview

Inside Linux TCP stack: Overview

SHOW MORE
SHOW LESS

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 上的休眠任务。

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!