協議傳送流程

2021-10-02 16:32:14 字數 1296 閱讀 9221

tcp_sendmsg

tcp_write_xmit

tcp_mtu_probe(palyload checksum)

tcp_transmit_skb

ip_queue_xmit

__sk_dst_check

ipv4_dst_check

rt_is_expired(當路由資訊有變化時,會通過rt_cache_flush更新net->rt_genid,每次發skb包時,都會校驗下路由資訊是否有效,如果有變化,則通過sk_setup_caps->sk_dst_set將新的路由資訊dst_entry設定到skb->sk裡,乙個新的tcp連線在tcp_v4_connect->sk_setup_caps就事先將該連線的路由資訊設定好)

ip_route_output_ports(ip路由選擇,設定output=ip_output)

ip_route_output_flow

__ip_route_output_key_hash

__mkroute_output(設定dst.output = ip_output)

設定ip頭資訊

ip_local_out    

__ip_local_out_sk(執行netfilter子系統的nf_inet_local_out過濾鏈)

dst_output_sk(執行skb_dst(skb)->output,這裡的output即為__mkroute_output裡設定的ip_output)

ip_output(執行netfilter子系統的nf_inet_post_routing過濾鏈)

ip_finish_output(判斷是否需要ip分片,有與tcp有mss的限制,因此tcp報文不需要分片) 

dst_neigh_output

dev_queue_xmit

__dev_queue_xmit(選擇傳送佇列txq)

__dev_xmit_skb(將skb加入到txq的qdisc佇列裡)

__qdisc_run

qdisc_restart

dequeue_skb(從qdisc快取佇列裡獲取skb)

sch_direct_xmit

validate_xmit_skb_list(判斷是否需要gso分片,tcp的gso就在這裡完成)

dev_hard_start_xmit

xmit_one    

netdev_start_xmit

__netdev_start_xmit(呼叫驅動完成skb的傳送)

__netif_schedule(如果一次傳送不完,則啟用軟中斷,在軟中斷處理裡繼續傳送)

Linux TCP IP 協議棧資料傳送流程

一.linux核心網路棧 的準備知識 1.linux核心ipv4網路部分分層結構 bsd socket層 這一部分處理bsd socket相關操作,每個socket在核心中以struct socket結構體現。這一部分的檔案主要有 net socket.c net protocols.c etc i...

檔案傳送協議

檔案傳送協議ftp是網際網路上使用得最廣泛的檔案傳送協議。ftp遮蔽了各計算機系統的細節,因而適合於在異構網路中任意計算機之間傳送檔案。ftp 基於tcp tftp 簡單檔案傳送協議,基於udp 檔案傳送協議ftp只提供檔案傳送的一些基本的服務,它使用tcp可靠的運輸服務。ftp的主要功能樹減少或消...

時傳送協議(RTP)協議

實時傳送協議 real time transport protocol或簡寫rtp 是乙個網路傳輸協議 它是由ietf的多 傳輸工作小組1996年 在rfc 1889 中公布的。國際電信聯盟 itu t也發布了自己的rtp文件,作為h.225.0,但是後來當ietf發布了關於它的穩定的標準rfc後就...