Linux网络协议栈结构的理解

转载 2012年03月30日 14:56:56

原文:http://blog.csdn.net/aaa6695798/article/category/598530

 

TCP/IP协议是分层的,从底层至应用层分别为:物理层、链路层、网络层、传输层和应用层,如下图所示:

 

 

TCP/IP基础--层次图

 

  从应用层至物理层,数据是一层层封装,封装的方式一般都是在原有数据的前面加一个数据控制头,数据封装格式如下:

 

TCP/IP基础--数据封装

    Linux的协议栈其实是源于BSD的协议栈,它向上以及向下的接口以及协议栈本身的软件分层组织的非常好。

    Linux的协议栈基于分层的设计思想,总共分为五层,从下往上依次是:物理层,链路层,网络层,传输层,应用层。

    物理层主要提供各种连接的物理设备,如各种网卡,串口卡等;链路层主要指的是提供对物理层进行访问的各种接口卡的驱动程序,如网卡驱动等;网路层的作用是负责将网络数据包传输到正确的位置,最重要的网络层协议当然就是IP协议了,其实网络层还有其他的协议如ICMP,ARP,RARP等,只不过不像IP那样被多数人所熟悉;传输层的作用主要是提供端到端,说白一点就是提供应用程序之间的通信,传输层最着名的协议非TCP与UDP协议末属了;应用层,顾名思义,当然就是由应用程序提供的,用来对传输数据进行语义解释的“人机界面”层了,比如HTTP,SMTP,FTP等等,其实应用层还不是人们最终所看到的那一层,最上面的一层应该是“解释层”,负责将数据以各种不同的表项形式最终呈献到人们眼前。

    Linux网络核心架构Linux的网络架构从上往下可以分为三层,分别是:

    用户空间的应用层。

    内核空间的网络协议栈层。

    物理硬件层。

    其中最重要最核心的当然是内核空间的协议栈层了。

    Linux网络协议栈结构Linux的整个网络协议栈都构建与Linux Kernel中,整个栈也是严格按照分层的思想来设计的,整个栈共分为五层,分别是 :

    1,系统调用接口层,实质是一个面向用户空间应用程序的接口调用库,向用户空间应用程序提供使用网络服务的接口。

    2,协议无关的接口层,就是SOCKET层,这一层的目的是屏蔽底层的不同协议(更准确的来说主要是TCP与UDP,当然还包括RAW IP, SCTP等),以便与系统调用层之间的接口可以简单,统一。简单的说,不管我们应用层使用什么协议,都要通过系统调用接口来建立一个SOCKET,这个SOCKET其实是一个巨大的sock结构,它和下面一层的网络协议层联系起来,屏蔽了不同的网络协议的不同,只吧数据部分呈献给应用层(通过系统调用接口来呈献)。

    3,网络协议实现层,毫无疑问,这是整个协议栈的核心。这一层主要实现各种网络协议,最主要的当然是IP,ICMP,ARP,RARP,TCP,UDP等。这一层包含了很多设计的技巧与算法,相当的不错。

    4,与具体设备无关的驱动接口层,这一层的目的主要是为了统一不同的接口卡的驱动程序与网络协议层的接口,它将各种不同的驱动程序的功能统一抽象为几个特殊的动作,如open,close,init等,这一层可以屏蔽底层不同的驱动程序。

    5,驱动程序层,这一层的目的就很简单了,就是建立与硬件的接口层。

    可以看到,Linux网络协议栈是一个严格分层的结构,其中的每一层都执行相对独立的功能,结构非常清晰。

    其中的两个“无关”层的设计非常棒,通过这两个“无关”层,其协议栈可以非常轻松的进行扩展。在我们自己的软件设计中,可以吸收这种设计方法


一起talk C栗子吧(第一百二十九回:C语言实例--C程序内存布局一)

各位看官们,大家好,上一回中咱们说的是查看当前进程信息的例子,这一回咱们说的例子是:C程序内存布局。闲话休提,言归正转。让我们一起talk C栗子吧!...
  • talk_8
  • talk_8
  • 2016年03月24日 22:30
  • 785

Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)

本文分析基于Linux Kernel 1.2.13原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7532512更多请看专栏,地址...

Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)

sk_buff 结构体详解

Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)

在2.6.24之后这个结构体有了较大的变化,此处先说一说2.6.16版本的sk_buff,以及解释一些问题。 一、 先直观的看一下这个结构体~~~~~~~~~~~~~~~~~~...

Linux内核--网络协议栈深入分析(一)--与sk_buff有关的几个重要的数据结构

本文分析基于Linux Kernel 3.2.1原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7971463更多请查看专栏http:...

Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)

在2.6.24之后这个结构体有了较大的变化,此处先说一说2.6.16版本的sk_buff,以及解释一些问题。 一、 先直观的看一下这个结构体~~~~~~~~~~~~~~~~~~...

Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)

在2.6.24之后这个结构体有了较大的变化,此处先说一说2.6.16版本的sk_buff,以及解释一些问题。 一、 先直观的看一下这个结构体~~~~~~~~~~~~~~~~~~~~~~在下...
  • wzsy
  • wzsy
  • 2017年03月30日 14:31
  • 129

Linux内核--网络协议栈深入分析(一)--与sk_buff有关的几个重要的数据结构

本文分析基于Linux Kernel 3.2.1  http://blog.csdn.net/yming0221/article/details/7971463 更多请查看专栏http://blo...

【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)

通过前面的分析,可以发现,网络协议栈中的数据处理,都是基于各类结构体,所有有关于网络栈中数据包的状态,地址,端口等信息都封装在对应的结构中,可以说,了解这些数据结构是理解网络栈源码的基础,这里我们就来...

【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)

【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)...
  • ztguang
  • ztguang
  • 2016年10月14日 23:40
  • 407
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux网络协议栈结构的理解
举报原因:
原因补充:

(最多只允许输入30个字)