蓝盟IT外包,Linux TCP/IP协议栈,数据发送和接收过程,TCP协议功能

发布者:上海IT外包 发布时间:2019/10/8 9:49:32来源:www.linemore.com

    毫不夸张地说,当今的Internet是建立在TCP/IP之上的网络。了解协议栈的原理对于调试网络IO性能或解决网络问题非常有帮助。本文介绍了内核如何控制网络流量。
  TCP特性
  我们都非常了解TCP协议设计的初衷,即确保数据传输快速,有序且无错误。因此,特征总结如下:
  对于面向连接,可以使用五元组来表示连接(远程ip,远程端口,本地ip,本地端口,传输层协议)。
  数据为全双工
  数据是有序的,也就是说,接受的数据必须按照发送的顺序。
  通过流控制,发送方可以通过接收方滑动窗口的大小动态调整传输数据的大小。
  拥塞控制,发送方通过将ACK的状态与拥塞算法相结合来给出窗口大小。
  了解了TCP功能词后,让我们看一下数据传输的过程。
  用户应用程序调用写入系统调用
  确认文件描述符
  将数据复制到套接字缓冲区
  创建一个tcp片段并计算校验和
  添加IP标头,执行IP路由,计算校验和
  添加以太网协议标头并执行ARP
  告诉NIC芯片发送数据
  网卡从内存中获取数据传输,并且传输完成中断告诉CPU
  数据接收
  直接看一下硬件数据流程图:
  文章:Linux TCP/IP协议栈,数据发送和接收过程,TCP协议功能
  首先,NIC将接收到的数据包写入其内存。然后将其验证并发送到主机的主内存。主存储器中的缓冲区由驱动程序分配。驱动程序将告知网卡分配的缓冲区描述。如果没有足够的缓冲区来接受网卡的数据包,则网卡将丢弃该数据包。将数据包复制到主存储器后,网卡将通过中断通知主机OS。
  然后,驱动程序将检查它是否可以处理此新程序包。如果可以处理,则驱动程序会将数据包包装到可识别OS的结构(linux sk_buffer)中,并将其推送到上层。链路层收到帧并通过检查后,将根据协议对其进行解帧,并将其推送到IP层。
  IP层在拆包后根据包中包含的IP信息来决定是推送到上层还是转发到其他IP。如果判断需要将其推送到上层,则将IP头删除并推送到TCP层。
  TCP报告后,TCP将根据其四边形找到相应的TCB,然后通过TCP协议处理消息。收到消息后,将消息添加到接受的消息中,然后根据TCP的状态将ACK发送给对等方。当然,以上过程将受到NAT和其他Netfilter的影响。我不会在这里谈论它,并且我还没有研究它。当然,为了提高性能,大牛们还在各个方面做出了很多努力,例如大型硬件和软件技术(例如RDMA和DPDK),如零拷贝,校验和卸载等。

 

上海IT外包服务网 链接:http://www.linemore.com

>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部