目录

文章目录

  • 目录
  • 协议栈发包处理流程
  • 参考文档

协议栈发包处理流程


以 UDP 数据报为例:

  1. 应用层:可以通过 System Call 接口层或文件操作来调用内核函数,BSD socket 层的 sock_write() 会调用 INET socket 层的 inet_wirte()。INET socket 层会调用具体传输层协议的 write 函数,该函数是通过调用本层的 inet_send() 来实现的,inet_send() 的 UDP 协议对应的函数为 udp_write()。
  2. 传输层:udp_write() 调用本层的 udp_sendto() 完成功能。udp_sendto() 完成 sk_buff 结构体相应的设置和报头的填写后会调用 udp_send() 来发送数据。而在 udp_send() 中,最后会调用 ip_queue_xmit() 将数据包下放的网络层。
  3. 网络层:函数 ip_queue_xmit() 的功能是将数据包进行一系列复杂的操作,比如是检查数据包是否需要分片,是否是多播等一系列检查,最后调用 dev_queue_xmit() 发送数据。
  4. 链路层:函数调用会调用具体设备提供的发送函数来发送数据包,e.g. hard_start_xmit(skb, dev)。具体设备的发送函数在协议栈初始化的时候已经设置了。

参考文档

https://mp.weixin.qq.com/s/wThfD9th9e_-YGHJJ3HXNQ

Linux Kernel TCP/IP Stack — 协议栈发包处理流程相关推荐

  1. Linux Kernel TCP/IP Stack — 协议栈收包处理流程

    目录 文章目录 目录 L2 NIC Controller 收包处理流程 L3-4 收包处理流程 Socket Layer 收包处理流程 参考文档 L2 NIC Controller 收包处理流程 硬件 ...

  2. Linux Kernel TCP/IP Stack — L2 Layer — Linux Bridge(虚拟网桥)的基本操作

    目录 文章目录 目录 Linux bridge 的基本操作 创建 Bridge 将 veth pair 连上 Bridge 为 Bridge 配置 IP 地址 将物理网卡接口设备挂靠 Bridge L ...

  3. Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架

    目录 文章目录 目录 netfilter 框架 netfilter 的组成模块 netfilter 的 Hook 机制实现 netfilter 的工作原理 规则(Rules) 链(Chains) 表( ...

  4. Linux Kernel TCP/IP Stack — L7 Layer — Application Socket I/O 接口类型

    目录 文章目录 目录 基本概念 同步与异步 阻塞与非阻塞 I/O 操作的执行流程 Socket I/O 接口类型 阻塞 IO 缺点 非阻塞 IO 缺点 阻塞 IO 与非阻塞 IO 的区别 IO 多路复 ...

  5. Linux Kernel TCP/IP Stack — Overview

    目录 文章目录 目录 协议栈全景图 协议栈处理流程概览 协议栈收发包概览 协议栈的逻辑架构 协议栈的分层架构 协议栈的文件系统 协议栈的数据结构 协议栈全景图 协议栈处理流程概览 在 Linux Ke ...

  6. Linux Kernel TCP/IP Stack — L1 Layer — 多队列网卡

    目录 文章目录 目录 多队列网卡 Intel 82575 的多队列硬件实现 Intel 82575 的多队列软件驱动实现 多队列网卡识别 多队列网卡 多队列网卡,是一种用来解决网络 I/O QoS 问 ...

  7. Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架 — iptables NAPT 网络地址/端口转换

    目录 文章目录 目录 网络地址转换(NAT) SNAT DNAT 端口映射(PAT) 网络地址转换(NAT) IP 网络有公网与私网的区分,通常内网使用私网 IP,Internet 使用公网 IP,而 ...

  8. Linux Kernel TCP/IP Stack — L2 Layer — Linux Bridge(虚拟网桥)

    目录 文章目录 目录 Linux bridge Linux bridge 的实现方式 Linux bridge 的代码逻辑 Linux bridge 在 Linux 的语境中,Bridge(网桥)和 ...

  9. Linux Kernel TCP/IP Stack — L3 Layer — 路由器子系统

    目录 文章目录 目录 Linux 作为一个路由器 路由表项的类型 route 指令 ip route 指令 添加默认路由 添加静态路由 删除静态路由 操作示例 Linux Kernel 路由子系统 路 ...

最新文章

  1. 你甘心就这样过一辈子?
  2. java ssh完整配置文件_ssh框架整合笔记---配置文件
  3. linux 命令行 文件管理器,CLEX - 集成命令提示符、“多才多艺”的命令行文件管理器...
  4. python16进制字节序_Python-十六进制数据传递与接收
  5. Python(字符编码)
  6. Angr安装与使用之使用篇(八)
  7. linux 鼠标残影,Win10系统拖动鼠标有残影怎么办
  8. 搜索引擎开发需要用到什么技术?
  9. Adobe PhotoShop V8.0
  10. 八戒,别以为你站在路灯下就是夜明猪了
  11. win10以太网未识别的网络解决方法
  12. Latex表格与图片旋转,且标题同时旋转 (表格的标题可设置于表格的上方或下方)
  13. revit二开之过滤族(Family)
  14. 中国没有真正意义上的海滩比基尼(图)
  15. 【计算机网络】计算机网络总结
  16. jadx重新打包_反编译一款APP然后重新打包(Windows环境)
  17. Java如何输入一个不知道长度的数组
  18. Miniconda软件安装教程(Windows)
  19. Javaweb城市公交查询系统的设计与实现
  20. 为什么采用实时操作系统?

热门文章

  1. Visual Studio 2017为Android APK包签名
  2. iOS 9应用开发教程之iOS 9新特性
  3. UGUI全面实践教程
  4. article.app.php,【求助】修改app\portal\AdminArticle.php二次开发提交数据出错的疑问
  5. python os模块是什么_python常见模块之os模块
  6. 计算机二级是立刻知道成绩单,可以在公布前知道计算机二级考成绩吗
  7. win10系统打开更新服务器失败怎么回事,Win10系统一直无法安装更新怎么办 Win10更新一直安装失败的3种解决方法...
  8. cordova media android不播放声音,cordova-plugin-media 录音并打包上传
  9. UE4用音乐音效,各种声音都有,比较全了
  10. Facebook全球6小时宕机原因已查明:一条指令所致,内部工程师所为