linux TCP数据包封装在SKB的过程分析
生活随笔
收集整理的這篇文章主要介紹了
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中。
簡單的流程圖如下:
from :http://blog.csdn.net/scdxmoe/article/details/17679067
轉載于:https://www.cnblogs.com/hehehaha/p/6332316.html
總結
以上是生活随笔為你收集整理的linux TCP数据包封装在SKB的过程分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: enum to IEnumerableT
- 下一篇: linux上部署hadoop集群 HA-