路漫漫其修远兮,吾将上下而求索。
目录
一:应用层
1:如何自定义协议
1:先有某个需求,某个场景
eg:以点外卖为例,当我们打开外卖软件时,显示商家列表,列表中有很多项,每一项包含商家的很多信息(商家的名称,商家的地址,好评率等信息......)
在此过程中,需要客户端给服务器发送一个请求,`服务器再接收到请求后,给客户端返回一个响应.
2:根据需求做出设计
1:明确请求和响应包含哪些信息
请求:用户身份,用户地址......
响应:包含商家的若干信息
2:明确请求和响应的格式
请求: 1234,80 100\n====>(用户的身份,用户的地址等若干信息)
响应:魏家凉皮,1.jpg,1km,4.7
麻辣烫,2.JPG,4km,4.5\n
(商家的名称,商家的图片,商家的距离,商家的好评率)
对于上述约定,请求和响应数据是非常灵活的,只要保证,客户端和服务器遵守同一约定!!!
*我们不难发现,无论是请求还是响应,都是以特定的二进制字符串进行传输的.
*以请求为例:我们将用户的ID,用户的地址以逗号隔开,按照这样的方式构造成一个字符串,这个字符串后续可以按照UDP/TCP协议的载荷进行传输信息.将此类信息发送给服务器,即特定的二进制字符串.
*以响应为例:商家的名称,商家的图片,商家距离用户的地址,商家的好评率,这些有关商家的信息都是以逗号隔开,按照这样的格式,作为UDP/TCP载荷传输信息.将上面的信息以特定的二进制字符串通过服务器传递给字符串.
网络上,传输的数据都是以二进制的字符串进行传输的.
JAVA写代码,都是各种对象,如之前所说,网络上,都是以二进制字符串进行传输的,那么如何传输,下面我们来了解两种新的概念:
序列化:将JAVA中的各种对象在发送数据的时候转化成二进制字符串.
反序列化:在接收数据的时候,将二进制字符串转化成Java中的各种对象
3:常用的几种协议格式
a:XML
b:json
c:protobuffer
二:传输层
1:UDP的特点
特点:无连接,不可靠传输,面向数据报传输,全双工
2:UDP协议报文格式
1:对于UDP协议报文格式,主要由两部分组成:
UDP协议报头:(源端口,目的端口,16位UDP报文长度,校验和)
UDP协议载荷:即从应用层传进来的应用层的二进制字符串
2:UDP协议报头
源端口:发送方的端口号=====占2个字节
目的端口:接收方的端口号===占2个字节
16位UDP报文长度:服务器之间传输数据的长度 ==占2个字节
校验和:检验数据的个数是否一致,和数据的内容是否一致。==占2个字节
3:合法的端口号
由于端口号占2个字节,那么端口号的范围为多少?
0-65535,在端口号规定中,0可以不用被算做端口号,1-1024被赋予了特定的含义,所以我们在使用的时候,一般不用1-1024这里面的端口号。在1-1024中,我们必须知道的端口号有 http:80 https:443.同时,在前面学习数据库中,数据库默认端口号是3306。我们可以使用1024之后的端口号。
4:校验和
a:为什么会在UDP数据报的报头出现校验和
原因:网络传输介质的衰减,电磁干扰; 网络设备:防火墙、路由器等的性能问题等影响,可能会导致数据在传输过程中,导致出现问题,因此,我们需要对从发送方到接收方的通信进行校验。
b:校验和的作用
作用:检验数据的个数是否一致,同时检验数据的内容是否正确。
c:校验和怎样实现的?
校验和在底部使用了CRC校验算法。
------------------------------------------------未完待续-------------------------------------------------------------