苹果版彩神通下载-一篇文章:Linux TCP/IP协议栈,数据发送接纳流程,TCP协议特色

能够毫不夸大的说现如今的互联网是依据TCP/IP构建起来的网络。弄懂协议栈的原理,不管对调试网络IO功能仍是处理网络问题都是有很大协助的。本片文章就带领咱们来看看内核是怎么操控网络数据流的。

TCP特色

咱们都十分清楚TCP协议规划的初衷,便是确保数据传输的快速,有序,无误。所以特色总结如下:

  1. 面向衔接,能够用五元组来表明一条衔接(长途ip,长途端口,本地ip,本地端口,传输层协议)。
  2. 数据是全双工的
  3. 数据是有序的,也便是承受的数据一定是依照发送时的次序的。
  4. 流量操控,发送方能够经过接纳方滑动窗口苹果版彩神通下载-一篇文章:Linux TCP/IP协议栈,数据发送接纳流程,TCP协议特色巨细来动态调整发送数据的巨细。
  5. 拥塞操控,发送方经过ACK的状况结合拥塞算法归纳核算给出窗口巨细。

了解完TCP特色字后,咱们就来真实的看看数据发送到底是怎样的进程?

数据发送

咱们首要来看张图:



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



整个进程分为三个大区域:用户区,内核区,设备。这儿所说的设备便是网卡。流程如下:

  1. 用户应用程序调用write体系调用
  2. 承认文件描绘符
  3. 复制数据到socket buffer中
  4. 创立tcp片段,核算checksum
  5. 增加IP头,履行ip路由,核算checksum
  6. 增加以太网协议头部,履行ARP
  7. 奉告网卡芯片要发送数据了
  8. 网卡从内存中获取数据发送,发送完结中止奉告CPU


数据接纳

直接看硬件数据流图:




首要网卡把接纳到的数据包写入到它的内存之中。然后对其进行校验,经往后发送到主机的主存之中。主存中的buffer是驱动分配好的,驱动会把分配好的buffer描绘奉告网卡,假如没有满足的buffer承受网卡的数据包,网卡会将数据包丢掉。一旦数据包复制到主存完结,网卡会经过中止奉告主永久地址机OS。

之后驱动会查看它是否能处理这个新的包。假如能处理,驱动苹果版彩神通下载-一篇文章:Linux TCP/IP协议栈,数据发送接纳流程,TCP协议特色会把数据包包装成OS知道的结构(linux sk_buffer)并推送到上层。 链路层接苹果版彩神通下载-一篇文章:Linux TCP/IP协议栈,数据发送接纳流程,TCP协议特色纳到帧后查看经过的话会依照协议解帧并推送至IP层。

IP层会在解包之后依据包中包括的IP信息决议推送至上层仍是转发到其他IP。假如判别需求推送至上层,则会解掉IP包头并推送至TCP层。

TCP在解报之后会依据其四元组找到对应的TCB,之后经过TCP协议处理这个报文。在接纳到报文后,会把报文加到承受报文,之后依据TCP的状况发送一个ACK给对端。

当然上述进程会遭到NAT等等Netfilter的效果,这儿不谈了,也没深研讨过。当然为了功能,大牛们方方面面也做了许多尽力,比方大到RDMA、DPDK等大的软硬件技能,小苹果版彩神通下载-一篇文章:Linux TCP/IP协议栈,数据发送接纳流程,TCP协议特色到zero-copy、checksum offload等;

总结

现代的软硬件TCP/IP协议栈单链接发送速率到1~2GiB/s彻底没有任何问题(经过实测)。假如你想探究更优异的功能,你能够测验RMDA等技能,他们经过绕过内核以削减复制等方法优化了功能,当苹果版彩神通下载-一篇文章:Linux TCP/IP协议栈,数据发送接纳流程,TCP协议特色然或许依靠硬件。