当前位置: 首页 > article >正文

数据包的发送流程

以绿皮聊天软件为例:

首先,我们两个手机的绿皮聊天软件客户端,要通信,中间会通过它们家服务器。大概长这样。

聊天软件三端通信

但为了简化模型,我们把中间的服务器给省略掉,假设这是个端到端的通信。且为了保证消息的可靠性,我们盲猜它们之间用的是TCP协议进行通信。

聊天软件两端通信

为了发送数据包,两端首先会通过三次握手,建立TCP连接。

一个数据包,从聊天框里发出,消息会从聊天软件所在的用户空间拷贝到内核空间的发送缓冲区(send buffer),数据包就这样顺着传输层、网络层,进入到数据链路层,在这里数据包会经过流控(qdisc),再通过RingBuffer发到物理层的网卡。数据就这样顺着网卡发到了纷繁复杂的网络世界里。这里头数据会经过 n 多个路由器和交换机之间的跳转,最后到达目的机器的网卡处。

此时目的机器的网卡会通知 DMA 将数据包信息放到 RingBuffer 中,再触发一个硬中断给 CPU,CPU 触发软中断让 ksoftirqd 去RingBuffer 收包,于是一个数据包就这样顺着物理层,数据链路层,网络层,传输层,最后从内核空间拷贝到用户空间里的聊天软件里。

网络发包收包全景图

参考:
用了TCP协议,就一定不会丢包吗?


http://www.kler.cn/a/527430.html

相关文章:

  • Linux命令汇总
  • 力扣017_最小覆盖字串题解----C++
  • AI学习指南HuggingFace篇-Datasets 库入门
  • [EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型
  • 研发的护城河到底是什么?
  • 双指针c++
  • 5.4.1 结构化分析方法
  • Golang 并发机制-3:通道(channels)机制详解
  • 【C/C++】区分0、NULL和nullptr
  • 26.Word:创新产品展示说明会【9】
  • Keepalived 安装
  • 基于微信小程序的实习记录系统设计与实现(LW+源码+讲解)
  • DeepSeek的崛起与OpenAI的守擂:AI大模型时代的竞争新格局
  • 自动化数据备份与恢复:让数据安全无忧
  • 动态规划 (环形)
  • Spring的AOP的JoinPoint和ProceedingJoinPoint
  • 网络编程复习
  • 从0开始,来看看怎么去linux排查Java程序故障
  • Day31-【AI思考】-深度学习方法论全解析——科学提升学习效率的终极指南
  • Synology 群辉NAS安装(7)lsof指令和synogear