计算机网络高频(三)UDP基础
1.UDP的头部格式是什么样的?⭐
UDP 头部具有以下字段:
- 源端口(Source Port):16 位字段,表示发送方的端口号。
- 目标端口(Destination Port):16 位字段,表示接收方的端口号。
- 长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部分)的总长度,以字节为单位。最小长度为 8 字节(只有头部没有数据),最大长度为 65,535 字节。
- 校验和(Checksum):16 位字段,用于检测 UDP 数据报在传输过程中是否发生了错误。校验和的计算包括 UDP 头部和数据部分。
- 数据(Data):可变长度的数据部分,用于传输应用层的数据。
UDP 头部相比于 TCP 头部较为简单,不包含像序列号、确认号、状态标志等机制。UDP 通过提供简单的无连接传输服务,但不提供可靠性、流量控制和拥塞控制等功能。
2. TCP、UDP的区别 ⭐⭐⭐⭐
1.连接性:
- TCP 是面向连接的协议,通过建立可靠的连接来传输数据。在通信之前,发送方和接收方需要进行三次握手建立连接,并且提供可靠的数据传输、流量控制、拥塞控制等机制。
- UDP 是无连接的协议,发送方可以直接向接收方发送数据报,不需要进行握手或建立连接。UDP 提供了一个简单的不可靠的数据传输服务,不保证数据的可靠性和顺序性。
2.可靠性:
- TCP 提供可靠的数据传输,通过序列号、确认机制、重传机制等保证数据的可靠性。如果有数据包丢失或损坏,TCP 会自动重传丢失的数据。
- UDP 不提供可靠性保证,发送的数据报可能会丢失、重复、乱序等。应用程序负责处理丢失和重复的数据包,并自行处理错误检测和纠正。
3.数据包大小:
- TCP 没有固定的数据报大小限制,能够适应不同大小的数据传输。
- UDP 每个数据报的大小被限制在 65,535 字节,超过该大小的数据需要进行分片传输。
4.速度和效率:
- 由于 TCP 提供的可靠性机制、流量控制和拥塞控制,以及连接的建立和维护,相对于 UDP 而言,其在传输速度和效率方面会有一定的降低。
- UDP 在没有连接建立和维护的情况下,没有额外的开销,因此在速度和效率方面比 TCP 更高。
3.TCP、UDP的优缺点⭐⭐⭐
TCP 的优点:
- 可靠性:TCP 提供可靠的数据传输,通过序列号、确认机制、重传机制等保证数据的可靠性。如果有数据包丢失或损坏,TCP 会自动重传丢失的数据。
- 顺序性:TCP 保证数据的顺序传输,接收方会按照发送方的顺序重新组装数据包,确保数据的正确顺序传递给应用程序。
- 流量控制:TCP 使用滑动窗口机制进行流量控制,根据接收方的接收能力来控制发送方的发送速度,避免了数据的丢失和拥塞。
- 拥塞控制:TCP 使用拥塞窗口机制进行拥塞控制,通过动态调整发送速率来减少网络拥塞,并避免网络崩溃。
TCP 的缺点:
- 开销较大:由于 TCP 保证了可靠性、顺序性以及流量控制和拥塞控制等机制,需要消耗较多的计算资源和带宽,增加了网络传输的开销和延迟。
- 速度相对较慢:由于 TCP 的可靠性机制和连接的建立和维护,相对于 UDP 而言,其在传输速度上会有一定的降低,特别是在高延迟和高丢包率的网络环境下。
UDP 的优点:
- 低延迟:UDP 不进行连接的建立和维护,没有额外的开销,因此在速度和效率方面比 TCP 更高,并且能够实现低延迟传输。
- 简单轻量:UDP 的头部较小,并且没有复杂的机制,使得它在资源有限的网络设备和嵌入式系统中更容易实现和处理。
UDP 的缺点:
- 不可靠性:UDP 不提供可靠性保证,发送的数据报可能会丢失、重复、乱序等。应用程序需要自行处理丢失和重复的数据包,并自己处理错误检测和纠正。
- 不保证顺序性:UDP 不保证数据的顺序传输,因此接收方可能需要重新组装数据包来保证数据的正确顺序。
4.TCP UDP适用场景⭐
TCP 的适用场景:
- 文件传输:TCP 可以可靠地传输大文件,确保数据的完整性和顺序性。
- Web 浏览:TCP 在 Web 浏览中广泛使用,通过 TCP 可以建立可靠的连接,并传输 HTTP 请求和响应数据。
- 电子邮件:TCP 可以可靠地传输电子邮件,确保邮件的完整性和可靠性。
- 文件下载和上传:TCP 可以在文件下载和上传时提供可靠的传输,确保数据的完整性和顺序性。
- 远程访问:TCP 可以通过远程登录协议(如 SSH)进行远程访问,提供可靠的连接和数据传输。
UDP 的适用场景:
- 实时游戏:UDP 在实时游戏中常被使用,实时性要求高于数据的完整性,UDP 的低延迟和无连接性特点能够满足实时游戏的需求。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
c++/嵌入式面经专栏 文章被收录于专栏
本人2022年毕业于山东大学,目前就职intel。打算把之前校招时做的笔记通过专栏发出来,本专栏适合于C/C++、嵌入式方向就业的同学,本篇面经总结数千篇面经的知识集合,实时更新全网最新的嵌入式/C++最新内容,囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,在我看来这些是求职者在面试中必须掌握的知识点。最后呢祝各位能找到自己合适的工作。