• linux网络栈结构


    一. linux网络层次结构

    linux网络栈的层次结构非常清晰,并没有按照OSI七层模型来实现,而是压缩并扩展了一些层。如下图中的所示:

    从上而下,依次为应用层,系统调用接口层,协议无关接口层,网络栈层,设备无关接口层,设备驱动层。因为linux的网路栈中的socket是继承自BSD的,socket插口为应用层使用网络服务提供了简单的方法,它屏蔽了具体的下层协议族的差异。下面重点说一下中间的4层。

    • 系统调用接口层。系统调用接口层提供了socket接口的系统调用。可以参考下面的地址:https://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html

      链接中列举了linux socket控制相关的系统调用。

    • 协议无关接口层。为什么会有这一层呢?协议无关指的又是什么无关?首先呢,我们得知道,网络世界里是有很有种协议族的,比如我们最常用的tcp/ip v4协议族,但是除此之外还有很多协议族存在,比如netlink,unix等,因此,为了使用上的方便,抽象了一个协议无关接口层,只需要在创建socket时,传入对应的参数,就能创建出对应的协议族socket类型。具体的可以看一下socket函数的参数:socket(int domain, int type, int protocol);第一个参数就定义了使用的协议族,ipv4的?ipv6的?unix的?等等。第二个参数就是指定socket类型,是流式套接字还是用户数据报?还是原始套接字?一般来说,前两个参数选定了,就能确定一个socket的类型和使用的传输层协议了,如流式套接字对应使用tcp/ip中的tcp协议,用户数据包对应使用tcp/ip中的udp协议。

    • 网络栈层。这一层就是具体的各类协议的实现了。包括传输层和网络层。对于我们最经常使用的tcp/ip来说,传输层主要包括tcp和udp协议。网路层就是ip协议。这一部分也是这个系列重点需要解释的,后面仔细说。

    • 设备无关接口层。这一层夹在网络栈和驱动层之间,至于为什么会有这么一层存在?可以想象一下,网络设备种类多样,当收到数据包时,怎么传递给网络栈?如果没有设备无关接口层的抽象,势必会导致两层之间的调用花样百出,因此,有必要抽象出设备无关层,如驱动向上的传递接口,通用设备表示等。从这个设计来看,给我们很多启示,联想上面的协议无关接口层,可以看出,在一对多这种情况下,设计一个通用层会有很多好处。

    二. linux网络栈文件分布层次

    在第一节对实现网络设计结构做了说明之后,这一节说明一下实现文件的分布。

    1. 文件的实现主要在/linux/net目录下。
    2. /linux/net目录下的几乎每个文件夹就是一个协议族的集合。如ipv6,ipv4,802,ATM。
    3. 对于ipv4的网络层,传输层的实现分布在/linux/net/ipv4中。
    4. 协议无关接口层和设备无关接口层分布在/linux/net/core文件夹中。

    更加详细的实现文件分布,如接口和数据结构的分布,待分析代码时一并交代。

  • 相关阅读:
    [洛谷2397]yyy loves Maths VI
    subs函数
    JSON 对象和字符串
    JSON添加注释的问题
    给定一个数组求里面数字拼在一起组成的最小数字
    为什么集合类没有实现Cloneable和Serializable接口
    Java 接口
    Unicode(统一码、万国码、单一码)
    meta 中的属性viewport
    meta标签
  • 原文地址:https://www.cnblogs.com/yhp-smarthome/p/6926246.html
Copyright © 2020-2023  润新知