鍏抽棴
涓汉浜戠數鑴戝伐鍏�
蹇€熸惌寤轰簯鐢佃剳
浠庢浣犵殑鐢佃剳灏卞湪浜戜笂
鍗虫槸澶╂动銆佷篃鏄挮灏�

Linux网络流程深度解析
linux 网络流程

首页 2024-12-04 20:05:21



Linux网络流程:深度解析 在深入探讨Linux网络流程之前,我们需要对Linux网络协议栈有一个基本了解

    Linux系统是按照TCP/IP网络模型来实现网络协议栈的,这个模型共有四层,分别是应用层、传输层、网络层和网络接口层
推荐工具:linux批量管理工具

    每一层都有其特定的职责和功能,共同协作以实现数据的网络传输

     一、网络协议栈各层的功能 1.应用层:这一层对应于OSI参考模型的高层,为用户提供各种服务,如FTP、Telnet、DNS和SMTP等

    它是用户与网络进行交互的接口

     2.传输层:这一层为应用层实体提供端到端的通信功能,确保数据包的顺序传送和数据的完整性

    传输层定义了两个主要协议:传输控制协议(TCP)和用户数据报协议(UDP)

    TCP提供可靠的连接服务,而UDP则提供无连接的、不可靠的服务,但具有较低的时延和开销

     3.网络层:网络层主要解决主机到主机的通信问题

    它包含的协议负责数据包在整个网络上的逻辑传输,如IP协议、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)

    网络层通过赋予主机IP地址来完成对主机的寻址,并负责数据包在多种网络中的路由

     4.网络接口层:网络接口层对应于OSI参考模型中的物理层和数据链路层

    它负责监视数据在主机和网络之间的交换

    TCP/IP本身并未定义该层的协议,而是由参与互联的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接

     二、网络数据包的接收流程 当网络数据包到达网卡时,Linux系统的处理流程如下: 1.数据包接收:网络数据包到达网卡后,按照FIFO(先进先出)顺序被存入网卡的接收队列

    网卡通过DMA(直接内存访问)技术,将网络包写入到指定的内存地址(Ring Buffer)

    Ring Buffer是在网卡驱动程序启动时创建和初始化的,存储的是sk_buff缓冲区的描述符(物理地址和大小等)

     2.中断处理:当网络包到达时,从Ring Buffer获取指向的sk_buff描述符,通过DMA将数据写入该地址

    等sk_buff中的数据交由上层协议栈处理后,Ring Buffer中的描述更新为新分配的sk_buff

    接着网卡向CPU发起硬件中断,CPU根据中断注册表找到注册的中断处理函数

    为了避免CPU被频繁中断而无法处理其他任务,系统通常会暂时屏蔽中断,并告知网卡已经知道内存中有数据了,下次再收到数据包直接写内存即可

     3.软中断处理:内核中的ksoftirqd线程负责处理软中断

    当ksoftirqd收到软中断后,会调用相应的处理函数来轮询处理数据

    它从Ring Buffer中获取一个数据帧,用sk_buff表示,作为一个网络包交给网络协议栈从下到上进行逐层处理

     4.协议栈处理:首先,网络接口层检查报文的合法性和正确性,如果不合法或报文校验不正确则丢弃;否则,找出上层协议的类型(IPv4还是IPv6),去掉帧头、帧尾,然后交给上层即网络层处理

    网络层取出IP头,判断网络包下一步的走向,是转发还是交给上层

    当确认网络包是要发送给本机后,就取出上层协议的类型(比如TCP或UDP),去掉