UDP和TCP都是应用层中的重要协议,如果做基础架构开发,会用得多一些。
这一篇我们先简单聊一下的UDP
TCP格式呈现:
我们知道UDP是一种无连接,面向数据报,全双工,不可靠传输特性的网络协议。
基本格式如图:
可以这样看:
也可以这样看:
1.源端口和目的端口:我们知道端口号标识了一个主机上进行通信的不同的应用程序,在应用层上的要想进行一次通信,就必须涉及 “五元组”--->源端口,目的端口,源IP,目的IP,协议号这里的源端口和目的端口号,就是应用层的核心内容
2.16位UDP长度:
记录整个UDP数据报的长度,占两个字节
整个UDP数据报长度是64KB。
3.UDP缺点:
我们知道UDP数据报总长度才64kb,现在随便一个图片都好几个MB,虽然UDP传输效率很快,但是存储空间太小。
我们如何传输更大的数据呢?
一般有两个解决方式:
方式一:应用层代码做拆包操作
具体就是,把多个应用层数据报,拆分成多个UDP数据包来传输
方式二:使用没有长度限制的TCP网络协议
4.校验和:
校验数据是否修改的手段
UDP的校验和,是为了防止,传输过程中的比特翻转
比特翻转就是传输过程中,光电信号或者电磁波二进制信号,从0->1, 1->0
5.怎么用校验和来判断是否发生比特翻转呢?
首先发送之前,通过数据包中的数据,先计算好一个校验和,然后把校验和连带整个数据报的数据都发送到对端; 对端通过接受到的数据,再算一遍校验和,一比对,如果发现校验和不一样就发送了比特翻转,就丢弃这个UDP数据报。
补:校验和是通过CRC (循环冗余校验)的简算法来校验的,会有比特翻转其实也是小概率事件。
6.面试时UDP 2种总长度表达:
总长度上限达64kb
UDP携带的荷载长度达64kb上限