网络性能优化

网络模型

为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,出现了OSI模型和TCP/IP模型.
在这里插入图片描述

  • 七层功能
    应用层,负责为应用程序提供统一的接口。
    表示层,负责把数据转换成兼容接收系统的格式。
    会话层,负责维护计算机之间的通信连接。
    传输层,负责为数据加上传输表头,形成数据包。
    网络层,负责数据的路由和转发。
    数据链路层,负责 MAC 寻址、错误侦测和改错。
    物理层,负责在物理网络中传输数据帧。
  • 四层
    应用层,负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等。
    传输层,负责端到端的通信,比如 TCP、UDP 等。
    网络层,负责网络包的封装、寻址和路由,比如 IP、ICMP 等。
    网络接口层,负责网络包在物理网络中的传输,比如 MAC 寻址、错误侦测以及通过网
    卡传输网络帧等。

数据包封装

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

    网络包在每一层的处理逻辑,都取决于各层采用的网络协议.

    通过下面这张图,我们可以看到,应用程序数据在每个层的封装格式。
    在这里插入图片描述
    其中:
    传输层在应用程序数据前面增加了 TCP 头;
    网络层在 TCP 数据包前增加了 IP 头;
    而网络接口层,又在 IP 数据包前后分别增加了帧头和帧尾。

    MTU:最大传输单元,规定了最大IP包大小。常用的以太网中,MTU默认值是1500Bytes(linux默认值)。
    查看:ifconfig、netstat -i(-i:查询网络接口情况)

    一旦网络包超过 MTU 的大小,就会在网络层分片,以保证分片后的 IP 包不大于 MTU值。显然,MTU 越大,需要的分包也就越少,自然,网络吞吐能力就越好。

网络栈
在这里插入图片描述
我们从上到下来看这个网络栈,你可以发现,
1.最上层的应用程序,需要通过系统调用,来跟套接字接口进行交互;
2.套接字的下面,就是我们前面提到的传输层、网络层和网络接口层;
3.最底层,则是网卡驱动程序以及物理网卡设备。

  • 网卡
    网卡是发送和接收网络包的基本设备。在系统启动过程中,网卡通过内核中的网卡驱动程序注册到系统中。而在网络收发过程中,内核通过中断跟网卡进行交互。

    网卡硬中断只处理最核心的网卡数据读取或发送,而协议栈中的大部分逻辑,都会放到软中断内核线程中处理。

网络包收发
在这里插入图片描述

  • 收包
    需要注意的主要是DMA(直接存储器访问)处:当一个网络帧到达网卡后
    1.网卡通过DMA方式,把这个网络包放到收包队列;然后通过硬中断,高速中断处理程序已经收到了网络包。
    2.网卡中断处理程序将网络帧拷贝到内核缓冲区,然后通过软中断(内核线程),通知内核接收到了新的网络帧。
    3.内核协议帧从缓冲区取出网络帧,通过网络协议栈,逐层处理网络帧(解包)。

  • 发包
    1.应用程序调用socket api(比如sending)发送网络包,由于这是一个系统调用,所以会陷入到内核态的套接字层中。套接字层会把数据包放到Socket 发送缓冲区中。
    2.网络协议栈从 Socket 发送缓冲区中,取出数据包;再按照 TCP/IP 栈,从上到下逐层处理。(注意:此处有可能会出现按照MTU大小分片,具体发生在网络层)
    3.软中断通知驱动程序:发包队列中有新的网络帧需要发送。
    4.驱动程序通过 DMA ,从发包队列中读出网络帧,并

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值