tcp 棧簡要過程:
tcp_sendmsg 函式會首先檢查已經建立的 tcp connection 的狀態,然後獲取該連線的 mss,開始 segement 傳送流程。
構造 tcp 段的 playload:它在核心空間中建立該 packet 的 sk_buffer 資料結構的例項 skb,從 userspace buffer 中拷貝 packet 的資料到 skb 的 buffer。
構造 tcp header。
計算 tcp 校驗和(checksum)和 順序號 (sequence number)。
tcp 校驗和是乙個端到端的校驗和,由傳送端計算,然後由接收端驗證。其目的是為了發現tcp首部和資料在傳送端到接收端之間發生的任何改動。如果接收方檢測到校驗和有差錯,則tcp段會被直接丟棄。tcp校驗和覆蓋 tcp 首部和 tcp 資料。
tcp的校驗和是必需的
發到 ip 層處理:呼叫 ip handler 控制代碼 ip_queue_xmit,將 skb 傳入 ip 處理流程。
udp 棧簡要過程:
udp 將 message 封裝成 udp 資料報
1.1.3 ip 網路層 – 新增header 和 checksum,路由處理,ip fragmentation
網路層的任務就是選擇合適的網間路由和交換結點, 確保資料及時傳送。網路層將資料鏈路層提供的幀組成資料報,包中封裝有網路層包頭,其中含有邏輯位址資訊- -源站點和目的站點位址的網路位址。其主要任務包括
(1)路由處理,即選擇下一跳
(2)新增 ip header(3)計算 ip header checksum,用於檢測 ip 報文頭部在傳播過程中是否出錯
(4)可能的話,進行 ip 分片
首先,ip_queue_xmit(skb)會檢查skb->dst路由資訊。如果沒有,比如套接字的第乙個包,就使用ip_route_output()選擇乙個路由。
接著,填充ip包的各個字段,比如版本、包頭長度、tos等。
中間的一些分片等,可參閱相關文件。基本思想是,當報文的長度大於mtu,gso的長度不為0就會呼叫 ip_fragment 進行分片,否則就會呼叫ip_finish_output2把資料傳送出去。ip_fragment 函式中,會檢查 ip_df 標誌位,如果待分片ip資料報禁止分片,則呼叫 icmp_send()向傳送方傳送乙個原因為需要分片而設定了不分片標誌的目的不可達icmp報文,並丟棄報文,即設定ip狀態為分片失敗,釋放skb,返回訊息過長錯誤碼。
接下來就用 ip_finish_ouput2 設定鏈路層報文頭了。如果,鏈路層報頭快取有(即hh不為空),那就拷貝到skb裡。如果沒,那麼就呼叫neigh_resolve_output,使用 arp 獲取。
關於TCP IP協議棧
一。tcp ip協議棧及其不同層次的協議 二。協議概述 1 tcp 傳輸控制協議,是一種面向連線的協議,提供全雙工的位元組流 是流套介面的一種。2 udp 使用者資料報協議,無連線協議,與tcp一樣可以使用ipv4或ipv6 是資料報套介面 的一種。3 icmp 網際控制訊息協議,處理路由器與主機間...
TCP IP 協議 協議棧
tcp ip協議棧 整個協議棧被分為了四層,每一層協議負責不同的功能 鏈路層 負責處理物理介面的細節,接受傳送的都是位元流,鏈路層主要有三個目的 1.為ip模組傳送和接收i p資料報 2.為arp模組傳送arp請求和接收arp應答 3.為rarp傳送rarp請求和接收rarp應答 網路層 用來處理網...
TCP IP協議 TCP IP協議棧及框架
tcp ip協議同iso osi模型一樣,也可以安排成棧形式。但這個棧不同於iso osi版本,比iso osi棧少,所以又稱之為短棧。另外,需要知道的是 tcp ip協議棧只是許多支援iso osi分層模型協議棧的一種,是乙個具體的協議棧。對於tcp ip協議棧劃分為幾層更合適,多年來專家們一直未...