华为OD面试真题精选
专栏:华为OD面试真题精选
目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录
介绍下TCP/UDP
TCP(传输控制协议)和 UDP(用户数据报协议)
TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种常见的传输层协议,主要用于不同类型的网络通信。它们各自有不同的特性、应用场景以及优缺点。下面是对这两种协议的详细介绍:
1. TCP(传输控制协议)
TCP 是一种面向连接的协议,它确保数据包的可靠传输。它使用的是连接建立和断开机制,这意味着在数据传输开始之前,发送方和接收方之间需要先建立连接。TCP 协议适用于那些对可靠性要求高的场景。
特性:
- 面向连接:在数据传输之前,发送端和接收端需要建立一个连接,使用三次握手(3-way handshake)过程来完成连接的建立。
- 可靠性:TCP 确保数据按顺序到达接收方,并且通过校验和、确认应答、重传机制来保证数据的完整性。
- 流量控制:TCP 使用滑动窗口协议来控制数据的流量,防止发送过快导致接收方无法处理。
- 拥塞控制:TCP 还通过算法(如慢开始、拥塞避免)来避免网络拥塞,确保数据传输的高效性。
- 顺序保证:TCP 确保数据包按发送顺序到达接收方。如果数据包丢失或顺序错乱,会进行重传,确保顺序一致。
工作原理:
- 三次握手:建立连接时,发送方和接收方通过三次握手的过程来同步各自的初始序列号,确保连接的可靠性。
- 数据传输:数据按字节流的形式传输,接收方会对每一个收到的数据包进行确认,发送方根据接收方的确认应答进行重传,确保数据的完整性。
- 四次挥手:连接结束时,发送方和接收方通过四次挥手过程来关闭连接,释放资源。
应用场景:
- Web 浏览(HTTP/HTTPS)
- 文件传输(FTP)
- 电子邮件(SMTP, IMAP, POP3)
- 远程登录(SSH, Telnet)
优点:
- 可靠性高,数据传输保证无误。
- 数据按顺序到达。
缺点:
- 建立连接需要时间(3次握手),增加延迟。
- 流量和拥塞控制带来额外的开销。
- 不适合实时应用,因为延迟较高。
2. UDP(用户数据报协议)
UDP 是一种无连接的协议,相较于 TCP,它提供较低的开销和更少的延迟。UDP 不保证数据的可靠性,数据包可能丢失、重复或无序到达。因此,它适用于对传输速度要求较高,但对可靠性要求不那么严格的应用。
特性:
- 无连接:UDP 不需要在发送数据之前建立连接,因此减少了建立和断开连接的时间。
- 不可靠性:UDP 不保证数据包的到达和顺序,不进行任何重传或确认。
- 无流量控制和拥塞控制:UDP 不会控制发送的速率,因此没有流量控制和拥塞控制机制。
- 轻量级:UDP 的头部开销非常小,相比 TCP 它传输数据更高效。
工作原理:
- 数据传输:发送方直接发送数据包给接收方,没有建立连接,也没有确认机制。如果数据丢失或顺序错误,接收方也不会请求重传。
- 数据报文:UDP 每次发送的数据是一个独立的“数据报”,即使数据包丢失或错乱,UDP 也不进行任何补救。
应用场景:
- 流媒体(视频、音频传输)
- 实时通讯(VoIP、在线游戏)
- DNS 查询
- SNMP(简单网络管理协议)
- DHCP(动态主机配置协议)
优点:
- 速度快,延迟低,适合实时应用。
- 传输开销小,没有连接建立和维护的过程。
- 无连接,适合广播、单播等场景。
缺点:
- 不保证数据的可靠性、顺序和完整性。
- 不适合需要高可靠性的应用。
3. TCP 和 UDP 的对比
特性 | TCP | UDP |
---|---|---|
连接性 | 面向连接,需要建立连接(3次握手) | 无连接,数据包独立发送 |
可靠性 | 保证数据按顺序到达,丢失数据会重传 | 不保证数据到达,也不保证顺序,不重传丢失数据 |
流量控制 | 有流量控制和拥塞控制 | 无流量控制 |
传输速度 | 相对较慢,因有重传和确认过程 | 较快,无重传和确认过程 |
头部开销 | 大,通常是20字节以上 | 小,通常是8字节 |
适用场景 | 需要可靠性保证的应用,如 HTTP、FTP、SSH 等 | 对速度要求高、可容忍丢包的应用,如视频、音频流等 |
TCP为什么可靠
TCP(Transmission Control Protocol)被设计为一个可靠的传输协议,提供可靠的数据传输服务。它通过一系列机制来确保数据从发送方到接收方的可靠性,以下是 TCP 保证可靠性的几个关键特性:
1. 数据完整性
- TCP 在发送数据时会计算数据的校验和(Checksum)。在接收方,TCP 会使用相同的算法重新计算接收到的数据的校验和。如果校验和不匹配,数据就被认为是损坏的,接收方会丢弃该数据包并要求重传。
2. 数据顺序保证
-
TCP 使用序列号(Sequence Number)来标识每个数据包。当接收方收到数据包时,它会根据序列号对数据进行排序。即使数据包到达的顺序不同,接收方仍能根据序列号按正确的顺序重组数据。
- 如果一个数据包丢失或乱序,接收方会按顺序等待并请求重传。
3. 确认应答与重传机制
-
在 TCP 中,发送方会在发送每个数据包后等待接收方的确认应答(ACK)。接收方收到数据包后,会向发送方发送一个确认信号,告知已经收到的数据包的序列号。
- 如果发送方在一定时间内没有收到确认应答,它会认为数据包丢失,并会重传该数据包。这保证了数据的可靠传输。
4. 流量控制(Flow Control)
-
TCP 使用滑动窗口机制进行流量控制,以避免发送方发送过快,导致接收方处理不过来。
- 接收方会告知发送方它的缓冲区大小(即窗口大小),发送方会根据这个信息调整发送速度,从而避免缓冲区溢出和数据丢失。
5. 拥塞控制(Congestion Control)
-
为了防止网络拥塞,TCP 使用拥塞控制算法(如慢开始、拥塞避免、快速重传、快速恢复等)来动态调整数据的发送速度。
- 这些机制确保了网络中不会因为数据发送过快而导致网络拥塞,从而减少了丢包和延迟。
6. 三次握手(Three-Way Handshake)
-
在连接建立时,TCP 使用三次握手来确认双方是否都准备好开始数据传输:
- SYN:客户端向服务器发送一个连接请求。
- SYN-ACK:服务器响应确认请求。
- ACK:客户端确认收到服务器的响应。
这个过程确保了双方的连接建立是可靠的。
7. 四次挥手(Four-Way Handshake)
- 在连接断开时,TCP 使用四次挥手来确保双方都知道连接已经关闭,数据传输也已完全结束。这确保了没有数据丢失,并且连接能够安全地关闭。
8. 重传机制(Retransmission)
- 当发送方没有收到接收方的确认应答时,TCP 会定时进行重传。通过超时重传(Timeout Retransmission)机制,保证丢失的数据包能够及时重传并且最终到达接收方。