linux内核源码分析之网络数据收发流程

本文深入解析了Linux内核中的TCP/IP模型,该模型分为应用层、传输层、网络层和网络接口层。网络包的接收流程包括网卡通过DMA将数据帧放入收包队列,内核通过中断处理数据,逐层解封装到应用层。发送流程则涉及应用层数据到物理网络帧的构建与发送。整个过程详细阐述了数据在协议栈中的流动路径。
摘要由CSDN通过智能技术生成

目录

一、TCP/IP 模型与 ISO模型

二、内核中分层模型的结构

三、数据帧的封装

四、协议栈收发包流程

1、网络包接收流程

2、网络包发送流程


一、TCP/IP 模型与 ISO模型

内核中使用的是TCP/IP 模型,把网络互联的框架分为应用层、传输层、网络层、网络接口层等四层。

  • 应用层,负责向用户提供一组应用程序;
  • 传输层,负责端到端的通信;
  • 网络层,负责网络包的封装、寻址和路由;
  • 网络接口层,负责网络包在物理网络中的传输。

二、内核中分层模型的结构

三、数据帧的封装

四、协议栈收发包流程

1、网络包接收流程

  1. 当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中;
  2. 通过硬中断,处理硬中断处理程序,(在处理硬中断时先关闭CPU中断,等处理完硬中断再开启CPU中断),一些耗时的处理交给软中断softirq处理。
  3. 网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中,再通过软中断,通知内核收到了新的数据帧
  4. 内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧。
  5. 网络层取出 IP 头,判断网络包下一步的走向,交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如 TCP 还是 UDP),去掉 IP 头,再交给传输层处理。
  6. 传输层取出 TCP 头或者 UDP 头后,根据 < 源 IP、源端口、目的 IP、目的端口 >,找出对应的 socket,并把数据拷贝到 scket 的接收缓存中。
  7. 应用层就可以使用 socket 接口,读取到新接收到的数据。

2、网络包发送流程

  1. 应用调用发送函数产系统调用
  2. 套接字层会把数据包放到 socket 发送缓冲区中
  3. 网络协议栈从 socket 发送缓冲区取出数据;再按照 TCP/IP 栈,从上到下逐层处理
  4. 传输层和网络层,分别为其增加 TCP 头和 IP 头,执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片
  5. 网络接口层,进行物理地址寻址,以找到下一跳的 MAC 地址。然后添加帧头和帧尾,放到发包队列中
  6. 软中断通知驱动程序,发包队列中有新的网络帧需要发送
  7. 通过 DMA ,从发包队列中读出网络帧,并通过物理网卡把它发送出去


  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了维护世界和平_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值