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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Linux网络 -> 正文阅读

[网络协议]Linux网络

linux的网络模型

????????TCP/IP网络模型:应用层,传输层,网络层,网络接口层

  • 应用层:负责像用户提供一组应用层序,必须http,ftp,dns等
  • 传输层:负责端到端的通信,比如TCP,UDP等
  • 网络层:负责网络包的封装,寻址和路由,比如IP,ICMP等
  • 网络接口层:负责网络包再物理网络中的传输,比如MAC寻址,错误侦测以及通过网卡传输网络帧等

OSI模型与TCP/IP模型的区别

Linux网络栈

? ? ? ? 再进行网络传输的时候,数据包会按照协议栈,对上一层发来的数据包进行逐层处理,然后封装上该层的协议头,再发给下一层

? ? ? ? 网络包再每一层的处理逻辑,都取决于各层的网络协议,比如再应用层,一个提供REST API的应用,可以使用HTTP协议,把它需要传输的JSON数据封装到HTTP协议中,然后传递给TCP层.

?

? ? ? ? ?简单的理解就是:传输层再应用数据前加了TCP头,网络层再TCP头前面又加了IP头,而网络接口层又在IP头前面加了帧头.当然他们都是更具特定的协议格式进行添加!

? ? ? ? 如果传输的数据交大会如何处理?

? ? ? ? 再物理传输层中网络接口配置的最大传输单元是1500(也是linux的默认值,简称MTU),一旦网络包超过这个值,就会再网络中进行分片,确保每次发送到包不超过这个值,当然这个值越大也就代表需要分片的次数越少,同时网络的吞吐能力也就越强

? ? ? ? MTU

linux中IP网络栈的示意图????????

  • 应用层:需要通过系统调用,来跟套接字进行互动
  • TCP,UDP,IP,链路层:就是传输层,网络层和网络接口层
  • 网卡:网卡驱动程序和物理传输设备,也就是接受或者发送网络包的基础设备.(内核通过系统设备与网卡进行交互),特别注意,网卡的数据读取和发送,都是通过硬中断来处理,而协议栈中的大部分逻辑都是通过,软中断来处理

网络包的接收流程

  1. 当网络帧到达网卡后,网卡会通过DMA方式,吧这个网络包放到收包队列中.然后通过硬中断,告诉中断处理器已经收到了网络包
  2. 网卡中断程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到sk_buff缓冲区中,然后再通过软中断,通知内核收到了新的网络帧.
  3. 内核协议栈从缓冲区中取出网络帧,并通知网络协议栈,从下到上逐层处理这个网络帧

? ? ? ? 网络帧的处理过程

  • 在链路层检查报文的合法性,找出上层协议的类型(比如 IPv4 还是 IPv6),再去掉帧头、帧尾,然后交给网络层。
  • 网络层取出 IP 头,判断网络包下一步的走向,比如是交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如 TCP 还是 UDP),去掉 IP 头,再交给传输层处理。
  • 传输层取出 TCP 头或者 UDP 头后,根据 [ 源 IP、源端口、目的 IP、目的端口 ]?四元组作为标识,找出对应的 Socket,并把数据拷贝到 Socket 的接收缓存中。
  • 最后应用程序就可以使用socket接口,读取新接受的数据了

网络包的发送流程

? ? ? ? 网络包的发送过程,其实正好与接受方式相反

  1. 应用程序调用Socket API 发送网络包,但是由于是系统调用,所以会陷入到内核态的套接字层中,套接字层会把数据包放到Socket发送缓冲区中
  2. 网络协议栈从Socket发送缓冲区中,取出数据包,再按照TCP/IP栈,从上到下处理,给各个层增加对应的协议头,并执行路由,确认下一跳IP,同时也会按照MTU进行分片
  3. 分片后的网络包,再发送到网络接口层,进行物理地址寻址(MAC地址),然后添加帧头和帧尾,放到发包队列中,然后会通过软中断程序告知驱动程序,发包程序中又新的网络栈需要发送
  4. 驱动程序会通过DMA,从发包队列中读取出网络帧,并通知物理网卡将其发送出去

? ? ? ?

????????

????????

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:10:26  更:2021-09-11 19:11:25 
 
开发: 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/26 1:44:17-

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