再看網路協議

2022-04-13 21:06:17 字數 1526 閱讀 2014

struct sock

sock->sk_receive_queue

協議棧負責把資料放到sk_receive_queue中,程序通過recvmsg_from去從協議棧中讀資料,

在sk_receive_queue中的都是乙個完整的從使用者發過來的skb資料報了,裡面有完整的tcp的控制資訊位於:tcp_skb_cb中,其中有個關鍵的資訊就是序列號了,這tcp_skb_cb->seq

這個skb中內容在ip層和mac層是如何合併的,還有在skb_receive_queue中的資料報都是有順序的嗎?

以下面一條log為例:測試程式codebox:find_ok_skb.stp

解釋下,其中紅色部分標誌的是乙個socket,其中藍色部分標誌的是skb的位址,offset為啥是0一下子就很清楚了,是因為在tcp_recvmsg函式中,對乙個skb的讀可能是粉塵過了好多次:詳細可以看下面的前四條記錄,這個skb中有102個位元組,這102個位元組是通過4次copy讀出來的,每次分別讀了5\91\5\1個位元組讀出來,其中每一次的offset分別是0/5/96/101,正好對應,這個也從側面表明了到tcp_recvmsg中讀出來sk_receive_queu佇列中的skb都是排好順序了這個時候讀出來的資料都是連續的資料。

socket thread ffff8800a5b87800:2383359782 len:1

skb:ffff8800a8b6dd00 curseq: 2383359782 offset(0) len(102) size(5)

socket thread ffff8800a5b87800:2383359787 len:1

skb:ffff8800a8b6dd00 curseq: 2383359782 offset(5) len(102) size(91)

socket thread ffff8800a5b87800:2383359878 len:1

skb:ffff8800a8b6dd00 curseq: 2383359782 offset(96) len(102) size(5)

socket thread ffff8800a5b87800:2383359883 len:1

skb:ffff8800a8b6dd00 curseq: 2383359782 offset(101) len(102) size(1)

socket thread ffff8800a5b87800:2383359884 len:1

skb:ffff8800a8b6cb00 curseq: 2383359884 offset(0) len(45) size(5)

socket thread ffff8800a5b87800:2383359889 len:1

skb:ffff8800a8b6cb00 curseq: 2383359884 offset(5) len(45) size(40)

socket thread ffff8800a5b87800:2383359929 len:1

skb:ffff8800a8b6d200 curseq: 2383359929 offset(0) len(421) size(5)

再看社交網路

社交網路領域的術語 圖譜 一種網狀結構,代表實體 興趣,人 和聯絡。實體就像頻率分量,聯絡就像相位和幅度。興趣圖譜 社交圖譜,從譜中濾出你關心的分量,進而建立聯絡 通訊 聚類 一種演算法,用來從社交網路 資料庫 中根據需求分類,便於提高搜尋的查全率。查全率 一次查詢中需要的和所有的之比 和查準率的關...

網路協議分層 網路協議介紹

現在的網路都採用分層的方式進行工作 高層 包括應用層 表示層 會話層 傳輸層,負責主機之間的資料傳輸 底層 網路層 資料鏈路層 物理層,負責網路資料傳輸 從高層到底層分別是 應用層 提供程式之間的通訊,常見協議有http ftp 表示層 處理資料格式 資料加密等,常見協議有nbssl lpp 會話層...

網路協議 RPC協議

遠端呼叫協議,用於定義服務之間的介面呼叫規範標準 最早的rpc框架之一 1.2.1 外部資料表示法 xdr 規定互動協議的檔案,包括 與古老的rpc協議相比,雙方的soap協議沒必要完全一致 引數順序 引數個數等 更加靈活 也是乙個xml,描述了方法名 服務名 埠 請求引數等資訊,通過在服務位址後加...