02.07.2013 Views

Inside Linux TCP stack: Overview

Inside Linux TCP stack: Overview

Inside Linux TCP stack: Overview

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

inet_stream_connect()<br />

tcp_v4_connect()<br />

tcp_connect()<br />

tcp_transmit_skb()<br />

Create new connections<br />

Client: - / SYN<br />

检查 socket 的 “ 抽象 ” 状态,如果未连接,就启动连接。<br />

之后,等待连接完成。如果是非阻塞模式就立即返回。<br />

设置 SYN_SENT 状态<br />

端口检查,如果没有绑定端口,就自动绑定一个端口;<br />

根据 socket pair ,查找输出路由;<br />

计算 <strong>TCP</strong> 序列号, IP 报文ID。<br />

tcp_connect_init()<br />

计算可用的 MSS ( MTU + sockopt ), <strong>TCP</strong>-MTUP 的初始化,估算 rcv_mss ;<br />

计算发送窗口(缓冲大小、 Scaling 、 sockopt );<br />

初始化 <strong>TCP</strong> 内部状态: snd_una/rcv_nxt/rcv_wup/copied_seq 等,复位计数器;<br />

--------------------------<br />

分配 skb ,设置相关的发送队列信息(内存计数, quota 统计,重启RTO)<br />

构造 <strong>TCP</strong> options(time stamp/MSS/Window-scaling/SACK ability)<br />

构造 <strong>TCP</strong> header (包括检验和)<br />

发送IP报文

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

Saved successfully!

Ooh no, something went wrong!