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

【计算机网络 - 基础问题】每日 3 题(二十一)

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)

61. TCP 和 UDP 可以使用同一个端口吗?

答案:可以的。

在数据链路层中,通过 MAC 地址来寻找局域网中的主机。在网际层中,通过 IP 地址来寻找网络中互连的主机或路由器。在传输层中,需要通过端口进行寻址,来识别同一计算机中同时通信的不同应用程序。

所以,传输层的「端口号」的作用,是为了区分同一个主机上不同应用程序的数据包。

传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件模块。

当主机收到数据包后,可以在 IP 包头的「协议号」字段知道该数据包是 TCP/UDP,所以可以根据这个信息确定送给哪个模块(TCP/UDP)处理,送给 TCP/UDP 模块的报文根据「端口号」确定送给哪个应用程序处理。

62. TCP 序列号和确认号是如何变化的?

发送的 TCP 报文:

  • 公式一:序列号 = 上一次发送的序列号 + len(数据长度)。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为上一次发送的序列号 + 1。
  • 公式二:确认号 = 上一次收到的报文中的序列号 + len(数据长度)。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为上一次收到的报文中的序列号 + 1。

63. TCP 流量控制、拥塞控制

流量控制是指在通信的发送端和接收端之间,通过协商和控制发送速率,以确保接收端能够处理来自发送端的数据。流量控制的主要目的是避免接收端缓冲区溢出,防止丢失或丢弃数据。常见的流量控制机制包括滑动窗口协议、反馈机制(如 TCP 的 ACK 确认)和自适应速率算法(如 TCP 的拥塞窗口调整)。流量控制通常是发送端和接收端之间的通信协议所实现的。

工作原理:

  1. 滑动窗口机制:TCP 流量控制使用了滑动窗口机制。接收端维护一个接收窗口大小(Receiver Window Size),表示它还能接收多少字节的数据。这个窗口的大小会根据接收端的处理能力和可用缓冲空间而变化。
  2. 通告窗口大小:接收端会向发送端发送一个通告窗口大小(Advertised Window Size),告诉发送端它还能接收多少数据。通告窗口大小是动态调整的,根据接收端的情况和网络条件来确定。
  3. 发送端根据窗口大小发送数据:发送端根据接收端通告的窗口大小来确定可以发送多少数据。发送端会维护一个发送窗口,确保它只发送接收端可以容纳的数据量。
  4. 动态调整窗口大小:通告窗口大小可以根据接收端的缓冲区可用空间和网络条件来动态调整。如果接收端的缓冲区快满了,它会减小通告窗口大小,告诉发送端减缓发送速度;如果接收端有更多的可用空间,它会增大通告窗口大小,允许发送端发送更多数据。
  5. 避免过载:TCP 流量控制的关键目标是防止过载。通过定期更新通告窗口大小,TCP 确保发送端发送的数据不会超过接收端的处理能力和可用缓冲区大小。

拥塞控制是指网络中的资源供不应求,导致网络性能下降的现象。当网络中的拥塞发生时,传输速率超过了网络能够处理的范围,数据包开始丢失、延迟增加,甚至导致网络崩溃。拥塞控制的主要目的是通过调整发送速率、丢包回退、拥塞信号等机制,以使网络性能恢复到可接受的水平。拥塞控制通常由网络设备(如路由器)和协议(如 TCP 和 UDP)实现,通过监测网络拥塞情况并采取相应的措施来缓解拥塞。

总结一下,流量控制主要关注发送端和接收端之间的通信速率,以避免接收端缓冲区溢出;而拥塞控制则是网络中的全局机制,旨在处理网络拥塞现象,通过调整发送速率和其他拥塞控制策略来保持网络性能良好。


http://www.kler.cn/news/319327.html

相关文章:

  • 如何全局修改Git的邮箱、用户名?
  • Redis面试笔记
  • 教授【优青】团队亲自指导!提供专业实验设计、数据分析、SCI论文辅助等全方位服务
  • c++中修改const变量的方法和const类成员函数修改类成员变量的方法
  • Qt 状态机编程,双层状态机,实现暂停恢复
  • awk 切割字符串 shell linux
  • 深入解析 Apache Kylin
  • Python解析非参数检验
  • 节日庆典中的白酒文化,传承与创新并存
  • 学习实践: Procdump获取本地远控信息
  • 移动应用安全
  • 浅拷贝和深拷贝(Java 与 JavaScript)
  • 专利管理系统如何高效实现五书转档为XML?
  • c++常用工具类函数
  • 一篇Spring IOC笔记
  • Spring底层原理大致脉络
  • QT窗口无法激活弹出问题排查记录
  • 给子组件传递dom元素引用实例方案
  • 浮点型的详细介绍以及sizeof
  • 灵当CRM index.php SQL注入漏洞复现
  • C语言之初阶指针
  • 【机器学习】自监督学习:解锁数据的无限潜能
  • 大数据-146 Apache Kudu 安装运行 Dockerfile 模拟集群 启动测试
  • ubuntu 安装minikube,并拉取k8s镜像
  • 2024年9月SCI-苔藓生长优化算法Moss Growth Optimization-附Matlab免费代码
  • 线性代数书中求解线性方程组的三种方法的实例
  • C标准库<string.h>-mem开头的函数
  • Linux安装Redis
  • 使用vite+react+ts+Ant Design开发后台管理项目(三)
  • 5G技术对IT行业的影响及未来发展