本文分别介绍 TCP , UDP 的含义,应用场景,以及两者的区别。

1. TCP与UDP的关系

TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)协议属于传输层协议;TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。两者的区别如下表:

TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠的 不可靠的
应用场合 传输大量的数据 少量数据
速度

2. TCP(Transmission Control Protocol,传输控制协议)

TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送。一个 TCP 连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂。

2.1 TCP 连接:三次握手过程和特点

过程:
(1) 主机 A 通过向主机 B 发送一个含有同步序列号的标志位的数据段给主机B,向主机B 请求建立连接,通过这个数据段,主机 A 告诉主机 B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。
(2) 主机 B 收到主机 A 的请求后,用一个带有确认应答 (ACK) 和同步序列号 (SYN) 标志位的数据段响应主机 A,也告诉主机 A 两件事:
我已经收到你的请求了,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我。
(3) 主机 A 收到这个数据段后,再发送一个确认应答,确认已收到主机 B 的数据段:”我已收到回复,我现在要开始传输实际数据了
这样3次握手就完成了,主机 A 和主机 B 就可以传输数据了。

特点:
(1) 没有应用层的数据。
(2) SYN 这个标志位只有在 TCP 建产连接时才会被置1。
(3) 握手完成后SYN标志位被置0。

2.2 TCP 断开连接:四次握手过程

(1) 当主机 A 完成数据传输后,将控制位 FIN 置1,提出停止 TCP 连接的请求。
(2) 主机 B 收到 FIN 后对其作出响应,确认这一方向上的 TCP 连接将关闭,将ACK置1。
(3) 由主机 B 再提出反方向的关闭请求,将 FIN 置1。
(4) 主机 A 对主机 B 的请求进行确认,将 ACK 置1,双方向的关闭结束。

2.3 名词解析

ACK TCP 报头的控制位之一,对数据进行确认;确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了。比如,确认号为X,则表示前 X-1 个数据段都收到了,只有当 ACK=1 时,确认号才有效,当 ACK=0 时,确认号无效,这时会要求重传数据,保证数据的完整性。
SYN 同步序列号,TCP 建立连接时将这个位置1。
FIN 发送端完成发送任务位,当 TCP 完成数据传输需要断开时,提出断开连接的一方将这位置1。

2.4 总结

由 TCP 连接三次握手和断开连接四次握手可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。

3. UDP(User Data Protocol,用户数据报协议)

UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP 也无法进行流量控制等避免网络拥塞的行为。此外,传输途中如果出现了丢包,UDP 也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能;UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环境。

3.1 使用案例

我们经常使用“ping”命令来测试两台主机之间 TCP/IP 通信是否正常,其实“ping”命令的原理就是向对方主机发送 ICMP 数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包。发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了 UDP 协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

4. TCP 与 UDP 区别总结

  • TCP 面向连接(如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接。
  • TCP 提供可靠的服务,也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付。
  • TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流。UDP 是面向报文的;没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
  • 每一条 TCP 连接只能是点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通信。
  • TCP 首部开销 20 字节;UDP 的首部开销小,只有8个字节。
  • TCP 的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

最后更新: 2018年03月03日 16:51

原始链接: http://blog.minhow.com/2017/01/08/protocol/tcp-udp/

× 请我吃糖~
打赏二维码