Inside Linux TCP stack: Overview
Inside Linux TCP stack: Overview
Inside Linux TCP stack: Overview
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报文