应用层中最重要的事情就是---->"设计并实现一个应用层协议"
什么叫"设计并实现一个应用层协议"?
举一个例子:
公司让开发一个点外卖的软件,当前要开发一个功能,叫做获取用户订单历史,这样的功能需要涉及到前端(客户端)和后端(服务器)彼此之间的交互.
在这个交互过程中就需要约定好前端发什么样的数据,后端就回对应的数据,即需要规划请求和响应之间要传递的信息
下面这个图中的工作就是在进行第一个---->明确传输的信息
除此之外,我们还需要--->明确数据的组织格式
xml的特点是:
虽然xml提高了可读性,但是又引入了太多的辅助信息(标签名) ,因为要表示这些辅助信息,就导致传输相同数目的请求的时候,占用的网络带宽就更高(网络带块很贵的!)
相比于xml,json同样能保证可读性,同时json又没有xml那么繁琐,占用的宽带也要比xml少
protobuffer应运而生~~~
protobuffer是一种二进制格式的数据,在protobuffer的数据中不再包括像上面json里面的key,而是通过顺序以及一些特殊符号来区分每个字段的含义,同时再通过一个IDL文件来描述这个数据格式(每个部分是什么意思),IDL只起到一个辅助开发的效果,并不真正的进行传输,传输的只是二进制的纯粹的数据
protobuffer格式:
为什么呢,因为开发效率实际上是包含了开发和调试,光论开发的话,protobuffer有IDL,但调试部分,如果线上环境出问题,用json的话,出问题的请求和响应一目了然;但如果用protobuffer就没法肉眼看,就得自己开发一个专门的程序来解析这个数据,分析这里的问题
IP地址不太好记,即使写成了点分十进制的形式,对我们来说也不太友好.因此就使用一串英文单词(就称为域名)来表示这个IP地址.像www.sogou.com就是域名
域名和IP地址之间是一一对应的关系
像下图这样一行就是描述了IP地址和域名的对应关系,后续其他程序(浏览器)中使用这个域名,就会被自动转换成IP地址
但现在hosts文件已经不再使用了,因为全世界的域名太多了,hosts改不过来啊
因此现在就是专门设立一个域名解析服务器,负责维护域名和IP的对应关系
然后全世界各个国家,城市,地区有各自的网络运营商,他们会就近假设域名解析镜像服务器定期和上面说的设立的域名解析服务器进行同步
虽然传输层是操作系统内核实现,和程序员不直接打交道,但是程序员进行网络编程都要用到socket,一旦调用了socket代码就进入到传输层的范畴了~
如果一切顺利还好,但是一旦代码出现bug,我们就需要解决这些bug,因此我们需要知道传输层的知识
另外传输层的协议也是面试中非常爱考的--->TCP协议 (下面一会儿就会讲哦)
把应用层数据报分装成UDP数据报,本质上就是在应用层数据包的基础上添加8个字节的报头 (如下图)
解释下上图中的校验和,校验和是用来验证网络传输的数据是否正确的
进一步解释一下:
网络上传递的数据本质是光信号和电信号,但如果有一些外界干扰,比如磁场,就可能导致原有的一些传递的信息发生了改变.正常一组连续的高频信号,如果遇到一个强磁场就可能导致其中的某些高频信号变成低频,因此我们需要尽可能的识别出数据是不是错了,不能将错就错
下面这个方法可以,但太麻烦,这是下策
我们还有一个上策,就是--->改用TCP,TCP没有这样的长度限制