協議棧之一:《linux核心網路棧原始碼情景分析》.(曹桂平)
在工作中或多或少需要和協議棧打交道,因為公司的策略,公司自有的協議棧基本都是基於開源協議棧的理解重寫的協議棧,在可維護性和效能方面均比開源軟體強勢很多,可惜在公司時更多是呼叫API,並未從頭到尾研究過一個完整的協議棧。從事網路工作沒有研究過完整的協議棧,不得不說是個嚴重的缺失。
本想基於2.6核心進行協議棧分析,分析了一段時間,感覺有些吃力,估計得分析幾遍才能理解透徹,而且並不能真正掌握。
發現了《linux核心網路棧原始碼情景分析》,此書是基於1.2.3版本Linux進行的分析,20多年前的版本,不過對於協議棧的一些理論分析為不錯的參考。整個協議棧收發包流程以及協議設計並沒有太大的改變,更多的是基於效能考慮優化了資料結構以及相應的演算法,當然此版本不支援多核,所以整個過程沒有鎖,或者使用變數標誌作為鎖。
下一步準備分析一下最新版本Linux的協議棧。
相關推薦
協議棧之一:《linux核心網路棧原始碼情景分析》.(曹桂平)
在工作中或多或少需要和協議棧打交道,因為公司的策略,公司自有的協議棧基本都是基於開源協議棧的理解重寫的協議棧,在可維護性和效能方面均比開源軟體強勢很多,可惜在公司時更多是呼叫API,並未從頭到尾研究過一個完整的協議棧。從事網路工作沒有研究過完整的協議棧,不得不說是個嚴重的缺
Linux核心--網路棧實現分析(十)--網路層之IP協議(下)
本文分析基於Linux Kernel 1.2.13作者:閆明注:標題中的”(上)“,”(下)“表示分析過程基於資料包的傳遞方向:”(上)“表示分析是從底層向上分析、”(下)“表示分析是從上向下分析。上篇博文分析傳輸層最終會呼叫函式ip_queue_xmit()函式,將傳送資料
Linux核心--網路棧實現分析(二)--資料包的傳遞過程(上)
本文分析基於Linux Kernel 1.2.13作者:閆明注:標題中的”(上)“,”(下)“表示分析過程基於資料包的傳遞方向:”(上)“表示分析是從底層向上分析、”(下)“表示分析是從上向下分析。上一篇博文中我們從巨集觀上分析了Linux核心中網路棧的初始化過程,這裡我們再
Linux 核心網路協議棧 -sk_buff結構體
sk_buff結構體是linux網路程式碼中最重要的資料結構,是整個網路傳輸載體。所以sk_buff結構體裡面有很多關於其他功能的成員欄位,比如:防火牆,子路由系統,多播等。這些欄位並不是一定有的,只有在滿足特點條件才有的。 sk_buff結構體是雙鏈表結構,sk_buf
Linux 核心網路協議棧 ------ 擁塞避免處理函式 tcp_reno_cong_avoid
慢啟動和快速重傳擁塞避免演算法,函式tcp_reno_cong_avoid 在“慢開始”階段,每收到一個ACK,cwnd++一次,那麼一個RTT之後,cwnd就會加倍 擁塞避免階段,其實就是在一個RTT時間內將cwnd++一次( 注意在不丟包的情況下 ) /* *
linux核心網路協議棧學習筆記(6)
本篇討論IP包的收發(暫不包括路由) 先來看inet_init, 首先是呼叫proto_register,註冊了tcp_prot, udp_prot, raw_prot,其中proto_register前半部分是初始化各種slab_cache,後半部分把這些struct
Linux 核心網路協議棧 中最重要的資料結構 SKB
在計算機的世界裡,備份是一種美德。-------------漫步雲端 作為核心網路協議部分最重要的資料結構SKB,有很多值得仔細推敲的問題。 SKB這種說法實際包含了兩部分,即skb描述符和skb資料。 Skb描述符即核心中的skbuff結構體,裡面含有大量的指標變數
Linux 核心網路協議棧 ------ tcp重傳資料包 tcp_retransmit_skb 函式
/* This retransmits one SKB. Policy decisions and retransmit queue * state updates are done by the caller. Returns non-zero if an
Linux核心網路協議棧程式碼分析
^ | sys_read fs/read_write.c | sock_read net/socket.c | sock_recvmsg net/socket.c | inet_re
Linux 核心網路協議棧 ----- Linux 核心路由機制(一) (2.6.25)
核心的路由部分是是網路中重要部分,目前在Linux核心中預設的路由查詢演算法使用的是Hash查詢,所以你會看到很多的資料結構是XXX_hash什麼之類(例如fn_hash)。Linux核心從2.1開始就支援基於策略的路由,那麼什麼是基於策略的路由呢?我們一般
Linux 核心網路協議棧 ------sk_buff 結構體 以及 完全解釋 (2.6.16)
在2.6.24之後這個結構體有了較大的變化,此處先說一說2.6.16版本的sk_buff,以及解釋一些問題。 一、 先直觀的看一下這個結構體~~~~~~~~~~~~~~~~~~~~~~在下面解釋每個欄位的意義~~~~~~~~~~~ struct sk_buff {
【Linux 核心網路協議棧原始碼剖析】socket.c——BSD Socket層(1)
寫在前面:本系列文章先把各個層對應的檔案原始碼剖析一遍,最後再穿插起來,理清整個協議棧網路資料包的上下傳送通道,從整體實現上進行把握。 圖片來源於《Linux 核心網路棧原始碼情景分析》 更上層函式:tcp socket函式介紹。本篇則是介紹BSD Sock
Linux 核心網路協議棧 ------ tcp_ack 函式處理接收到的ACK包之後
注意 tcp_ack 是來處理接收到的ACK的,那麼到底怎麼去做呢?看下面: 先還上把tcp_sock的結構放在這裡,下面一些資料的分析需要用到: struct tcp_sock { /* inet_connection_sock has to be
【Linux 核心網路協議棧原始碼剖析】bind 函式剖析
socket 函式並沒有為套接字繫結本地地址和埠號,對於伺服器端則必須顯性繫結地址和埠號。bind 函式主要是伺服器端使用,把一個本地協議地址賦予套接字。 1、應用層——bind 函式 #include <sys/socket.h> int bind(int
TCP/IP協議棧在Linux核心中的執行時序分析
網路程式設計調研報告 TCP/IP協議棧在Linux核心中的執行時序分析 姓名:柴浩宇 學號:SA20225105 班級:軟設1班 2021年1月 調研要求 在深入理解Linux核心任務排程(中斷
調整Linux的網路棧(Buffer Size)來提升網路效能
本文基於CENTOS 、DEBIAN/UBUNTU 編寫 。 我有兩臺位於不同資料中心的伺服器,都用來處理很多並行的大檔案傳輸。但是處理大檔案,網路效能非常差。並且涉及到一個大檔案,會導致效能降級。我怎樣通過調整Linux下面的 TCP 來解決這個問題? 預設,Li
【2017-06-20】Linux應用開發工程師C/C++面試問題之一:Linux多線程程序的同步問題
依次 其它 如果 開發工程師 logs 特殊 另一個 特殊情況 發生 參考之一:Linux 線程同步的三種方法 鏈接地址:http://www.cnblogs.com/eleclsc/p/5838790.html 簡要回答: Linux下線程同步最常用的三種方法就是互斥鎖、
讀書筆記:LINUX核心完全剖析:基於0.12核心
讀書筆記:LINUX核心完全剖析 IBM PC及其相容機主要使用 獨立編址方式,採用獨立的I/O地址空間對控制裝置中的暫存器進行定址和訪問,IBM PC也部分地使用統一編址。對於使用EISA、PCI等匯流排結構的PC,有64KB的I/O地址空間可供使用。在普通Li
棧一:用兩個棧實現佇列
/** * 題目:用兩個棧實現佇列 * 描述:用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 * 解決方案:方法一:一個作為儲存用,一個作為彈出用 * */ public class One { Stack
Linux C程式設計之一:Linux下c語言的開發環境
—恢復內容開始— 今天開始根據Linux C程式設計相關視訊的學習所做的筆記,希望能一直堅持下去。。。 1、開發環境的構成 編輯器:VI; 編譯器:選擇GNU C/C++編譯器gcc; 偵錯程式:應用廣泛的gdb; 函式庫:glibc ; 系統標頭檔案:glibc_header; 2、在安裝L