对话面试官系列----TCP协议和UDP协议----大揭秘

发布时间:2023年12月26日

TCP和UDP是两种网络传输协议,它们在数据传输、可靠性、连接性和应用场景等方面有着显著的区别。

TCP(Transmission Control Protocol):

  • 可靠性:TCP提供可靠的数据传输,通过确认机制、重传丢失的数据包和错误检测来确保数据的完整性和可靠性。

  • 连接性:TCP是面向连接的协议,建立连接、传输数据和关闭连接都需要经过三次握手和四次挥手的过程,保证了数据的有序传输。

  • 应用场景:适用于需要可靠数据传输和顺序到达的应用,如网页浏览、文件传输、电子邮件等,以及需要确保数据完整性的场景。

UDP(User Datagram Protocol):

  • 可靠性:UDP不提供数据传输的可靠性,不保证数据的传输完整性和顺序性,发送的数据包可能会丢失或乱序。

  • 连接性:UDP是无连接的,不需要建立连接,因此传输速度较快,但也不会检测和重传丢失的数据包。

  • 应用场景:适用于实时性要求高、对数据丢失较为容忍的应用,比如视频会议、在线游戏、实时通讯等场景,因为UDP传输速度快,适合对实时性要求较高的场合。

具体场景举例:

  • TCP应用场景:当你在网上浏览网页、下载文件时,通常会使用TCP协议。这些需要稳定传输、数据完整性和有序性的场景适合使用TCP。

  • UDP应用场景:而在视频会议或者在线游戏中,为了快速传输数据,UDP更为合适。虽然可能会有少量数据包丢失,但对于实时性的要求更重要,因此UDP用于这些实时应用中。

TCP如何保证可靠性的?有哪些机制?

TCP(Transmission Control Protocol)通过多种机制来保证数据传输的安全性和可靠性:

1. 序号与确认机制:

  • 序号:每个数据包都有一个唯一的序号,接收方通过序号来确认数据包的顺序,并且重组数据流。

  • 确认:接收方会发送确认应答,告知发送方已成功接收到数据,如果发送方在一定时间内未收到确认应答,会触发数据包的重传。

2. 数据校验(Checksum):

  • 每个数据包都包含一个校验和,用于检测数据在传输过程中是否发生了错误。接收方通过校验和来验证数据的完整性,如果校验失败,会要求重传数据。

3. 流量控制:

  • TCP使用滑动窗口机制来进行流量控制,即接收方通过通告发送方自己的接收窗口大小,发送方根据接收方的窗口大小来控制发送数据的速率,以避免数据包的积压。

4. 拥塞控制:

  • TCP通过拥塞窗口机制来控制网络的拥塞情况,它会根据网络的拥塞程度来调整发送速率,以减少丢包和提高网络的利用率。

5. 重传机制:

  • 如果发送方在一定时间内未收到确认应答,会触发数据包的重传,确保数据的可靠传输。

6. 三次握手和四次挥手:

  • TCP在建立连接和断开连接时使用三次握手和四次挥手的机制,确保通信双方的同步和正确关闭连接,避免数据丢失或者重复传输。

TCP头部有哪些标记位?

在TCP头部中,有一些标记位(Flag Bits)用于控制和指示TCP连接的状态和行为。这些标记位用于在TCP通信中进行控制和管理。

以下是TCP头部中的标记位(Flag Bits):

  1. URG(Urgent)

    • 表示紧急指针字段的值是有效的,用于指示数据中包含紧急数据,需要优先处理。
  2. ACK(Acknowledgment)

    • 表示确认号字段是有效的,用于确认接收方已经正确接收到了发送方指定序号的数据。
  3. PSH(Push)

    • 表示接收方应该立即把接收到的数据推送给应用层,而不需要等到接收缓冲区满才进行传输。
  4. RST(Reset)

    • 用于重置连接,表示连接出现严重问题,需要重新建立连接。
  5. SYN(Synchronize)

    • 在建立连接时,用于发起连接请求。在连接建立时,SYN标志位为1表示连接请求,双方通信的第一个数据包会带有SYN标志。
  6. FIN(Finish)

    • 用于关闭连接,表示不再有数据发送。当一方发送了FIN标志位后,表示数据传输完成,要求关闭连接。

这些标记字在TCP头部中以二进制位的形式表示不同的状态和操作,通过组合这些标记字,可以控制TCP连接的建立、传输数据、关闭等过程。

为啥初始序号是随机数?可以顺序生成吗?从0开始可以吗?

初始序号在TCP连接中的随机生成是出于安全性考虑。采用随机数作为初始序号可以提高连接的安全性,降低网络攻击者猜测序号进行伪造和重放攻击的可能性。

为什么初始序号通常是随机数:

  1. 安全性考虑

    • 使用随机数作为初始序号可以增加安全性,防止攻击者通过猜测序号来伪造、重放数据包,提高了连接的安全性。
  2. 减少预测性攻击

    • 如果初始序号是固定的、可预测的(比如从0开始递增),攻击者更容易猜测到序号,从而进行针对性的攻击。

是否可以顺序生成或从0开始?

理论上,TCP序号是可以从0开始或者按顺序生成的。然而,为了网络的安全性考虑,通常选择使用随机数作为初始序号,而不是固定的、可预测的初始值。

使用随机数作为初始序号可以增加攻击者猜测序号的难度,提高网络连接的安全性。虽然可以从0开始或者按顺序生成,但这可能会增加网络遭受攻击的风险。所以,在实践中,更常见的做法是使用随机数作为初始序号来提高安全性。

文章来源:https://blog.csdn.net/qq_51711443/article/details/135219139
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。