【计算机网络 - 基础问题】每日 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 的拥塞窗口调整)。流量控制通常是发送端和接收端之间的通信协议所实现的。
工作原理:
- 滑动窗口机制:TCP 流量控制使用了滑动窗口机制。接收端维护一个接收窗口大小(Receiver Window Size),表示它还能接收多少字节的数据。这个窗口的大小会根据接收端的处理能力和可用缓冲空间而变化。
- 通告窗口大小:接收端会向发送端发送一个通告窗口大小(Advertised Window Size),告诉发送端它还能接收多少数据。通告窗口大小是动态调整的,根据接收端的情况和网络条件来确定。
- 发送端根据窗口大小发送数据:发送端根据接收端通告的窗口大小来确定可以发送多少数据。发送端会维护一个发送窗口,确保它只发送接收端可以容纳的数据量。
- 动态调整窗口大小:通告窗口大小可以根据接收端的缓冲区可用空间和网络条件来动态调整。如果接收端的缓冲区快满了,它会减小通告窗口大小,告诉发送端减缓发送速度;如果接收端有更多的可用空间,它会增大通告窗口大小,允许发送端发送更多数据。
- 避免过载:TCP 流量控制的关键目标是防止过载。通过定期更新通告窗口大小,TCP 确保发送端发送的数据不会超过接收端的处理能力和可用缓冲区大小。
拥塞控制是指网络中的资源供不应求,导致网络性能下降的现象。当网络中的拥塞发生时,传输速率超过了网络能够处理的范围,数据包开始丢失、延迟增加,甚至导致网络崩溃。拥塞控制的主要目的是通过调整发送速率、丢包回退、拥塞信号等机制,以使网络性能恢复到可接受的水平。拥塞控制通常由网络设备(如路由器)和协议(如 TCP 和 UDP)实现,通过监测网络拥塞情况并采取相应的措施来缓解拥塞。
总结一下,流量控制主要关注发送端和接收端之间的通信速率,以避免接收端缓冲区溢出;而拥塞控制则是网络中的全局机制,旨在处理网络拥塞现象,通过调整发送速率和其他拥塞控制策略来保持网络性能良好。