快捷搜索:  汽车  科技

tcpudp协议详解:TCP和UDP协议还没搞懂

tcpudp协议详解:TCP和UDP协议还没搞懂TCP适用场景:UDP协议指的是用户数据报协议,是一种不可靠无连接、实时性高的协议,在数据发送前,不需要提前建立连接,所以可以更高效地传输数据。但可靠性无法保证,如第一张图所示,UDP只管把“孩子”送出去,接受者有没有收到也不管。TCP连接建立:三次握手TCP连接释放:四次挥手TCP适用场景:

如果想要愉快地进行上网冲浪、聊天、视频通话,那么有两个网络协议你不得不知道——tcp(Transmission Control Protocol)和UDP(User Datagram Protocol)。

(本文共1614字,仔细阅读需要花5分钟,理解吃透需要10分钟,如果暂时没那么多时间,可以先收藏起来有空再看~)

TCP和UDP最核心的区别是什么?看这下面这张图你就知道了

tcpudp协议详解:TCP和UDP协议还没搞懂(1)

TCP协议指的是传输控制协议,是一个面向连接的传输协议,他是一个能提供高可靠性的通信协议,所谓高可靠性指的是数据无丢失、数据无误、数据无失序、数据无重到达。就像图上所示,TCP能把“孩子”安全地送到接收者手上。

TCP连接建立:三次握手

tcpudp协议详解:TCP和UDP协议还没搞懂(2)

TCP连接释放:四次挥手

tcpudp协议详解:TCP和UDP协议还没搞懂(3)

TCP适用场景:

  • 适用于对传输质量要求较高,以及传输大量数据的通信场景(如文件传输)。
  • 在需要传输可靠数据的场合通常会选择使用TCP通信协议。
  • 比如QQ/微信/支付宝等通信软件的账户登录和支付相关功能是通常采用可靠的TCP通信协议来实现。

UDP协议指的是用户数据报协议,是一种不可靠无连接、实时性高的协议,在数据发送前,不需要提前建立连接,所以可以更高效地传输数据。但可靠性无法保证,如第一张图所示,UDP只管把“孩子”送出去,接受者有没有收到也不管。

tcpudp协议详解:TCP和UDP协议还没搞懂(4)

TCP适用场景:

  • 发送小尺寸地数据(例如对DNS服务器进行地址查询或路游器更新路由表)
  • 在收到数据,给出应答比较困难地网络中适用UDP(比如无线网络)
  • 适用于广播/组播式通信。
  • QQ/微信等即时通信软件地点对点通讯以及音视频通话时。
  • 流媒体、VoIOP、IPTV等网络多媒体服务中(直播间)

看完这两个协议的概念、优缺点以及适用场景,有一些小伙伴可能会有一些疑问。

UDP不是不可靠吗?为什么QQ发信息用的是UDP 不怕信息对方没收到吗?

答:QQ虽然是用UDP发送信息,但是其实QQ在后台是用TCP与服务器相连的。对于利用UDP发出去的信息,服务器有一套机制保证信息不会丢失。事实上我们在后面也可以自己设计类似的机制:比如我和你通过UDP收发信息,约定下线之前会相互通知,我收到你的信息之后我会给你回一个“确认收到的信息”。

如果你给我发了一个信息,等待了好久都没有收到我的“确认收到”,我也没有给你发“下线通知”,那就代表这个数据包很可能已经丢失了,你要重新给我再发一次。自行设计类似这种的UDP应答机制,可以保证一定的可靠性。

tcpudp协议详解:TCP和UDP协议还没搞懂(5)

UDP不是不可靠吗?为什么音视频通话用的是UDP?

首先要解答这个问题,我们首先要知道声音是如何由麦克风输入到网络中传播的。声音通过麦克风采样、量化(模数转换,位数越高还原越好,一般设备是16位)、编码成二进制数据之后输入到对应的设备文件中,然后对应的软件会从该设备文件中一次一次遵循MTU的容量标准读取一定字节的数据并封装成UDP包发送出去。

人说话的时候声音的频率是300hz~3400hz 而我们耳朵听力范围是20hz~20000hz。根据奈奎斯特采样定律,当采样频率大于信号中最高频率的2倍时,采样之后的数字信号完整地保留了原始信号中的信息。也就是说实际上采样频率为6800hz(一秒钟采样6800次)就已经够我们听清楚对方在说些什么了,为了保证一定的容错率,一般最低采样频率为8khz。

tcpudp协议详解:TCP和UDP协议还没搞懂(6)

而人耳听力极限为20khz,也就是说当采样频率大于40khz的时候理论上我们人耳已经分辨不出和原声的区别了,抽样频率44100Hz则是理论上的CD音质界限了。

我们平时通过网络进行语言聊天显然不需要CD音质那么高的要求(如果你是和周杰伦、陈奕迅打电话则另说),8khz已经够满足我们的日常需求了。

如果采样频率从是8khz,采样位数为16位,假设一个包携带的用户数据大小为548字节(在Internet环境下 将UDP数据控制在548字节以下最理想),也就是一秒钟可以生成30个UDP包。即使网络非常不好,出现了部分丢包的情况,也能勉强知道对方在说什么。

同理在线视频聊天也是如此,丢了几个包可能就是画质没那么清晰、没那么顺畅,但实时性高其实并不太影响我们日常使用。

如果用tcp进行聊天的话,因为它效率非常低。很有可能你女朋友和你说她吃完饭准备洗澡了,电话这头的你还是以为女朋友在吃饭(tcp传输效率低,导致延迟很高)。

那么本文章就先到这里,原本还想给大家介绍一下socket套接字的,由于一不小心篇幅拉太长了只能推到下一篇文章介绍了。关于网络编程后面还有几篇文章,想入门的朋友可以关注以便获取最新的文章推送。

猜您喜欢: