Linux 内核中 TCP 连接建立与 sk_buff 结构详解
1. TCP 连接建立的内核实现
在 TCP 连接建立过程中,有一系列重要的函数调用和操作。首先,在 tcp_charge_skb() 函数中更新相关信息后,需要调用 tcp_transmit_skb() 来传输 sk_buff 进行后续处理。这里传递给 tcp_transmit_skb() 的不是刚分配的 sk_buff ,而是它的克隆。克隆意味着分配一个新的 sk_buff 结构,但数据部分是共享的,新的 sk_buff 并不归属于套接字。
tcp_transmit_skb() 函数的主要作用是传输传入的数据包。在传输之前,该函数需要构建 TCP 头部,因为待处理的 sk_buff 头部尚未初始化。具体步骤如下:
1. 确定 TCP 选项支持情况 :从系统控制全局变量 sys_ctl * 中获取协议支持的 TCP 选项信息。
2. 调整 TCP 头部大小 :根据支持的选项,增加 TCP 头部的大小以容纳这些选项。
3. 调整数据指针 :确定最终的 TCP 头部大小后,调整 sk_buff 的数据指针,使其指向 TCP 头部开始的位置。
4.
超级会员免费看
订阅专栏 解锁全文
840

被折叠的 条评论
为什么被折叠?



