摘要:面试的八股文是面试的常客,也是很多人讨厌的东西。本文介绍了TCP的八股文的常见问题和答案。欢迎点赞收藏转发。
面试的八股文是面试的常客,也是很多人讨厌的东西,上面的文章分析了为什么要问8股文。
这次我把自己整理的8股文知识记录一下,献给有需要的人。
问题1. 介绍TCP和UDP
TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)的全称,明确了它们位于传输层,作用是实现端口到进程的数据投递,这是正确的。你抓住了核心区别——TCP 强调可靠性,UDP 追求效率,表述简洁清晰。
- TCP 通过序列号、确认应答、重传、流量控制和拥塞控制等机制确保数据不丢失、不重复、按序到达。
- UDP 仅提供端口号和校验和,不保证顺序和可靠性,头部仅 8 字节,而 TCP 头部至少 20 字节,这也是成本差异的来源之一。
问题 2: TCP 通过哪些具体机制来保证可靠性?
TCP 通过哪些具体机制来保证可靠性?请至少列举三种,并简要说明它们如何协同工作。
TCP 的可靠性不依赖“点对点”这个属性(UDP 也可以点对点),而是依靠序列号、确认、超时重传和丢失重传机制。你准确抓住了核心机制:序列号与确认应答保证顺序和完整性,超时和重传处理丢包。但缺少一些协同细节,比如流量控制(滑动窗口)和拥塞控制,这些也是可靠性的重要保障。
补充说明:
TCP 保证可靠性的核心机制包括:
- 序列号与确认应答:每个字节都有序列号,接收方通过确认号告知已收到数据,确保有序和完整性。
- 超时重传:发送方设置 RTO(重传超时时间),若未收到确认,则重传数据。
- 丢失重传:通过快速重传机制,当接收方收到乱序包时,会立即发送重复确认,发送方在收到 3 次重复确认后立即重传,无需等待超时。
- 流量控制:通过滑动窗口机制,接收方动态告知发送方可发送的数据量,防止缓冲区溢出。
- 拥塞控制:慢启动、拥塞避免、快速重传和快速恢复等算法,动态调整发送速率,避免网络过载。
这些机制协同工作:序列号和确认确保数据完整有序,超时和快速重传处理丢包,流量控制防止接收方缓冲区溢出,拥塞控制避免网络过载。
问题 3: TCP 的三次握手过程?
你能描述一下 TCP 的三次握手过程吗?为什么需要三次握手?两次握手行不行? TCP 的滑动窗口机制是如何工作的?它如何解决数据传输中的流量控制问题?
滑动窗口的核心机制:发送方在报文中携带窗口字段,告知对方当前接收缓冲区的可用空间,接收方根据剩余空间调整发送速率。你提到“窗口大小随缓冲区空闲空间变化”和“每次报文携带窗口信息”,这是正确的。
补充说明:
TCP 滑动窗口机制的工作原理:
- 窗口字段:TCP 报头中的窗口字段(16 位)表示接收方当前缓冲区的可用空间(以字节为单位)。发送方根据该值调整发送数据量,避免接收方缓冲区溢出。
- 动态调整:
- 窗口扩大:当接收方处理完数据,缓冲区空闲空间增加,窗口字段随之增大,发送方可发送更多数据。
- 窗口缩小:当接收方缓冲区数据积压,窗口字段减小,发送方降低发送速率。
- 零窗口:若接收方缓冲区满,窗口字段为 0,发送方暂停发送,等待接收方重新通告窗口大小。
- 零窗口探测:若窗口为 0,发送方会定期发送小窗口探测报文(如 1 字节),检测接收方窗口是否恢复,避免死锁。
滑动窗口解决流量控制的方式:
- 防止缓冲区溢出:通过实时通告接收方缓冲区空闲空间,发送方动态调整发送速率,避免数据被丢弃。
- 高效利用带宽:窗口大小随网络状况和接收方处理能力变化,既保证可靠性,又提高传输效率。