传输层协议-UDP数据报

UDP协议的特点

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

面向数据报:是指该协议在传输数据的时候使用的是数据报;

无连接:指的是发送数据不需要两个进程连接在一起,类似生活中我们发送短信,只要直到对方的电话号码就看也发送短信;TCP就是有连接的,只有连接,双方才能交换数据,就像我们打电话,需要对方接通才能说话;

不可靠:指的是我们只管把数据发送出去,不管对方是否一定能接收到;

全双工:指的通信双方都能接收数据和发送数据,在该连接通路,能同时双向传输数据;相对的概念是半双工:能双向传输数据,但是不能同时;

学习一个协议,首先要了解该协议的报文格式,当应用层的数据到达传输层之后,如果使用的是UDP传输协议,就会在数据前加上一个UDP报头,构成一个UDP数据报;

这是一张UDP数据报的报文格式:

但实际真正的在网络传输的过程过的UDP报文格式是这样的:

源端口号   

两个字节,用于记录发生数据的进程的端口号

目的端口号

两个字节,用于记录数据接收方的进程的端口号

UDP长度

UDP长度=报头长度+载荷长度,由于只占两个字节,最大就是65536,单位是字节,也就是64KB;也就是说一个UDP数据报最大就是64KB;但载荷的大小接近64KB,甚至大于64KB,就是考虑数据的传输方式,保证数据传输;

注意事项:

如果数据超过64KB,就需要在应用层将数据进行分段传输,在接收方手动拼接

UDP检验和

用于判断数据传输过程是否发生错误。数据报的记录方式无非就是光信号或者电信号或者电磁波,无论是哪种传输方式,都有可能在传输的过程收到外界的影响导致数据改变,发生错误,最常见的就是发生的比特翻转,0变成1,1变成0,高电平变成低电平,低电平变成高电平,检验和在数据传输之前通过某种计算方法,用载荷数据参与运算,等待数据到达目的端口时,在重新以这种方式计算,将再次计算获得校验和与报头的校验和比较,如果不同,证明传输过程数据发生改变,反之成立;

校验和

第一层:能够判断是否发生错误;(代价低)

第二层:能够直到时哪一位发生了错误,并且能够进行纠错:(代价大,消耗大)

UDP校验和做到了第一步,使用的CRC循环冗余校验,用一个16个比特位的变量,将载荷的每个字节单独拿出来累加,溢出直接舍弃,得到最后的校验和;无论是发生前计算的校验和还是接收到计算的校验和,我们都不关心校验和的具体数值,只关心前后校验和是否相同;

除了CRC,还可以使用md5,md5最初是使用在字符串hash算法,如果key是字符串,通过md5计算,实现字符串映射到数组下标;

md5特点:无论数据多大,通过计算得到的校验和都是定长的,而且只要稍微改变一点,得到的数值就会发生很大的变化,使得能够更加精确快速的判断两个数据是否不同;

md5解密实际就是一个hash表记录了一些常用的字符串以及对应加密后的数值,解密实际就是查表,常用的很容易解密,不常用的就解密不了,md5适合用在只是加密,不解密的场景像银行的密码库记录的是你的密码加密后的数据,不是你真正的密码,每当你是输入密之后,就会通过md5加密计算,再和数据库中的数值比较;

UDP协议的主要用途

高性能传输,可靠性要求不高的场景。像分布式系统,多个服务器之间的通信,多个机器在同一个机房,网络结构简单,带宽充裕;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a添砖Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值