linux TCP数据包封装在SKB的过程分析

在linux中 tcp的数据包的封装是在函数tcp_sendmsg开始的,在函数tcp_sendmsg中用到skb = sk_stream_alloc_skb(sk, select_size(sk, sg),sk->sk_allocation);分配了一个SKB(暂且称之为old_skb)

而真正的发送的SKB并不是old_skb,而是在函数tcp_transmit_skb中新分配了一个skb(暂且称之为new_skb

old_skb和new_skb的关系在函数tcp_transmit_skb中体现了

skb(new_skb) = pskb_copy(skb(old_skb), gfp_mask);或者skb (new_skb)= skb_clone(skb(old_skb), gfp_mask);

而后再利用

skb_push(skb, tcp_header_size);skb_reset_transport_header(skb); 等函数来将头部信息加入到new_skb中。

简单的流程图如下:

总有一天,我会丢下我所有的疲倦和理想,

linux TCP数据包封装在SKB的过程分析

相关文章:

你感兴趣的文章:

标签云: