当前位置: 首页 > news >正文

网络原理03

回顾

应用层:应用程序,数据具体如何使用

传输层:关注起点和终点

网络层:关注路径规划

数据链路层:关注相邻节点的转发

物理层:硬件设备

应用层

应用程序

在应用层,很多时候,都是程序员“自定义”应用层协议的(当然有一些现成的协议)

1. 根据需求,明确要传输的信息

2. 约定好信息按照什么格式来组织

常见的文件组织格式

1. xml

早期的数据组织格式,现在很少使用

通过标签来组织数据

<request>

      <userId>1000</userId>

      <position>100,30</position>

</request>    

让数据的可读性变得更好了,但书写起来非常繁琐,传输时也占用更多网络带宽

HTML 也是这种标签式的数据,属于 xml 的变种

xml 是一个通用的数据格式,包含什么标签,标签的名字,标签的含义,都是自定义的

HTML是一个专属的数据格式,上述的属性都有一个标准委员会,规定好的

2. json

键值对结构:

{} 把所有的键值对给包裹起来

键值对之间,使用 “,” 分割

键和值之间,使用 “:” 分割

键固定就是String类型

值可以是数字,字符串,json,数组...

由于json的key固定就是字符串类型,可以把key的引号省略掉

{  

  userId:"1000",

  position:"100,30"

}

json的可读性比较好,比xml简洁

在网络传输过程中会额外消耗网络带宽(key也需要传输)

3. protobuffer

protobuffer (pb)使用二进制组织数据,可以保证带宽占用最低(相当于是把要传输的信息按照二进制形式压缩了)

占用带宽最低,传输效率最高,适合对性能要求较高的场景

可读性不好,影响开发效率

传输层

UDP:无连接,不可靠,面向数据包,全双工

TCP:有连接,可靠传输,面向字节流,全双工

端口号

写一个服务器,必须手动指定一个端口号,通过当前的端口号来区分当前主机上的不同的应用程序

写一个客户端,客户端在通信的时候也会有一个端口号(代码中感受不到),系统自动分配

端口号,固定就是占2个字节,表示的范围是0—>65535,。一般来说,0是不用的

1—>1023 知名端口号

1024—>65535 普通端口号

UDP协议

源端口号目的端口号UDP报文长度UDP校验和

UDP载荷数据部分

                       ————————     UDP报头      ———————    

报头分为四部分,每部分2字节

报头和载荷之间,可以认为认为是“字符串拼接”,当然这里是二进制的数据

UDP载荷(payload)数据部分——>完整的应用层数据报

1)源IP,目的IP在网络层(IP协议里)

2)报文长度

2个字节,16位表示的数据,表示的范围是0—65535(64kb)

UDP数据报最长就是64kb

3)校验和(checksum)

本质上是一个字符串,体积比原先的数据要小,通过原先的数据生成

原始数据相同,得到的校验和一定相同

反之得到的校验和相同,原数据大概路相同(理论上存在,概率极低)

1. 发送方,把要发送的数据整理好data1,通过一定的算法,得到校验和checksum1

2. 发送方把data1和checksum1一起通过网络发送出去

3. 接收方收到数据,收到的数据为data2,数据checksum1

4. 接收方根据data2重新计算校验和,得到checksum2

5. 对比checksum1和checksum2

计算校验和的方法有很多,此处UDP使用的是CRC算法(循环冗余算法)

把当前计算校验和的数据,每个字节,进行累加,把结果保存到这两个字节的变量中,累加过程中溢出也没有问题

此外还有,md5/sha1 算法

此处只介绍 md5:

这里有一系列的公式,来完成 md5 计算 

1. 定长:无论原始数据多长,得到的md5都是固定长度

2. 分散:给定两个原始数据,哪怕原始数据绝大部分形同,只要其中一个字节不同,得到的md5值就相差很大

3:不可逆:

计算md5很容易,还原出原始的数据所需的算力超过极限

基于UDP的应用层协议

NFS:网络文件系统

TFTP:简单文件传输协议

DHCP:动态主机配置协议

BOOTH:启动协议(用于无盘设备启动)

DNS:域名解析协议

有些应用层协议,基于UDP实现的并不算多,相比于UDP,TCP更占据优势,优先使用

TCP协议

数据报 = 首部(报头header) + 载荷

1)16位源端口号,16位目的端口号,和UDP相同

2)头部长度

TCP 报头的长度是不固定的(变长),最短是20字节(没有选项),最长是60字节(选项最长是40字节)

4 bit  此处的单位是字节(选项是四个字节一个单位的)

3)保留

线子线不适用,占个位置(留下了扩展的余地)

4)选项(option)可选的

5)16位校验和  和UDP一样

http://www.lryc.cn/news/502506.html

相关文章:

  • 每天40分玩转Django:简介和环境搭建
  • 【蓝桥杯最新板】蓝桥杯嵌入式液晶上实现电子时钟
  • 【机器学习】基础知识:拟合度(Goodness of Fit)
  • 使用Jackson库在Java应用程序中将Map对象转换为JSON数组字符串,以及反向操作
  • 深入解析强化学习中的 Generalized Advantage Estimation (GAE)
  • 离开wordpress
  • Python的3D可视化库【vedo】1-4 (visual模块) 体素可视化、光照控制、Actor2D对象
  • 使用html和JavaScript实现一个简易的物业管理系统
  • 什么是纯虚函数?什么是抽象类?纯虚函数和抽象类在面向对象编程中的意义是什么?
  • #Ts篇: Record<string, number> 是 TypeScript 中的一种类型定义,它表示一个键值对集合
  • Exp 智能协同管理系统前端首页框架开发
  • C# 备份文件夹
  • 互联网信息泄露与安全扫描工具汇总
  • 主导极点,传递函数零极点与时域模态
  • 永恒之蓝漏洞利用什么端口
  • 网络安全与防范
  • Navicat 17 功能简介 | SQL 开发
  • 嵌入式系统中的并行编程模型:汇总解析与应用
  • VulkanSamples编译记录
  • 使用FabricJS对大图像应用滤镜(巨坑)
  • 网页502 Bad Gateway nginx1.20.1报错与解决方法
  • Spring基础分析02-BeanFactory与ApplicationContext
  • Rerender A Video 技术浅析(五):对象移除与自动配色
  • Java项目实战II基于微信小程序的小区租拼车管理信息系统 (开发文档+数据库+源码)
  • 【数字花园】数字花园(个人网站、博客)搭建经历汇总教程
  • WebRTC服务质量(03)- RTCP协议
  • STM32F103单片机HAL库串口通信卡死问题解决方法
  • Scala正则表达式
  • 每日一刷——二叉树的构建——12.12
  • Redis配置文件中 supervised指令