本来这个章节应该放在第二节的, 更符合知识从整体往下看的逻辑. 但是考虑到学习的过程是循序渐进的, 我调整了一下. 上一节, 我们学习数据具体在传输中表现的形式. 通过帧数据包裹一层层的上层数据达到传输的能力. 今天我们来学习经典的网络模型分层. 随着时间的推进变迁, 有些层级结构已经被历史遗弃了. 但是仍然需要知道有这么些东西. 我们快来看吧.
章节
Android 与物联网设备通信 - 概念入门 http://www.dajipai.cc/archives/fe5f6231.html
Android 与物联网设备通信 - 数据传递的本质 http://www.dajipai.cc/archives/f1d847c5.html
Android 与物联网设备通信 - 网络模型分层 http://www.dajipai.cc/archives/dcba528a.html
Android 与物联网设备通信 - UDP 协议原理
Android 与物联网设备通信 - TCP 协议原理
Android 与物联网设备通信 - 基于 TCP/IP 自定义报文
Android 与物联网设备通信 - 什么是字节序
Android 与物联网设备通信 - Socket 服务端实现
Android 与物联网设备通信 - Socket 客户端实现
Android 与物联网设备通信 - 利用 UDP 广播来做设备查找
Android 与物联网设备通信 - 实现远程控制 Android 客户端
Android 与物联网设备通信 - Android 做小型服务器
Android 与物联网设备通信 - 调试技巧
Android 与物联网设备通信 - 并行串行与队列
Android 与物联网设备通信 - 数据安全
Android 与物联网设备通信 - 心跳
目录
OSI 模型结构
你该把焦点放在哪里
OSI 模型结构
网络模型分层结构又称 OSI 模型(Open System Interconnection Reference Model).
我非常不想像往常你看到的文章一样, 给你贴上来七层是哪几层. 四层又是哪几层. 枯燥无味, 看完过两天又忘记. 遵循知识是具有关联性来学习. 熟悉的老司机们我们就当复习或者跳过好了.
从上往下七层结构分别是:
应用层, 表达层, 会话层, 传输层, 网络层, 数据链路层, 物理层
我们现在从底层至上来看看. 每个层都在做什么事情.
物理层(Physical Layer)
还记得上一节讲到的数字信号么? 它就是第一层物理层.
即: 比特信号, 在物理介质中传输. 物理层上不关注任何上层协议和结构, 对于该层而言就是任性的为所欲为往外输出和接受.
通俗来说就像现实世界中的马路一样, 每条路都可以四通八达到枢纽, 车就是比特信号. 马路从来不管车子里坐的是宝马车上爱哭的她, 还是摩托车上放 DJ 的你.
对应的物理层介质:
RJ-45 光钎 网卡 双绞线 以太网 调制解调器 电力线通信 同步光网络 光导纤维 同轴电缆 等
数据链路层(Data Link Layer)
数据链路层其实就是对我们上一节讲到的数据帧进行处理, 它们表示数据桢内的消息发给谁, 谁需要关心这一桢数据. 对帧的收发顺序同步管理进行控制. 由于我们的操作系统都是多进程多应用的, 该层并不知道数据是来自哪个应用的, 更不知道内容具体是什么, 他们只负责把数据帧输入输出到对应的单元和把控帧数据质量.
记不清的同学请翻到上一节包数据 MAC 帧.
其中数据链路层又被划分成: 介质访问控制 (MAC) 子层 https://zh.wikipedia.org/wiki/介质访问控制 和逻辑链路控制 https://zh.wikipedia.org/wiki/逻辑链路控制
对应:
ARP GPRS 以太网 WIFI PPP PPPoE 等
网络层(Network Layer)
网络层的工作就是把对应的数据输送到对应目标的 IP 上去, 和数据链路层相比很类似. 但是数据链路层是针对相邻的硬件设备的 MAC 地址单元的. MAC 地址太过于复杂和不好记. 才产生了 IP 层协议, 也就是现在我们说的 OSI 中的网络层. 可以借助以太网 IP 协议将数据发送到以太网以内的任何设备上. 与之相关联的是 IP 数据包报文, 在上一节也有提到.
我们多少都有配置过 IP 的经历, 这里的 IP 配置就和网络层有很大的关联. 正式由于以太网的推进演变导致了这一层被抽象出来了. 如果要把网络层内容完全讲清楚有些超纲, 它依托了路由器, 交换机, 集线器等工作原理. 这里不做硬性规定, 可扩展学习. 当然网络层不仅只有 IP 协议这一种.
对应:
IP(v4.v6) ICMP(v6) IGMP IS-IS IPsec BGP RIP OSPF RARP 等
传输层(Transport Layer)
传输层属于传输控制协议, 比如 TCP,UDP. 它的存在是为了数据的稳定和可靠而设计的. 因为更底层的的协议对于数据包体里本身的内容是不透明的, 如果出现丢包和紊乱的情况是无法知道应用层的数据是否还正确的. 所以就产生了传输层来把控. 现在只要是一台联网的设备系统都会具有操作系统协议栈.
而协议栈就是来保障上层应用的套接字 IP 地址, 进出端口, 数据内存块, 数据包切割, 响应等待, 丢包重发, 组装, 挂起切换等问题. 可以说他负责了各个应用层丢下来的数据在什么时候处理, 对应远程设备回复的包如何输送到当前操作系统上, 再数据进行分拣到对应进程的套接字端口上. 非常类似快递中转站的工作.
对应:
TCP UDP DCCP SCTP RSVP PPTP 等
会话层 (session layer) 已废用
以前是用来做维护管理会话状态的. 比如我们有多条数据, 是一次性全部发过去, 还是一条条发过去. 这个层现在已经废弃不用了. 原因是应用层一般已经做了类似的事情.
表示层 (presentation layer) 已废用
上层数据可能在传输的过程中, 因为不同的操作系统或特殊的需要被转换成了有利于传输, 利于计算机处理, 安全因素等. 表示层这里的意义可以理解为翻译的工作. 和会话层一样也被废弃了.
应用层(application layer)
应用层就是作为应用开发者真正经常要接触的. 它代表着我们的应用自己定义的协议体结构和业务内容. 像 HTTP 这种常见的应用层协议已经被广泛的应用在 web 和各种终端设备中使用了. 它真正决定了一套体系的应用从一端到另一端是如何互相识别的. 关于应用层我们在后续的自定义报文的章节里做详细的讲解.
对应:
HTTP DHCP DNS FTP IMAP4 IRC NNTP XMPP POP3 SIP SMTP SNMP SSH TELNET RPC RTCP RTP RTSP SDP SOAP 等自定义协议
你该把焦点放在哪里
前面提及到了一共七层分法, 实际上只有五层了. 下面我来看看这五层分别对应到完整的报文里是什么.
那么其实我们平时开发只需要关注到传输层和应用层. 它和我们写的程序有真正的关联. 决定了我们的程序是选用那种传输方式和数据结构. 而网络层与链路层一般在物联网开发中属于和运维部署关系较大. 比如无法正常上网了. 在开发环境正常到了线上环境就不正常这种问题. 如果是专门从事物联网方向开发的话, 还是非常有必要了解它们之间的工作原理的. 只是和上层的关联性没有那么强.
网络模型分层是一个非常庞大的体系, 因为要对其系统的解释就必须牵扯到各种设备的工作原理. 我在写这节的时候也是一边翻资料看书参考才能总结出来的, 有地方描述不对还请指出.
本篇文章不够深度, 有些描述可能只是我理解了, 并不能使你理解透彻. 更深的了解需要我们一起看书才行. 这里我推荐网络是怎么样连接 https://item.jd.com/26222331708.html 的一书给读者参考. 当然这并不会影响我们后续的章节学习进度.
来源: https://juejin.im/post/5b17d513f265da6e3e37e0c7