美文网首页
一段数据流从应用程序发送端,一直到应用程序接收端,总共经过了多少

一段数据流从应用程序发送端,一直到应用程序接收端,总共经过了多少

作者: taj3991 | 来源:发表于2019-12-26 15:49 被阅读0次

我的本意可以用文稿中的一张图来表示,还记得 TCP/IP 层次模型么?我想通过这么一个问题,来展示 TCP/IP 分层的思想。

让我们先看发送端,当应用程序将数据送到发送缓冲区时,调用的是 send 或 write 方法,如果缓存中没有空间,系统调用就会失败或者阻塞。我们说,这个动作事实上是一次”显式拷贝“。而在这之后,数据将会按照 TCP/IP 的分层再次进行拷贝,这层的拷贝对我们来说就不是显式的了。

接下来轮到 TCP 协议栈工作,创建 Packet 报文,并把报文发送到传输队列中(qdisc),传输队列是一个典型的 FIFO 队列,队列的最大值可以通过 ifocnfig 命令输出的 txqueuelen 来查看。通常情况下,这个值有几千报文大小。

TX ring 在网络驱动和网卡之间,也是一个传输请求的队列。

网卡作为物理设备工作在物理层,主要工作是把要发送的报文保存到内部的缓存中,并发送出去。

接下来再看接收端,报文首先到达网卡,由网卡保存在自己的接收缓存中,接下来报文被发送至网络驱动和网卡之间的 RX ring,网络驱动从 RX ring 获取报文 ,然后把报文发送到上层。

这里值得注意的是,网络驱动和上层之间没有缓存,因为网络驱动使用 Napi 进行数据传输。因此,可以认为上层直接从 RX ring 中读取报文。

最后,报文的数据保存在套接字接收缓存中,应用程序从套接字接收缓存中读取数据。

上面的任何一个环节稍有积压,都会对程序性能产生影响。但好消息是,内核和网络设备供应商已经帮我们把一切都打点好了,我们看到和用到的,其实只是冰山上的一角而已。

原文

https://time.geekbang.org/column/article/120390

相关文章

  • 一段数据流从应用程序发送端,一直到应用程序接收端,总共经过了多少

    我的本意可以用文稿中的一张图来表示,还记得 TCP/IP 层次模型么?我想通过这么一个问题,来展示 TCP/IP ...

  • day32-粘包问题和报头的定制

    粘包问题 TCP协议作为流式协议,只有TCP协议存在粘包问题。 发送端可以是一K一K地发送数据,而接收端的应用程序...

  • 1. PCIe 均衡技术介绍(概要)-转

    1.1 信号均衡概念及意义   信号从发送端发出,经信道传输,到达接收端。在传输过程中,信号会发生失真,影响接收端...

  • day32流式协议

    流式协议 流式协议会产生粘包问题 发送端可以是1k1k的发送数据,而接收端的应用程序可以2k2k的提走数据,当然也...

  • 【JAVA】总结四

    阻塞IO和非阻塞IO 发送端往缓冲区写入数据,当发送端缓冲区数据满了,发送端write就会阻塞,接收端从接收端缓冲...

  • Http常用方法

    1.Get-》服务器向客户端发送请求 2.post->客户端数据发送服务网关应用程序,客户端发送post 请求给服...

  • React native-Flux单项数据流

    Flux官方概述: Flux是Facebook用于构建客户端Web应用程序的应用程序架构。它通过使用单向数据流补充...

  • UDP简单聊天室

    发送端 接收端

  • UDP接受端实现

    学习了发送端之后也要学习接受端在创建接收端的时候,需要指明接收端的端口,这个端口要和发送端发送的端口一致getAd...

  • webrtc RTT计算及NTP时间戳

    RTT:round-trip time(往返时延),是指从数据包发送开始,到接收端确认接收,然后发送确认给发送端总...

网友评论

      本文标题:一段数据流从应用程序发送端,一直到应用程序接收端,总共经过了多少

      本文链接:https://www.haomeiwen.com/subject/pcxloctx.html