四川网站建设公司,宝坻网站建设,企业官网定制,各种浏览器的网址目录
前言#xff1a;
再谈协议
UDP协议 比较知名的校验和
小结#xff1a; 前言#xff1a; UDP和TCP作为传输层非常知名的两个协议#xff0c;那么将数据从应用层到传输层数据是怎样进行打包的#xff1f;具体都会增加一些什么样的报头#xff0c;下面内容详细介绍…目录
前言
再谈协议
UDP协议 比较知名的校验和
小结 前言 UDP和TCP作为传输层非常知名的两个协议那么将数据从应用层到传输层数据是怎样进行打包的具体都会增加一些什么样的报头下面内容详细介绍。
再谈协议 所谓协议就是双方约定的一种数据组织的格式。发送方按照约定来将数据进行封装接收方同样也按照这样的格式进行解析。UDP是传输层协议而上面的应用层也有相应的协议。一般应用层协议都是自定义的。 应用层业务是错综复杂的没有办法使用一个大协议去规定所有业务的数据格式很难有一个通用的协议满足所有业务需求。需要根据不同场景不同业务使用相对适合的协议去约定数据的组织格式。
自定义协议首先要明确两点 1结合需求分析清楚请求响应客户端服务器之间要传递哪些数据。 2明确数据以什么样的格式组织。客户端按照这样的协议组织数据服务端同样按照这样格式去解析数据。
典型的数据组织格式 1XML标签化的数据组织方式使用标签来表示键值对用嵌套的方式表示树形结构。 2json现在比较流行的数据组织格式。针对XML进行改进使用大括号的方式来组织。 3protobuffer谷歌研发的一种数据组织格式。二进制数据表示方式针对数据通过二进制表示方式进行压缩。直观的不能观察但是占用空间小传输的带宽就降低了。
UDP协议 UDP协议针对要发送的数据进行封装原始数据称为“载荷”payload。所封装的一些数据称为“报头”。 这张图在一些技术书籍上很常见但实际这样画不是很确切。书上为了排版方便 解释
1 源端口目的端口是一次通信中的五元组之二。指定发送方端口和接收方端口。 由于只有两个字节无符号数范围就是0 -- 65535。因此端口号就需要在这个范围内 0 -- 1023范围内端口号被称为知名端口号就是比较知名的程序使用的端口号。我们在设置端口号不建议使用知名端口号虽然知名端口号并没有全部使用完0 -- 1023范围内的所有端口但是也是很可能产生端口冲突导致程序抛异常。
2 UDP报文长度指的是整个报文的长度。由于两个字节最大表示数据是65535那么UDP报文长度最大也就是64kb。使用UDP一次最大传输64kb大小的报文。 那么如果我们要传输的数据大于64kb呢将报文进行拆包控制每个报文大小在64k以内。或者直接将UDP协议改为TCP协议传输。
3 校验和验证数据传输是否正确。高电平或者低电平波长大的光信号或者波长小的光信号表示1和0由于物理原因可能存在“比特位反转”0变1或者1变0。那么传输的数据就会有很大的差别。 校验和就是针对数据进行一系列数学运算得到一个数字如果数据不一致得到的数字也不一致。在数据发送时也将校验和发送过去然后得到的数据再进行一次校验和计算比较这次计算的校验和和发送的校验和看是否一致。这样就能判断数据是否发送正确。 比较知名的校验和
1CRC循环冗余校验 简单粗暴把数据的每个字节循环往上累加。如果累加溢出了高位就不要了。容易计算但效果不是很理想。想想如果一位1变0一位0变1累加的数据也是不变的就会出现问题。
2MD5 MD5通过一系列公式进行数学计算。
特点 1.定长无论原始数据多长得到的MD5值都是固定长度。 2.冲突概率小原始数据只要变动一小部分计算的MD5值都会差别很大MD5结果更加分散。 3.不可逆通过MD5值还原成始数据这个操作很难计算量非常大。一些简单的数据通过打表的方式可以还原一些。打表就是把常见的转换记录下来然后查表转换。
3SHA1
特点 1.不可以从消息摘要中复原信息。不可逆 2.两个不同的消息不会产生同样的消息摘要所以可以用摘要来校验信息是否正确。
小结 理解封装的过程会对我们进行网络编程有很大促进作用。