三张图告诉你Linux TCP/IP协议栈原理
可以绝不浮夸的说现现在的互联网是基于TCP/IP构建起来的收集。弄懂协议栈的道理,无论对换试收集IO机能照旧办理收集题目都是有很大辅佐的。本篇文章就教育各人来看看内核是怎样节制收集数据流的。 TCP特点 我们都很是清晰TCP协议计划的初志,就是担保数据传输的快速,有序,无误。以是特点总结如下:
相识完TCP特点字后,我们就来真正的看看数据发送到底是奈何的进程? 数据发送 我们起首来看张图: ![]() 上图展示的是数据活动的在硬件中的进程,下图展示的是数据在协议栈的进程: ![]() 整个进程分为三个大地区:用户区,内核区,装备。这里所说的装备就是网卡。流程如下:
数据吸取 直接看硬件数据流图: ![]() 起首网卡把吸取到的数据包写入到它的内存之中。然后对其举办校验,通事后发送到主机的主存之中。主存中的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等技能,他们通过绕过内核以镌汰拷贝等方法优化了机能,虽然也许依靠硬件。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |