TCP-UDP的区别以及TCP三次握手四次挥手

49次阅读

共计 2753 个字符,预计需要花费 7 分钟才能阅读完成。

UDP

1. 命名

User Datagram Protocol 用户数据报协议

2. 有无连接

随时发送数据,无需连接

3. 通信方式

单播、多播、广播

单播 :一台主机给一台主机发送数据

多播 :一台主机给多台主机中的一部分发送数据

广播 :一台住距给多台主机所有发送数据

4. 对应用报文的处理

发送时直接添加首部。接收时直接除去首部。纯面向报文

5. 是否提供可靠的传输服务

​ 因无连接,提供的是不可靠服务。即,UDP 发送方不会在意误码、丢包,接收方不做任何处理,只管接受

优点:

  1. 保证实时性。网络直播、视频会议

6. 首部开销

UDP 头部包含了以下几个数据

  • 源端口端口号(可选字段)(2 字节)
  • 目标端口(2 字节)
  • 整个数据报文的长度(2 字节)
  • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误(2 字节)

TCP

1. 命名

Transmission Control Protocol 传输控制协议

2. 有无连接

三次握手建立连接 -> 数据传输 -> 四次挥手释放连接

3. 通信方式

单播

4. 对应用层报文的处理

  1. 流程

    发送方将数据块分割并存储在缓存,根据策略提取一定量字节,添加首部发送。接收方提取 TCP 报文中的数据并存储在缓存,将缓存中一部分字节流交给应用进程。纯面向字节流。

  2. 注意

    1. TCP 并不知道字节流的含义,因此接收方需要具备理解字节流的能力
    2. 发送方发送的数据块和和接收方接收的数据块,数量可能不等。如发送方将 4 个数据块,打包成 2 个发出
    3. TCP 可以同时双向传输

5. 是否提供可靠的传输服务

接收方收到并确认无误后,会给发送方返回一个确认报文。如果发送方没有收到确认报文,会进行超时重发,直到(事实上有上限次数)收到接收端的确认报文。

TCP 会严格控制传输的正确性,一旦有某一个数据对端没有收到,就会停止下来直到对端收到这个数据。

6. 首部开销

对于 TCP 头部来说,以下几个字段是很重要的

  • 32 位序号 Sequence number,这个序号保证了 TCP 传输的报文都是有序的,对端可以通过序号顺序的拼接报文
  • 确认序号 Acknowledgement Number,这个序号表示数据接收端期望接收的下一个字节的编号是多少,同时也表示上一个序号的数据已经收到
  • 窗口大小 Window Size,表示还能接收多少字节的数据,用于流量控制
  • 标识符

    • URG=1:该字段为一表示本数据报的数据部分包含紧急信息,是一个高优先级数据报文,此时紧急指针有效。紧急数据一定位于当前数据包数据部分的最前面,紧急指针标明了紧急数据的尾部。
    • ACK=1: 确认标志位 ,该字段为一表示确认序号字段有效。此外,TCP 还规定在连接建立后传送的所有报文段都必须把 ACK 置为一。
    • PSH=1:该字段为一表示接收端应该立即将数据 push 给应用层,而不是等到缓冲区满后再提交。
    • RST=1:该字段为一表示当前 TCP 连接出现严重问题,可能需要重新建立 TCP 连接,也可以用于拒绝非法的报文段和拒绝连接请求。
    • SYN=1: 请求或应答标志位 ,当 SYN=1,ACK= 0 时,表示当前报文段是一个连接请求报文。当 SYN=1,ACK= 1 时,表示当前报文段是一个同意建立连接的应答报文。
    • FIN=1: 结束标志位 ,该字段为一表示此报文段是一个释放连接的请求报文。

7. 三次握手

  1. 第一次:客户端 -> 服务端

    包含字段 字段值 说明
    随机生成 Sequence number 随机生成 假设 10000 返回 Seq 需从 10000 开始
    SYN 标志位 1
  2. 第二次:服务端 -> 客户端

    包含字段 字段值 说明
    Sequence 假设 20000
    SYN 标志位 1
    ACK 标志位 1 确认消息有效
    确认序号 Acknowledgement12345 确认序号段有效

    客户端:已经知道我发送的消息,服务端可以收到

    服务端:不知道我发送的消息,客户端是否可以收到

  3. 第三次:客户端 -> 服务端

    包含字段 字段值 说明
    ACK 标志位 1
    确认序号 Acknowledgement20001

整个过程叫双工

8. 四次挥手

  1. 客户端 -> 服务端

    包含字段 字段值 说明
    FIN1
    Sequence25368
  2. 服务端 -> 客户端

    包含字段 字段值 说明
    Acknowledgement25639
    ACK1

    服务端首先响应客户端断开请求,可能这时候有别的数据请求正在处理

  3. 服务端 -> 客户端

    包含字段 字段值 说明
    Sequence10568
    FIN1

    客户端知道,可以断开了

  4. 客户端 -> 服务端

    包含字段 字段值 说明
    ACK1
    Acknowledge20569

    服务端知道,可以断开了

​ TCP/IP 协议是传输层的一个面向连接的安全可靠的一个传输协议,三次握手的机制是为了保证能建立一个安全可靠的连接,那么第一次握手是由客户端发起,客户端会向服务端发送一个报文,在报文里面:SYN 标志位置为 1,表示发起新的连接。当服务端收到这个报文之后就知道客户端要和我建立一个新的连接,于是服务端就向客户端发送一个确认消息包,在这个消息包里面:ack 标志位置为 1,表示确认客户端发起的第一次连接请求。以上两次握手之后,对于客户端而言:已经明确了我既能给服务端成功发消息,也能成功收到服务端的响应。但是对于服务端而言:两次握手是不够的,因为到目前为止,服务端只知道一件事,客户端发给我的消息我能收到,但是我响应给客户端的消息,客户端能不能收到我是不知道的。所以,还需要进行第三次握手,第三次握手就是当客户端收到服务端发送的确认响应报文之后,还要继续去给服务端进行回应,也是一个 ack 标志位置 1 的确认消息。通过以上三次连接,不管是客户端还是服务端,都知道我既能给对方发送消息,也能收到对方的响应。那么,这个连接就被安全的建了。

UDP 和 TCP 区别

UDPTCP
命名 User Datagram Protocol 用户数据报协议 Transmission Control Protocol 传输控制协议
有无连接 随时发送数据,无需连接 三次握手建立连接 -> 数据传输 -> 四次挥手释放连接
通信方式 单播、多播、广播 单播
对应用层报文的处理 发送时直接添加首部。接收时直接除去首部。纯面向报文 发送方将数据块分割并存储在缓存,根据策略提取一定量字节,添加首部发送。接收方提取 TCP 报文中的数据并存储在缓存,将缓存中一部分字节流交给应用进程。纯面向字节流。
是否提供可靠的传输服务 因无连接,提供的是不可靠服务。即,UDP 发送方不会在意误码、丢包,接收方不做任何处理,只管接受 接收方收到并确认无误后,会给发送方返回一个确认报文。如果发送方没有收到确认报文,会进行超时重发,直到(事实上有上限次数)收到接收端的确认报文。
首部开销 四个字段,每个字段 2 字节。共 8 字节 由于 TCP 需要实现可靠传输、流量控制和拥塞控制等服务,首部比较复杂。TCP 的首部包括 20 字节的固定首部,以及最多 40 字节的拓展首部

References

计算机网络面试必考点:TCP 和 UDP

【深度讲解 + 面试回答】tcp/ip 协议三次握手、四次挥手,通俗易懂,

正文完
 0