1.3 协议分层

大概了解了网卡驱动、硬中断、软中断和ksoftirqd线程之后,我们在这几个概念的基础上给出一个内核收包的路径示意:

当网卡上收到数据以后,Linux中第一个工作的模块是网络驱动。网络驱动会以DMA的方式把网卡上收到的帧写到内存里。再向CPU发起一个中断,以通知CPU有数据到达。

当CPU收到中断请求后,会去调用网络驱动注册的中断处理函数。网卡的中断处理函数并不做过多工作,发出软中断请求,然后尽快释放CPU。

ksoftirqd检测到有软中断请求到达,调用poll开始轮询收包,收到后交由各级协议栈处理。对于UDP包来说,会被放到用户socket的接收队列中。

我们从上面这张图中已经从整体上把握到了Linux对数据包的处理过程。但是要想了解更多网络模块工作的细节,我们还得往下看。

Linux数据报文接收发送总结3相关推荐

  1. Linux数据报文接收发送总结1

    0. 引 如下简单的一段在代码,我们在Linux上运行:同时再运行一服务端的回显: #include <stdio.h> #include <sys/types.h> #inc ...

  2. Linux数据报文接收发送总结6

    2.3 协议栈注册 内核实现了网络层的ip协议,也实现了传输层的tcp协议和udp协议.这些协议对应的实现函数分别是ip_rcv(),tcp_v4_rcv()和udp_rcv().和我们平时写代码的方 ...

  3. Linux数据报文接收发送总结5

    2.2 网络子系统初始化 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用.这里我们要说的是网络子系统的初始化,会执行到net ...

  4. Linux数据报文接收发送总结4

    二.系统初始化 Linux驱动,内核协议栈等等模块在具备接收网卡数据包之前,要做很多的准备工作才行.比如要提前创建好ksoftirqd内核线程,要注册好各个协议对应的处理函数,网络设备子系统要提前初始 ...

  5. Linux数据报文接收发送总结2

    1. 准备工作 此处重点介绍基础概念,为后面介绍数据包收发打下基础.本次代码层面基于Linux 4.4 Kernel. 1.1 系统调用 Linux的系统运行分为用户态和内核态,内核态控制着系统资源. ...

  6. Linux数据报文接收发送总结7

    2.4 网卡驱动初始化 每一个驱动程序(不仅仅只是网卡驱动)会使用 module_init 向内核注册一个初始化函数,当驱动被加载时,内核会调用这个函数.比如igb网卡驱动的代码位于drivers/n ...

  7. linux网络报文接收发送浅析_Docker容器网络-基础篇

    Docker的技术依赖于Linux内核的虚拟化技术的发展,Docker使用到的网络技术有Network Namespace.Veth设备对.Iptables/Netfilter.网桥.路由等.接下来, ...

  8. Linux SYN报文接收及发送SYNACK报文

    注:本文分析基于3.10.0-693.el7内核版本,即CentOS 7.4 在分析connect()系统调用时,我们已经发送SYN报文,所以服务端就需要作出回应了.我们依然只分析TCP层的操作.SY ...

  9. linux IPv4报文处理浅析

    在<linux网络报文接收发送浅析>一文中介绍了数据链路层关于网络报文的处理. 对于接收到的报文,如果不被丢弃.不被网桥转发,会调用netif_receive_skb()提交给IP层: 而 ...

最新文章

  1. vs快捷键及常用设置(vs2012版)
  2. 20155227 2016-2017-2 《Java程序设计》第九周学习总结
  3. JSP与servlet之间的传值方式
  4. 前端框架MVC/MVVM分析系列
  5. 输入法画面_搜狗输入法去广告版,流畅再无弹窗打扰
  6. 【Python基础】如何编写简洁美观的Python代码
  7. SharePoint 数据库管理-PowerShell
  8. Linux网络编程 | Socket编程(一):Socket的介绍、UDPSocket的封装、UDP服务器/客户端的实现
  9. 1亿以内素数的个数_神奇的素数
  10. jq之slidedown()
  11. Android性能优化:手把手带你全面实现内存优化
  12. 【大数据编程笔记】大数据背景,案例,概念
  13. JSJquery中的循环/遍历
  14. Qt配置OpenCV教程,亲测已试过(详细版)
  15. 跟着实例学eclipse插件开发--第一篇:翻译插件
  16. 亲测有效sudo: /etc/sudoers is world writable sudo: no valid sudoers sources found, quitting sudo: una
  17. java 表格 列删除_Java 删除Excel表格中的空白行或列
  18. 2020年书法落款_2020鼠年书法落款怎么写?
  19. 超声波风速风向传感器的测量原理
  20. 2023年还在问前端怎么学?一份前端学习指南

热门文章

  1. 前端性能优化之DOM(三)
  2. poj_2739 尺取法
  3. hdu 5092 线裁剪(纵向连线最小和+输出路径)
  4. Dirichlet分布与多项分布的共轭性
  5. Directx 顶点和顶点缓存
  6. 8086汇编复习1 - 并使用emu8086模拟器查看效果
  7. Windows内核的表学习总结
  8. 图解Linux命令实例
  9. MySql外键学习总结
  10. Mysql索引底层实现