采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好,我对UDP的最大长度不是很理解,length字段是16位,为什么可存储的长度就是2^16-1=65535个字节呢,为什么单位是字节不是其他的呢,这点我想不太明白
嗯,这个我一个个解释哈。
首先传递的数据在java中就是最基本的byte数组集合。每一个就是一个byte,而一个byte就是一个字节。所以我们常说字节。
然后我们需要明确一个byte是一个字节,一个字节就是8位。2个byte就是16位。
在udp传输的底层是把我们要发送的数据和头数据拼接后一起发送,而头字节是2个byte。
这里我们可以理解,当我们需要发送8个字节时,实际上发送了10个字节。
此时前面2字节是udp为我们加的,也就是2+8的结构。在这2个字节中存储了后面数据区的数据长度。当我们发送8字节在前2字节就存储了8这个值进去。
关于如何存储进去的我们不做讨论,可以看我的手记。
正因为前面2字节存储的数据区的长度值,而2字节是16位,可以存储的长度最大值就可以得到了。
2^16-1
length字段16位,表示这个length的值(2进制)最大是 1111 1111 1111 1111,转换为10进制就是65535,
而length是用来表示数据的长度的,其单位是字节,因此UDP的单个包最大长度是65535 - 8
登录后可查看更多问答,登录/注册
理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选
2.7k 1
1.8k 7
1.7k 5
1.9k 13
1.1k 13