更多特训营笔记详见个人主页【面试鸭特训营】专栏
250112
1. TCP 和 UDP 有什么区别?
特性 | TCP | UDP |
---|---|---|
连接方式 | 面向连接(需要建立连接) | 无连接(无需建立连接) |
可靠性 | 可靠的,提供确认、重传机制 | 不可靠,没有确认和重传机制 |
数据顺序 | 保证数据按顺序到达 | 不保证数据顺序或完整性 |
流量控制 | 有流量控制(滑动窗口) | 没有流量控制 |
拥塞控制 | 有拥塞控制(如慢启动、拥塞避免) | 没有拥塞控制 |
头部开销 | 较大(最小20字节) | 较小(最小8字节) |
速度 | 较慢(需要建立连接,维护状态) | 较快(没有连接的建立和维护) |
数据传输模式 | 字节流传输模式 | 数据包传输模式 |
错误校验 | 提供错误检测和校验,保证数据正确 | 提供简单的校验,不保证数据正确 |
重传机制 | 自动重传丢失的数据包 | 无重传机制,丢失的数据包无法恢复 |
应用场景 | 需要可靠传输的场合 (如网页、文件传输) | 实时性高、能容忍丢包的应用 (如视频流、语音通信) |
协议列举 | HTTP 协议(3.0之前) HTTPS 协议 FTP 协议 SMTP 协议 POP3 协议 | HTTP 3.0 协议 DHCP 协议 DNS 协议 |
2. 说说 TCP 的三次握手和四次挥手?
客户端和服务端之间,通过三次握手建立连接,通过四次挥手断开连接
三次握手
- 第 1 次:客户端 → 服务端,发送 SYN (同步序列编号)
- A 表达了想和 B 建立连接的意愿
- 说明客户端的发送能力是正常的
- 第 2 次:服务端 → 客户端,发送 SYN-ACK (同步序列编号—确认)
- B 表达了自己的意愿
- 说明服务端的接收能力和发送能力都是正常的
- 第 3 次:客户端 → 服务端,发送 ACK (确认)
- A 告诉 B 他已经知道了 B 的意愿
- 说明客户端的接收能力是正常的
为什么一定是三次
- 如果只有一次握手
- 客户端表达了意愿,但服务端没有表达意愿,无法直接建立联系
- 如果只有两次握手
- 客户端表达了意愿,服务端也表达了意愿,但不确定客户端有没有收到服务端的意愿,无法直接建立联系
- 如有有四次握手
- 只需要三次握手就能保证客户端和服务端都表达意愿且成功接收到对方的消息
- 理论上三次及以上的握手都可以成功建立连接,但第四次握手就显得很冗余,浪费资源
- 三次握手是保障双方信息对等,且能避免出现超时连接导致出现脏连接的最少握手次数
客户端和服务端之间,通过三次握手建立连接,通过四次挥手断开连接
四次挥手
- 第 1 次:客户端 → 服务端,发送 FIN 包(FIN = 1,表示要关闭连接)
- A 表达了想和 B 断开连接的意愿
- 第 2 次:服务端 → 客户端,发送 ACK 包(ACK = 1,表示确认收到客户端的请求)
- B 收到了 A 的意愿
- 第 3 次:服务端 → 客户端,发送 FIN 包
- B 将所有数据发送给 A
- 第 4 次:客户端 → 服务端,发送 ACK 包(ACK = 1,表示确认收到服务端的请求)
- A 收到了 B 的意愿
为什么一定是四次
- 如果只有一次挥手
- 客户端表达了意愿,但服务端没有表达意愿,无法直接建立联系
- 如果只有两次挥手
- 客户端表达了意愿,服务端收到了客户端的意愿,但服务端没有把数据反馈给客户端
- 如果只有三次挥手
- 客户端表达了意愿,服务端收到了客户端的意愿,服务端把数据反馈给客户端,但不确定客户端有没有收到数据信息,无法断开连接
- 如有有五次挥手
- 只需要四次挥手就能保证客户端和服务端都表达意愿且确定断开连接
- 理论上四次及以上的挥手都可以成功建立连接,但第五次挥手就显得很冗余,浪费资源
- 四次挥手是保障双方信息对等,且能避免出现数据丢失导致出现脏连接的最少挥手次数
3. TCP 是用来解决什么问题?
TCP 是什么
- TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,广泛应用于计算机网络中,尤其是互联网中。
- 它是互联网协议族(TCP/IP协议族)中的核心协议之一。
- TCP用于在网络中实现端到端的通信,确保数据可靠地传输。
TCP的主要特点
-
面向连接
- 在发送数据之前,TCP必须先在通信双方之间建立一个连接。
- 这个连接是通过三次握手过程来实现的,确保双方都准备好进行数据传输。
-
可靠性
- TCP通过数据包的序号和确认机制来保证数据按顺序到达并且没有丢失。
- 如果数据包丢失或出错,TCP会自动重传。
-
流量控制
- TCP使用流量控制机制来避免发送方发送过多的数据,超出接收方的处理能力。
- 它通过滑动窗口机制来控制双方的数据流量,确保接收方能够处理所有接收到的数据。
-
拥塞控制
- TCP能够检测网络中的拥塞并通过调整数据发送速率来缓解网络负担。
- 它采用多种算法(如慢启动、拥塞避免、快速重传和快速恢复)来控制数据流的发送速度。
-
有序数据传输
- TCP确保数据按发送顺序到达接收方。
- 即使数据包在网络中以不同的路径传输,TCP也会重新排列接收到的数据包,使其按正确的顺序交付给应用程序。
-
全双工通信
- TCP支持全双工通信,即双方可以同时发送和接收数据。
TCP 解决的问题
TCP 通过提供可靠性传输、流量控制、拥塞控制和连接管理,解决了数据在不可靠 IP 网络上的传输问题。
- 可靠性传输
- TCP 确保数据包在网络传输过程中不丢失、不重复,并且按顺序到达。
- 通过确认(ACK)、重传机制以及序列号,TCP 能够保证数据在不可靠的 IP 网络上可靠传输。
- 流量控制
- TCP 通过滑动窗口机制调节发送方的数据发送速率,防止接收方因为处理能力有限而被数据流淹没。
- 滑动窗口用于动态调整可以发送的数据量。接收方通过发送窗口大小通告,指示发送方可以发送的最大数据量。
- 这种机制不仅避免了接收方的溢出,还提高了数据传输效率。
- 拥塞控制
- TCP 通过拥塞避免算法
如慢启动、拥塞避免、快速重传和快速恢复
来防止网络过载,确保网络资源的公平使用和稳定性。 - 慢启动:逐步增加发送窗口,直到检测到网络的拥塞点。
- 拥塞避免:当达到网络容量后,逐渐增加窗口以避免拥塞。
- 快速重传和快速恢复:在检测到包丢失时,立即进行重传并调整发送窗口,快速恢复到正常传输状态。
- TCP 通过拥塞避免算法
- 连接管理
- TCP 是面向连接的协议,采用三次握手(建立连接)和四次挥手(断开连接)机制来管理会话,确保通信的可靠性和状态的同步。
- 三次握手:建立连接时,双方通过三次信息交换( SYN , SYN-ACK , ACK)来确保双方都准备好进行数据传输,并协商参数(如初始序列号)。
- 四次挥手:断开连接时,通过四次消息交换来确保数据传输完成且资源可以安全释放,防止未传输的数据丢失。
TCP的工作过程
-
建立连接(三次握手)
- 在通信双方之间建立连接时,TCP使用三次握手来确认双方都能正常通信。
- 第一步:客户端发送一个SYN(同步)信号,表示请求建立连接。
- 第二步:服务器接收到 SYN 信号后,回复一个 SYN + ACK(确认)信号,表示同意连接。
- 第三步:客户端接收到 SYN + ACK 后,再发送一个 ACK(确认)信号,表示连接建立成功。
- 在通信双方之间建立连接时,TCP使用三次握手来确认双方都能正常通信。
-
数据传输(甜蜜生活ing)
- 一旦连接建立,TCP开始传输数据。数据以数据段的形式被封装,其中包含序列号、确认号、校验和等信息。
- 在传输过程中,发送方会给每个数据包分配一个序列号,接收方会对每个收到的数据包发送确认应答(ACK)。如果发送方在一定时间内没有收到确认,它会重传数据包。
-
连接终止(四次挥手)
- 当数据传输完成时,连接将被终止。这个过程叫做“四次挥手”:
- 第一步:客户端发送一个FIN(结束)信号,表示数据发送完毕,准备关闭连接。
- 第二步:服务器收到FIN信号后,确认并回复一个ACK信号。
- 第三步:服务器发送FIN信号,表示它也准备关闭连接。
- 第四步:客户端收到服务器的FIN信号后,回复ACK信号,连接最终关闭。
- 当数据传输完成时,连接将被终止。这个过程叫做“四次挥手”:
TCP报文结构
- TCP报文由多个字段组成,具体如下
字段名 | 含义 |
---|---|
源端口号 | 发送端的端口 |
目标端口号 | 接收端的端口 |
序列号 | 用于数据重排序,保证数据的顺序 |
确认号 | 表示接收到的数据的下一序列号 |
数据偏移 | 数据在报文中的起始位置 |
标志位 | 包括SYN、ACK、FIN等标志,指示连接的状态 |
窗口大小 | 表示接收方的缓冲区大小,用于流量控制 |
校验和 | 用于错误检测,保证数据的完整性 |
TCP 为什么可靠
TCP 之所以被称为可靠的协议,主要是因为它提供了以下功能
-
数据完整性:使用校验和确保数据在传输中没有被破坏。
-
数据顺序:保证数据按顺序到达接收方,且接收方能够重新排序乱序到达的数据。
-
流量控制:通过滑动窗口机制避免接收方溢出。
-
拥塞控制:通过动态调整发送速率避免网络拥塞。
-
重传机制:确保丢失的数据会被重新传输。
-
可靠的连接建立和关闭:通过三次握手和四次挥手确保连接的正确建立和断开。
-
防止数据重复:通过序列号和确认机制防止重复数据的接收。