IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP/IP 数据包如何被接收? -> 正文阅读

[网络协议]TCP/IP 数据包如何被接收?

本章主要介绍 TCP/IP 协议中,数据包处理的主要流程。首先我们介绍一些前置信息,然后描述整个接收过程。

注:本章内容主要来自公众号“开发内功修炼”的?络篇。

前置知识

术语

说明

用户态

只能执行机器的部分指令,使用全部指令集的一个子集。能影响机器的控制指令或者是 I/O 操作指令,在用户态都是不被允许的。

内核态

内核态具有对硬件的完全访问权,可以执行机器能够执行的任何指令。

系统调用

为了使用户进程使用内核功能,内核会暴露出一些接口以供他们使用。这些接口是用户进程使用内核功能的唯一手段。用户进程使用这些接口的行为称为系统调用。

socket

是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在 Internet 上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个 Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

socket 接收队列

需要被接收的数据的队列。

socket 等待队列

等待数据的对象(进程)队列。

ringbuffer

保存网卡数据的循环缓冲区。

硬中断

由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包的时候,就会发出一个中断。我们通常所说的中断指的是硬中断。

软中断

为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。

网卡

在这里只需要理解成一个设备,用于发送和接收网络数据。

DMA

设备可以自己执行读或者写总线事务而不需要 CPU 干涉的过程,称成为直接内存访问。

内核态用户态推荐阅读:

https://cloud.tencent.com/developer/article/1376540?from=14588

https://cloud.tencent.com/developer/article/1683403?from=14588

TPC/IP ?协议栈

下图是 TPC/IP 五层模型中,各层作用的介绍,具体的信息,可以 Google 或者百度。

启动初始化

在系统启动的过程中,系统会进行许多初始化程序。例如:

  1. 注册硬中断处理程序
  2. 软中断softirq程序的创建与初始化
  3. 协议栈注册(ip、tpc、udp...)
  4. 网卡驱动初始化与启动。
  5. ...

数据接收过程

?

?

  1. 用户进程创建s ocket (默认正常建立 TCP 连接),系统调用 recvform,查看socket对象的接收队列中查看是否有数据,如果没有就把自己添加到 scoket 对应的等待队列里,最后让出CPU。
  2. 当数据到达网卡时,通过 DMA 将数据写入 ringbuffer,然后发起硬中断,通知 CPU。
  3. 硬中断处理函数几乎没做什么,就发起软中断。
  4. 内核程序 ksoftirqd 线程发现软中断请求到来,关闭硬中断,并调用程序接收 ringbuffer 数据包,并打包成 skb,发送到对应的 socket 接收队列。
  5. ksoftirqd 唤醒用户进程。
  6. 用户进程唤醒等待队列中的对象处理数据。
  7. 通过层层协议栈的处理(IP、TPC...),最终将数据发送到用户进程。

参考

? ? ?1.公众号“开发内功修炼”的?络篇

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:23:21  更:2021-09-05 11:26:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:46:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码