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),去掉
Hyper X开箱:性能与颜值的极致测评
Linux网络流程深度解析
Linux系统GD库版本详解
Hyper减肥法:高效瘦身新潮流
深度解析:Linux中open()函数的高效使用技巧
Hyper 65W快充:极速充电新体验
Hydraviewer Linux版:高效水文数据可视化
Linux系统GD库版本详解
深度解析:Linux中open()函数的高效使用技巧
Hydraviewer Linux版:高效水文数据可视化
Linux下Tomcat是否安装指南
Linux ARP驱动深度解析与实战
Linux系统下轻松配置JDK环境指南
掌握技巧:如何高效停止Linux指令运行
Linux设备管理器使用指南
Linux技巧:如何指定源IP进行Ping测试
Linux系统下轻松获取FTP文件的实用指南
Linux下WiFi数据传输实战指南
Office拥抱Linux:办公新选择来临