Linux性能优化从入门到实战:17 网络篇:网络基础

耗尽温柔 提交于 2019-11-28 06:21:37

网络模型

为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),简称 OSI 网络模型。OSI 模型把网络互联的框架分为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层等 七层网络模型,每个层负责不同的功能。

  • 应用层 Application,负责为应用程序提供统一的接口。
  • 表示层 Presentation,负责把数据转换成兼容接收系统的格式。
  • 会话层 Session,负责维护计算机之间的通信连接。
  • 传输层 Transport,负责为数据加上传输表头,形成数据包。
  • 网络层 Network,负责数据的路由和转发。
  • 数据链路层 Data Link,负责 MAC 寻址、错误侦测和改错。
  • 物理层 Physical,负责在物理网络中传输数据帧。

更为实用的 四层网络模型,即 TCP/IP 网络模型。

  • 应用层,负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等。
  • 传输层,负责端到端的通信,比如 TCP、UDP 等。
  • 网络层,负责网络包的封装、寻址和路由,比如 IP、ICMP 等。
  • 网络接口层,负责网络包在物理网络中的传输,比如 MAC 寻址、错误侦测以及通过网卡传输网络帧等。

Linux 网络栈

TCP/IP 模型中的数据包进行网络传输时,会按照协议栈,对上一层发来的数据进行逐层处理;然后封装上该层的协议头,再发送给下一层。

  • 处理:逻辑取决于各层采用的网络协议,如将 json 数据处理成 HTTP 协议;
  • 封装:只是在原来的负载前后,增加固定格式的元数据,原始的负载数据并不会被修改。

物理链路中不能传输任意大小的数据包,网络接口配置的最大传输单元(MTU)规定了最大的 IP 包大小。在我们最常用的以太网中,MTU 默认值是 1500(这也是 Linux 的默认值)。一旦网络包超过 MTU 的大小,就会在网络层分片,以保证分片后的 IP 包不大于 MTU 值。显然,MTU 越大,需要的分包也就越少,自然,网络吞吐能力就越好。

在系统启动过程中,网卡通过内核中的网卡驱动程序注册到系统中。而在网络收发过程中,内核通过中断跟网卡进行交互。网卡硬中断只处理最核心的网卡数据读取或发送,而协议栈中的大部分逻辑,都会放到软中断中处理。

Linux 网络收发流程

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!