1. 程式人生 > >Linux TCP/IP 協議棧原始碼分析(一)

Linux TCP/IP 協議棧原始碼分析(一)

---------------------------------------------------------------------------------------------------------------------

        這篇文章寫於三年前,當時手中拿著Stevens的三本鉅著 TCP v1/v2/v3 的摸不著頭腦-因為它們太厚了。我知道我不需要那麼多,那麼詳細。於是有了自己分析原始碼的想法......

        我不對文中的內容提供任何保證,但歡迎與我聯絡以便不斷的修改它,最終給需要知道關於Linux TCP/IP實現的人提供短小精悍的文章內容。

                          --

水元素

---------------------------------------------------------------------------------------------------------------------

第一部分:LinuxTCP/IP實現概述<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Linux通過同時對多種通訊協議的支援來提供通用的底層基礎服務。它的第一個網路模型的版本是4.3 BSD,也稱為Net/1,今天的Linux已經使用Net/4

Linux 2.2),其中大多數程式碼已經完全和BSD的版本不同,但是它依然支援UINX平臺之間程式的移植。

Linux網路套接字實現的模式是UNIX下的普遍標準。同時,Net/4的網路層是完全另起爐灶重寫的。首先,新的網路層儘可能地實行並行處理, 因此其伸縮性比起以前的版本,不可同日而語。其次,它包括了許多的優化,以便繞過不少流行作業系統網路實現中的不合理處(例如Windows)。到目前為止,Linux 是唯一與IPv4IPv6協議標準完全保持相容的作業系統,而Linux2.4IPv4伸縮性又大有提高。

Linux支援的六種不同通訊協議族:

1)TCP/IP (使用TCP/IPInternet

協議族),本文討論的重點。

2)UNIX域協議 (一種程序間通訊的協議)

3)X25協議

4)AX25協議 (業餘無線X25

5)IPX協議 Novell IPX

6)APPLETALK協議 AppleTalk DDP

1.1核心原始碼的組織

1是本文要使用的Linux Net/4網路原始碼的,其中大部分位於目錄/usr/src/linux-2.2.x/net,列表如下,

插口層

BSD Socket

/net/socket.c/net/protocols.c

INET Socket

/ipv4/protocol.c/ipv4/af_inet.c/net/ipv4/core/sock.c

協議層

TCP/UDP

/net/ipv4/udp.c
/net/ipv4/datagram.c
/net/ipv4/tcp_input.c
/net/ipv4//tcp_output.c
/net/ipv4/tcp.c
/net/ipv4/tcp_minisocks.c
/net/ipv4/tcp_timer.c etc...

IP

/net/ipv4/ip_forward.c/net/ipv4/ip_fragment.c
/net/ipv4/ip_input.c/net/ipv4/ip_output.c

介面層

Ethernet

......

1.2 LinuxTCP/IP網路層次結構與實現

Linux通過一組相鄰的軟體層實現了TCP/IP模型,它由BSD Socket層、INET

Socket層、傳輸層、網路層,和鏈路層構成。應用程式使用系統呼叫向核心函式傳遞引數和資料從而進入核心空間,由核心中註冊的核心函式對相應的資料結構進行處理。LinuxTCP/IP層次結構和實現方式如圖 1 所示。

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

圖

待續......

相關推薦

Linux TCP/IP 協議原始碼分析

---------------------------------------------------------------------------------------------------------------------         這篇文章寫於三年前,當時

Linux TCP/IP 協議原始碼分析

一.linux核心網路棧程式碼的準備知識 1. linux核心ipv4網路部分分層結構: BSD socket層: 這一部分處理BSD socket相關操作,每個socket在核心中以struct socket結構體現。這一部分的檔案 主要有:/net/so

linux tcp ip協議學習路線圖1

即將開啟tcp/ip協議棧的學習,本篇部落格主要是提供接下來即將分析的協議棧相應的文章目錄。1. tcp/ip協議棧的資料結構,詳見:點選開啟連結2. inet_init()初始化,詳見:點選開啟連結3. socket()通訊流程基於TCP(面向連線)的socket程式設計,

linux-Tcp IP協議原始碼閱讀筆記【轉】

0 推薦 一.linux核心網路棧程式碼的準備知識 1. linux核心ipv4網路部分分層結構: BSD socket層: 這一部分處理BSD socket相關操作,每個socket在核心中以struct socket結構體現。這一部分的檔案 主要有:/net/socket.c /net/protoc

、基於linux下TCP\IP協議套接字socket初識

在網際網路的世界中,不同的電腦之間需要進行資料交流,那麼他們就需要一個統一的規範,來確定怎麼樣進行交流。根據國際標準化組織ISO定義的標準,網路結構按照不同的功能分為7層,分別是物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。在TCP/IP協體系中,

全面瞭解linux TCP/IP協議

簡要說明  自從熟悉了linux socket程式設計(主要做posix socket的TCP/IP)之後,就一直以來就想寫一篇對TCP/IP有一個比較全面的涵蓋使用者空間、核心以及網絡卡的文章,以便幫助大家在遇到基於socket的TCP/IP問題或困惑時能進

TCP/IP協議初始化完結篇-完成IP層與網絡卡的連線

上回ICMP的插曲說完了,把一個ICMP socket的建立流程說完了。對於資料結構關係圖沒有加入什麼新元素。執行的流程是從inet_family_ops到inet_create,raw_prot,這樣的執行順序。此時完成的只是ICMP協議的處理socket。繼

linux核心網路協議學習筆記6

本篇討論IP包的收發(暫不包括路由) 先來看inet_init, 首先是呼叫proto_register,註冊了tcp_prot, udp_prot, raw_prot,其中proto_register前半部分是初始化各種slab_cache,後半部分把這些struct

Flume NG原始碼分析基於靜態properties檔案的配置模組

日誌收集是網際網路公司的一個重要服務,Flume NG是Apache的頂級專案,是分散式日誌收集服務的一個開源實現,具有良好的擴充套件性,與其他很多開源元件可以無縫整合。搜了一圈發現介紹Flume NG的文章有不少,但是深入分析Flume NG原始碼的卻沒有。準備寫一個系列分析一下Flume NG的

GCC原始碼分析——介紹與安裝

原文連結:http://blog.csdn.net/sonicling/article/details/6702031     上半年一直在做有關GCC和LD的專案,到現在還沒做完。最近幾天程式設計的那臺電腦壞了,所以趁此間隙寫一點相關的分析和

Glide原始碼分析從用法來看之with方法

繼續啃原始碼,用過Glide的人,肯定都覺得它好好用,我們一般只需要幾行程式碼,就可以達到我們想要的效果,可以在這個背後是什麼呢?就需要我們來看了。 我一般看原始碼,我喜歡先從用法來看,然後一步一步的再細扣,所以就先從用法來看Glide的整體流程。 用過Glide的人,用下面這段

zigbee 之ZStack-2.5.1a原始碼分析

先看main, 在檔案Zmain.c裡面 main osal_init_system(); osalInitTasks(); ... ... SampleApp_Init( taskID ); // 使用者定義的任務

Docker Client原始碼分析

主要內容: Docker Client在Docker中的定位,以及Docker Client原始碼的初步分析。 本文選取Docker拆分為DockerCE(社群版)和DockerEE(企業版)之後的Docker-CE的第一個穩定版本v17.06.0-ce。 https://github.com/docker

Hibernate使用及原始碼分析

Hibernate使用及原始碼分析(一) 本篇文章主要通過hibernate初級使用分析一下原始碼,只是給初學者一點小小的建議,不喜勿噴,謝謝! hibernate環境搭建 簡單使用 原始碼走讀 一 hibernate環境搭建 這裡直接

SpringCloud原始碼分析--客戶端搭建

一、前言 上一節的註冊中心搭建完成了,本節開始搭建客戶端,其實對於springcloud的Eureka註冊中心而言,他本身就是服務端也是客戶端,我們上節待見服務端註冊中心的時候,已經通過配置來設定其不向自己註冊,和不去檢索服務的功能,保持了其作為服務註冊中心的相對的功能單一性。 二、pom檔案

Vue原始碼分析:入口檔案

Vue原始碼分析(一):入口檔案   首先開啟命令列,從github下載原始碼,下載到自己的工作目錄。 git clone https://github.com/vuejs/vue.git   這裡我下載的是2.5.17版本的,vue 原始碼是由各種模組用 rollup 工具

okhttp原始碼分析——基本流程超詳細

1.okhttp原始碼分析(一)——基本流程(超詳細) 2.okhttp原始碼分析(二)——RetryAndFollowUpInterceptor過濾器 3.okhttp原始碼分析(三)——CacheInterceptor過濾器 4.okhttp原始碼分析(四)——Conn

也說TCP/IP之計算機網路發展史

聊起計算機網路的發展史,可能得離不開計算機的一個整體的發展概述。我們都知道,世界上第一臺的計算機出現於美國,主要的功能是用來計算導彈的軌跡。這點相信大家都清楚,甚至熟悉歷史的同學還能把首臺計算機的名字,製造年月,面積什麼的都給說出來。但這並不是我們的知識重點,我們的知識重點在於,這臺計算

spring事務管理原始碼分析配置和事務增強代理的生成流程

在本篇文章中,將會介紹如何在spring中進行事務管理,之後對其內部原理進行分析。主要涉及 @EnableTransactionManagement註解為我們做了什麼? 為什麼標註了@Transactional註解的方法就可以具有事務的特性,保持了資料的ACID特性?spring到底是如何具有這樣

Android系統播放器MediaPlayer原始碼分析

前言 對於MediaPlayer播放器的原始碼分析內容相對來說比較多,會從Java->JNI->C/C++慢慢分析,後面會慢慢更新。另外,部落格只作為自己學習記錄的一種方式,對於其他的不過多的評論。 MediaPlayerDemo public class MainA