陶瓷网站制作,为WordPress添加虚拟用户,微信公众号跳转的网页怎么制作,爱空间装修公司口碑怎么样网络中有很多协议这些协议的不同导致了分层这一现象#xff0c;不同层的主要功能不一样。
应用层#xff1a;应用程序。数据具体如何使用
传输层#xff1a;关注起点和终点
网络层#xff1a;关注路径规划
数据链路层#xff1a;关注相邻节点的转发
物理层#xff1…网络中有很多协议这些协议的不同导致了分层这一现象不同层的主要功能不一样。
应用层应用程序。数据具体如何使用
传输层关注起点和终点
网络层关注路径规划
数据链路层关注相邻节点的转发
物理层硬件设备 应用层
1.根据需求明确要传输的信息
2.约定好信息按照什么格式来组织 和程序员接触最为密切应用程序。在应用层中很多时候程序员会自定义应用层协议的也有一些现成的应用层协议。不要神话自定义协议协议就是规定其规定了数据如何进行传输。
如日常生活中的点外卖会涉及程序和服务器之间进行的网络通信交互当我们点开外卖软件我们其程序读取我们的位置信息之后程序会会发送请求发送我们的位置信息和用户信息一般会有格式对于请求来说这里使用文本的方式。三个属性使用”“来分隔假设程序构造出100010030这样一个字符串组成的代码块将其写入到TCP socket 或者UDP的socket中
商家就会回复一些响应格式和上面一样响应有商家列表商家的名称图片距离简介评分。如
李四麻辣烫图片地址1.2KM麻辣烫性价比之王4.8
王五麻辣香锅图片地址1.0KM,麻辣香锅中的神5。等这样的响应类似这样的过程就是自定义协议。无论使用什么样的格式来进行组织只要客户端和服务器这边能够对应互相回应就好。
这种通过文本的方式构造的协议一般不这样使用开发中常见的几种格式。
1.xml
很早之前组织网络的格式现在很少应用于网络通信maven,会使用其管理项目配置是通过标签来组织数据。并且其是一个通用的数据格式有什么标签标签的作用都可以自己定义。
请求
request userld10000/userld position100,30/position
/request
优势
让数据的可读性变得更好。
劣性
标签写起来非常繁琐传输的时候也占用更多的网络带宽。
2.json(当下最流行的一种数据组织格式)
{ userld:1000, position20,23
}
这种键值对结构{}将所有的键值对包裹起来。键值对之间使用”“来进行分隔键和值之间使用”“来进行分隔键的格式固定为String类型值无所谓。键得分号可以省略。
优势
可读性比较好比xml简洁
劣势
会消耗额外得带宽需要传输键得值
注
虽然如此json在网络通信中仍然非常流行除非是一些对于性能要求比较高得场景不使用jspn之外其余很多地方都可以使用json.
3.protobuffer
于前两个相比其简称pb使用二进制的方式来组织数据。可以保证带宽占用最低将信息以二进制的形式压缩
优势
占用带宽最低传输效率最高适合高性能场景
劣势
可读性差二进制无法直接阅读影响开发效率
应用层也有一些现成的协议。最知名的广泛使用的HTTP协议超文本传输协议超文本不仅是文本还有图片视频音频等
传输层
UDP无连接不可靠传输面向数据报全双工
TCP连接可靠传输面向字节流全双工
端口号
写一个服务器必修手动指定一个端口号通过端口号来区分当前这个主机的不同的应用程序
写一个客户端客户端在通信的时候也会有一个端口号代码感知不到系统自动分配的
端口号固定2个字节表示的范围0~65535一般情况下0不可用。1~1023称为”知名端口号“给比较知名的一些服务器预留的(现在大部分当时知名的服务器已经不适用了仍然在使用的22ssh端口号80http服务器端口号443https服务器端口号使用服务器时也可以不使用这个端口号只是建议),1024~65535普通的端口号 UDP协议 前面分成四个部分每个部分占2个字节。报头和载荷之间可以认为是一个“字符串拼接”这里是二进制的数据。
源IP目的IP不在这里在网络层的IP协议中。
目的端口号后面是UDP报文长度范围是0-65535 是64kb,因此使用UDP时很难表示一个较大的数据报。当一个业务的数据报已经接近64kb就需要要么将数据分成多个包然后多个UDP传输但是开发成本和测试成本比较大拆包以及如何进行组包要么就直接使用TCPTCP没有包的大小限制。
注那么能否对其进行升级将两个字节变为4个字节不行技术上可以实现但是如果升级需要将世界上的所有设备一起升级才可以因为一边升级不行数据无法处理无法进行通信。 UDP报文长度后面是UDP的校验和检验和是什么在网络传输中由于一些外部的干扰可能会导致数据传输出错的情况。光信号/电信号 磁场电场高能离子的干扰下会导致某个地方本来是传输低电平在干扰下会变成高电平造成比特翻转所以就需要来验证数据是否传输错误。校验和就诞生了。
检验和本质上是一个字符串其体积比原始数据更小又通过原始数据生产的原始数据相同得到的校验和一定相同反之校验和相同原始数据大概率相同不同的概论很低。
怎样基于校验和来完成数据校验
1.发送方将要发送的数据整理好data1通过一定的算法计算校验和checksum1
2.发送方将data1和checksum1一起通过网络发送过去
3.接受方收到数据收到的数据称为(data2)可能与数据1不同了收到checksum1
4接收方根据data2重写计算检验和根据相同的算法得到checksum2
5对比checksum1和checksum2是否相同。不同data1和data2一定不同
如果相同data1和data2大概率相同不相同概率很小忽略不计
如果checksum1过来的是错误的那么检查是否和checksum2更不可能相同了
通过这样的方式就能发现数据传输出错 校验和的计算也有很多算法此处UDP使用的是CRC循环冗余算法
把当前要计算校验和的数据每个字节都进行累加把结果保存到这两个字节变量中累加过程中出现溢出没事。如果中间的某个数据出现传输错误第二次计算的校验和和第一次就会不一样。这种不是非常靠谱的导致两个不同的数据得到相同的校验和的概率比较大 。前面的字节少1后面的字节多一。
所以有更厉害的MD5算法和sha1算法这里只介绍MD5算法
MD5算法是需要一系列的公式来将其转化为md5的。
1.MD5定义无论你的数据多长计算得到的MD5都是固定长度。校验和本身就应该不长要不然不方便网络传输。
2.分散给定两个原始数据哪怕绝大部分一样只有一个字节不同得到的MD5值差距都会很大。因为这样的特性其也非常适用于hash算法。
3.不可逆给原始数据计算MD5简单反过来理论不可行反过来计算的话计算量很庞大超出算力极限 UDP特点在代码中感知的到 1.无连接。UDP本身不会存储对端的信息要在发送数据的时候显示指定要传输给谁 DatagramPacket requestPack new DatagramPacket(request.getBytes(),request.length(),InetAddress.getByName(sereveIp),serverPort);//创建一个数据报来传输用户的内容socket.send(requestPack);//向客户端传输
2.不可靠性代码看不出来
3.面向数据报。通过DatagramPacket类的对象构成的数据报进行传输
DatagramPacket requestPack new DatagramPacket(request.getBytes(),request.length(),InetAddress.getByName(sereveIp),serverPort);//创建一个数据报来传输用户的内容socket.send(requestPack);//向客户端传输4.全双工 socket既能传送又能接收 socket.send(requestPack);//向客户端传输DatagramPacket responsePacket new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);//接收客户端返回的响应基于UDP的应用层协议
NFS:网络文件系统
TETP:简单文件传输协议
DHCP:动态主机配置协议 BOOTP:启动协议(用于无盘设备启动)
DNS:域名解析协议
并且包含自己定义实现的。 有一些应用层协议,基于UDP来实现的.其实并不算很多. 相比于UDP来说,TCP在更多的情况下是具有优势的.很多时候,都是优先考虑使用TCP