UDP协议

目录

端口号

UDP协议

特点

无连接

不可靠传输

面向数据报

全双工

UDP协议的报文结构

校验和

校验和存在的意义

知名校验和算法

1.CRC

2.MD5

3.SHA1


端口号

在认识Udp协议之前,我们要先知道什么是端口号.

在TCP和UDP 协议报头中都会包含源端口和目的端口,这两个协议中的端口号都是使用两个字节来表示的.

2个字节,16 个bit位,所以一个端口号的取值范围是0->65535.

端口号起到的效果就是区分一个主机上的具体的应用程序的,要求就是在同一个主机上,一个端口号不能被多个进程绑定.

端口号也是传输层协议的概念.

我们自己在写程序的时候,绑定的端口号,得是从1024起的.

0->1023范围的端口,称之为是"知名端口号"或者是"具名端口号",因为这些端口号是已经分配给了一些知名的广泛使用的应用程序.

那么再写代码的时候如果非要指定一个1023以内的端口号就必须满足两个条件:

1.先确定要绑定的端口号确实没有程序在绑定.

2.确保你有管理员权限.

1023以下的端口,也不是完全不能用,只是不建议去用,这些端口虽然被分配给了特定程序,但是这个程序在你的电脑上是否在运行着,电脑上是否安装了这些程序,都是不确定的.


UDP协议

特点

无连接,不可靠传输,面向数据报,全双工.

无连接

知道对端的IP和端口号就直接进行传输,不需要建立连接.

不可靠传输

没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息

面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并.

全双工

UDPsocket既能读,也能写,可以双向传输.

 

 

UDP协议的报文结构

 教科书上的结构都是这样画的,但是实际上的结构不是这样的,因为排版所以变形了.

真正的报文结构应该是这样的:

结构是由报头部分+载荷部分构成.

2字节的源端口 发送方的端口

2字节的目的端口 接收方的端口

2字节的UDP报文长度

2字节的校验和

UDP会把载荷数据(就是通过 UDP Socket,也就是send方法拿来的数据,基础上再在前面拼接上几个字节的报头,此处类似于字符串的拼接,但此处是二进制的,不是文本的)

报头一共4个部分,一共8个字节,每个部分两个字节.

16位UDP长度,2个字节,最大能够表示64KB,那就说明了一个UDP数据报最大只能传输64KB的数据.

那如果应用层数据报,超过了64KB,怎么办?

1.需要在应用层,通过代码的方式针对应用层数据报进行手动的分包,拆包成多个包,通过多个UDP数据报进行传输.(本来 send一次,现在需要多次了)

2.不用UDP,换成TCP,TCP没有这样的限制.

校验和

作用是验证传输的数据是否是正常的.

校验和存在的意义

网络传输过程中,可能会受到一些干扰(网络传输本质上就是光信号/电信号的传输,这些可能会收到物理环境的影响,像电场/磁场/高能射线等等),在这些干扰下就有可能会出现"比特翻转"的情况.(0->1,1->0)

一旦数据发生改变,对于数据的含义,可能会产生极大的影响.

这些现象都是客观存在的,不可避免的,我们能做的就是,及时识别出当前的数据是否出现了问题.

所以,我们就引入了校验和来进行鉴定.

校验和原理

针对传输的数据内容进行一系列的数学运算,得到一个比较短的结果(比如两个字节),如果数据内容一定,得到的校验和就是一定的,如果数据变了,那么校验和也就变了.

如果数据内容相同,那么得到的校验和一定相同;校验和相同,原始内容不相同,出现这种情况的概率是极小的.所以在工程实践中,这种情况就忽略不计了,一般认为,校验和相同,数据内容就是相同的.

知名校验和算法

 对于网络数据传输来说,生成校验和的算法有很多种.

其中比较知名的:

1.CRC

循环冗余校验,简单粗暴,把数据的每个字节,循环往上累加,如果累加溢出,那就舍弃高位.

这种算法比较好算,但是校验的效果不是特别的理想,万一数据同时变动了两个bit位(前一个字节少1,后一个字节多1),就会出现内容变了,CRC没变这样的情况.

2.MD5

MD5不是简单相加,而是有一系列的公式,来进行更为复杂的数学运算.

此算法的特点:

1)定长 

无论你原始的数据有多长,得到的MD5的值都是固定长度(有4字节版本,8字节版本)

2)冲突概率很小

原始数据哪怕只变动一个地方,算出来的MD5的值都会差别很大.

3)不可逆

通过原始数据计算MD5,很容易,但是通过MD5还原成原始数据(找到是哪个数据生成了这个MD5)是非常困难的,理论上是不可实现的,计算量非常之大.

MD5这样的特点,就使MD5诞生了一下的作用:

a.校验和

b.作为计算hash值的方式

c.加密

3.SHA1

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值