一文了解Linux 内核的网络协议栈

本文详细探讨了Linux内核网络协议栈的工作原理,包括数据报文的封装与分用过程,以及Linux内核网络协议栈的分层结构。从物理层到应用层,逐一解析了网络协议栈中的各个组成部分,如TCP/IP协议族、IP、TCP、UDP等的处理流程,并介绍了协议栈的初始化和数据传输过程。
摘要由CSDN通过智能技术生成

前言

本文主要记录 Linux 内核网络协议栈的运行原理

数据报文的封装与分用

封装:当应用程序用 TCP 协议传送数据时,数据首先进入内核网络协议栈中,然后逐一通过 TCP/IP 协议族的每层直到被当作一串比特流送入网络。对于每一层而言,对收到的数据都会封装相应的协议首部信息(有时还会增加尾部信息)。TCP 协议传给 IP 协议的数据单元称作 TCP 报文段,或简称 TCP 段(TCP segment)。IP 传给数据链路层的数据单元称作 IP 数据报(IP datagram),最后通过以太网传输的比特流称作帧(Frame)。

分用:当目的主机收到一个以太网数据帧时,数据就开始从内核网络协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议都会检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用。

Linux 内核网络协议栈

协议栈的全景图

协议栈的分层结构

逻辑抽象层级:

物理层:主要提供各种连接的物理设备,如各种网卡,串口卡等。

链路层:主要提供对物理层进行访问的各种接口卡的驱动程序,如网卡驱动等。

网路层:是负责将网络数据包传输到正确的位置,最重要的网络层协议是 IP 协议,此外还有如 ICMP,ARP,RARP 等协议。

传输层:为应用程序之间提供端到端连接,主要为 TCP 和 UDP 协议。

应用层:顾名思义,主要由应用程序提供,用来对传输数据进行语义解释的 “人机交互界面层”,比如 HTTP,SMTP,FTP 等协议。

协议栈实现层级:

硬件层(Physical device hardware):又称驱动程序层,提供连接硬件设备的接口。

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

网络协议层(Network protocols):对应 IP layer 和 Transport layer。毫无疑问,这是整个内核网络协议栈的核心。这一层主要实现了各种网络协议,最主要的当然是 IP,ICMP,ARP,RARP,TCP,UDP 等。

协议无关层(Protocol agnostic interface),又称协议接口层,本质就是 SOCKET 层。这一层的目的是屏蔽网络协议层中诸多类型的网络协议(主要是 TCP 与 UDP 协议,当然也包括 RAW IP, SCTP 等等),以便提供简单而同一的接口给上面的系统调用层调用。简单的说,不管我们应用层使用什么协议,都要通过系统调用接口来建立一个

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux网络协议内核分析中,主要涉及到Transmission Control Protocol (TCP)和Linux Socket编程接口。TCP是一种传输层协议,用于在网络中可靠地传输数据。Linux Socket是从BSD Socket发展而来的接口,它提供给应用程序员与内核空间的网络协议栈进行通信的方法。通过Linux Socket,应用程序可以访问传输层协议,并屏蔽了不同网络协议之间的差异。它位于应用层,并提供了大量的系统调用,构成了网络程序的主体。在Linux系统中,Socket是文件系统的一部分,使得对网络的控制和对文件的控制一样方便。此外,INET Socket是调用IP层协议的统一接口,与sock结构体关系紧密。通过对Linux网络协议内核的分析,我们可以深入了解TCP和Linux Socket的运作机制以及网络应用程序的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [理解 Linux 网络栈(1):Linux 网络协议栈简单总结](https://blog.csdn.net/weixin_33724659/article/details/85808277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [一文了解Linux 内核网络协议栈](https://blog.csdn.net/m0_74282605/article/details/128483211)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值