2021-05-17

TCP与UDP的区别和使用场景?

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

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

区别

简单总结: image.png

一、连接状态

  • TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次握手才能建立起来,同样,断开连接是需要经历四次挥手
  • UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

二、模式

  • TCP是一种流模式的协议 上面有提到过TCP是面向连接的,也就是说,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的(劫持什么的不考虑),因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。

  • UDP数据报模式的协议。 UDP是无连接的协议。 发送端调用了几次write,接收端必须用相同次数的read读完。UPD是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。也就说,如果不指定MSG_PEEK标志,每次读取操作将消耗一个报文。 原因在UDP中,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。

三、结构

  • TCP协议报头结构:比较复杂,所以资源占用较大

image.png

源端口 16位; 目标端口 16位; 序列号 32位; 回应序号 32位; TCP头长度 4位; reserved 6位; 控制代码 6位; 窗口大小 16位; 偏移量 16位; 校验和 16位; 选项 32位(可选);

  • UDP协议报头结构:比较简单,所以资源占用较小 image.png

源端口 16位 目的端口 16位 长度 16位 校验和 16位

四、数据一致性

  • TCP可以保证数据正确性以及数据的传输顺序。
  • UDP可能会丢包,其不能保证数据顺序。

应用场景

什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下:

浏览器
文件传输
Outlook,邮箱
FlashFXP
Putty
...

那么什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 在日常生活中,常见使用UDP协议的应用如下:

QQ语音
QQ视频
TFTP
...

image.png

WRITTEN BY

lidong

鄂ICP备20003892号Copyright © 2017-2023 leedong.cn

ABOUT ME

Hello,这里是「我的心情永不立冬」
一个想到什么就做什么的个人站点,所有内容纯主观、有偏见