|
网络原理
介绍 TCP/IP
协议中每一层里面的核心内容.
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
应用层
应用层和应用程序密切相关. 不同的应用程序, 里面可能会涉及到不同的应用层协议.
咱们在开发代码的时候相当一部分工作量, 就是在自定义应用层协议.
如何自定义呢?
- 考虑再客户端和服务器之间传输哪些信息 (跟着需求走)
- 考虑信息/ 数据按照啥样格式组织 (跟着需求走)
比如: 在小程序上点奶茶
针对这个程序, 如何自定义协议.
-
明确传输信息
- 请求: 用户的位置(方便客户选择门店), 用户的偏好(加冰? 全糖? 果茶? 奶茶?)
- 响应: 奶茶列表, 包含奶茶种类, 名字, 图片
-
明确数据的格式
网络上传输的数据本质都是
bit
流(一堆二进制位), 也可以把这些数据视为 “字符串”.比如:
-
请求: 位置 经度,纬度; 偏好 芋泥, 葡萄, 布丁.
-
位置信息和偏好信息之间用
;
分割. 位置信息和偏好信息内部的各个部分使用,
来分割.
# 注意 #
格式不一定要这么定义, 不同的应用程序里面 约定的格式都不一定相同. -
小知识:
回显程序, 其实也是需要自定义应用层协议的.
只不过当时的定义的非常简单.
前面定义的 请求是一个字符串, 以 \n
结尾
响应 也是一个字符串, 以 \n
结尾
自定义应用层协议, 尤其是这个数据格式的定义, 太灵活也不好. 就有了一些通用的格式
-
HTTP
是应用层中最最重要, 最最常用的协议了 -
XML
比较典型的数据组织格式, 比较经典古老的格式. (现在用的不多, 但也还是会经常接触到)标签格式, 非常有特点, 是通过 “标签” 的形式来组织 键值对 数据的.
//请求: 位置 经度,纬度; 偏好 芋泥, 葡萄, 布丁. <request> <postion> <longitude>xxx</longitude> <latitude>xxx</latitude> </postion> <perferences> <preference>芋泥</preference> <preference>葡萄</preference> <preference>布丁</preference> </perferences> </request>
HTML 也是标签化的格式, 但是有最本质的区别
- xml 里面的标签名字是自定义的
- html 里面的标签名字都是约定好的
-
JSON
当前最流行的一种数据组织格式. (相当于XML
的替代品)- JSON 首先是一个 { } , { } 里面包含多组键值对. 剑指对之间使用 , 来分隔
- 键和值之间, 使用 : 分隔
- 键只能是字符串类型
- 值可以是字符串, 数字, 数组, JSON
//请求: 位置 经度,纬度; 偏好 芋泥, 葡萄, 布丁. { postion:{ longitude: xxx, latitude: xxx } perferences:[ '芋泥','葡萄','布丁' ] }
JSON 优点:
- 可读性非常好
- 看起来美观整洁
- 扩展性强
JSON 缺点:
引入额外的字符串, 传输数据量变大了, 消耗更多的带宽
-
protobuffer
,这种格式下, 组织出来的数据占用空间比JSON
和XML
都要少, 传输速率有明显提升既是一个数据格式, 同时也是一个库, 来操作这种格式的数据
这个东西是一个二进制的格式, 不太方便人眼观察, 阅读和调试都比较复杂. 更适合于对运行效率要求比较高的场景来使用.
|