加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

三张图告诉你Linux TCP/IP协议栈原理

发布时间:2019-07-02 14:44:43 所属栏目:教程 来源:底层软件架构
导读:可以绝不浮夸的说现现在的互联网是基于TCP/IP构建起来的收集。弄懂协议栈的道理,无论对换试收集IO机能照旧办理收集题目都是有很大辅佐的。本篇文章就教育各人来看看内核是怎样节制收集数据流的。 TCP特点 我们都很是清晰TCP协议计划的初志,就是担保数据

可以绝不浮夸的说现现在的互联网是基于TCP/IP构建起来的收集。弄懂协议栈的道理,无论对换试收集IO机能照旧办理收集题目都是有很大辅佐的。本篇文章就教育各人来看看内核是怎样节制收集数据流的。

TCP特点

我们都很是清晰TCP协议计划的初志,就是担保数据传输的快速,有序,无误。以是特点总结如下:

  • 面向毗连,可以用五元组来暗示一条毗连(长途ip,长途端口,当地ip,当地端口,传输层协议)。
  • 数据是全双工的
  • 数据是有序的,也就是接管的数据必然是凭证发送时的次序的。
  • 流量节制,发送方可以通过吸取方滑动窗口巨细来动态调解发送数据的巨细。
  • 拥塞节制,发送方通过ACK的状态团结拥塞算法综合计较给出窗口巨细。

相识完TCP特点字后,我们就来真正的看看数据发送到底是奈何的进程?

三张图汇报你Linux TCP/IP协议栈道理

数据发送

我们起首来看张图:

三张图汇报你Linux TCP/IP协议栈道理

上图展示的是数据活动的在硬件中的进程,下图展示的是数据在协议栈的进程:

三张图汇报你Linux TCP/IP协议栈道理

整个进程分为三个大地区:用户区,内核区,装备。这里所说的装备就是网卡。流程如下:

  1. 用户应用措施挪用write体系挪用
  2. 确认文件描写符
  3. 拷贝数据到socket buffer中
  4. 建设tcp片断,计较checksum
  5. 添加IP头,执行ip路由,计较checksum
  6. 添加以太网协议头部,执行ARP
  7. 汇报网卡芯片要发送数据了
  8. 网卡从内存中获取数据发送,发送完成间断汇报CPU

数据吸取

直接看硬件数据流图:

三张图汇报你Linux TCP/IP协议栈道理

起首网卡把吸取到的数据包写入到它的内存之中。然后对其举办校验,通事后发送到主机的主存之中。主存中的buffer是驱动分派好的,驱动会把分派好的buffer描写汇报网卡,假如没有足够的buffer接管网卡的数据包,网卡会将数据包扬弃。一旦数据包拷贝到主存完成,网卡会通过间断奉告主机OS。

之后驱动会搜查它是否能处理赏罚这个新的包。假如能处理赏罚,驱动会把数据包包装成OS熟悉的布局(linux sk_buffer)并推送到上层。 链路层吸取到帧后搜查通过的话会凭证协议解帧并推送至IP层。

IP层会在解包之后按照包中包括的IP信息抉择推送至上层照旧转发到其他IP。假如判定必要推送至上层,则会解掉IP包头并推送至TCP层。

TCP在解报之后会按照其四元组找到对应的TCB,之后通过TCP协议处理赏罚这个报文。在吸取到报文后,会把报文加到接管报文,之后按照TCP的状态发送一个ACK给对端。

虽然上述进程会受到NAT等等Netfilter的浸染,这里不谈了,也没深研究过。虽然为了机能,大牛们方方面面也做了许多全力,好比大到RDMA、DPDK等大的软硬件技能,小到zero-copy、checksum offload等;

总结

当代的软硬件TCP/IP协议栈单链接发送速度到1~2GiB/s完全没有任何题目(颠末实测)。假如你想试探更优越的机能,你可以实行RMDA等技能,他们通过绕过内核以镌汰拷贝等方法优化了机能,虽然也许依靠硬件。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读