OSI (Open System Interconnection) 开放系统互联模型:设备之间通信交流的一个规范。设备包括但不限于电脑、手机和各种智能设备。
OSI模型的七层划分:
- 应用层(应用层、表示层、会话层)
- 传输层
- 网络层
- 数据链路层
- 物理层
物理层
关键词:物理连接、二进制数据流
两个设备要通信需要进行物理连接,可以是直接连接或者间接连接,可以是有线连接或者无线连接。通道中传输的二进制数据代表了它们通信的内容。
数据链路层
关键词:局域网内通信、广播、以太网协议、网卡、MAC地址
物理连接通道中传输的二进制数据需要按照一定的规则分组解码,负责规范对这些二进制序列分组识别的就是 以太网协议。该协议规定了 数据包 (帧) 由 报头 和 数据 两部分组成。报头中包含了发送者的mac地址、接受者的mac地址和数据类型。数据包的大小在64字节到1518字节之间,超过上限则分片发送。
以太网协议规定所有设备只能通过 网卡 接入以太网,每个网卡都有一个唯一的mac地址,长度为48bits。
以太网协议还规定了设备在所属最小局域网中与其他设备的通信方式——广播。数据链路层实现了在最小局域网中的设备之间通信的方式。源设备将自己的地址和目标设备的地址封装在报头中,然后发送给局域网中的所有设备,其他设备接受到数据包之后检查目标地址是不是自己,不是则丢弃数据包。如果自己是目标设备,则将报头的源地址改为自己,目标地址改为原来的源地址,并且将需要发送的数据封装在数据区,然后将数据包广播到局域网。其他主机收到数据包后同样再次检查目标设备是否是自己,这样就保证了只有需要数据的那个设备才会接收这个数据包。
网络层
关键词:局域网间通信、网关、IP协议、ARP协议
处于不同局域网中的两个设备不能通过 广播 的方式交流数据。每个局域网有个设备专门负责与外界其他局域网通信,不同局域网中的设备通过局域网的管理设备来间接通信。这个负责局域网对外通信的设备就是 网关,例如路由器。
不同的局域网使用 IP地址 进行区分,局域网内的不同设备使用 mac地址 进行区分,IP地址+MAC地址实现了设备在多局域网结构中的唯一定位。
IP协议 规定了数据包的结构:报头+数据。报头由 源IP地址 和 目标IP地址 组成。网络层的数据包会由数据链路层继续封装,封装后的结构为:以太网报头+IP报头+IP数据。
在网络层上,设备跨局域网与其他设备通信就是收发 以太网报头+IP报头+IP数据 结构的数据包,网络层虽然主动封装了自己IP地址和目标设备的IP地址,但是目标设备的MAC地址是未知的。因此在进行通信之前,还需要先知道目标设备的MAC地址,即使用 ARP协议 先发送 ARP包 拿到目标设备的MAC地址。不管是局域网内还是局域网间,都需要先通过ARP协议确定目标设备的MAC地址。
ARP数据包的结构为:
- 源MAC地址:发送数据包设备的MAC地址
- 目标MAC地址:FF:FF:FF:FF:FF:FF
- 源IP地址:发送数据包设备的IP地址???
- 目标IP地址:目标设备的IP地址???
- 数据
ARP协议的报头跟IP协议的报头十分相似,只是目标MAC地址设成了12个F。这是一个功能性的MAC地址,它本身不是一个有效的网卡,只表示这个数据包需要广播。
发送端首先根据目标IP计算目标设备是否与自身处于同一个局域网中。
在局域网内通信时,该数据包被广播给所有设备,只有目标IP才会接受该数据包,并且封装自己的MAC地址后再次广播到局域网。再次广播之后,只有需要数据的设备才会接受数据包,从而拿到他想要的目标设备的MAC地址。
在局域网间通信时,发送端将IP数据包中的目标IP地址修改为目标设备所在网关的IP地址。目标网关接受到数据包后会返回自己的MAC地址。发送端接受到目标网关的数据包后,将原来待发送数据包的目标MAC地址修改为目标网关的MAC地址,目标IP地址仍然是目标设备的IP地址,而不是目标网关的IP地址,然后正常发包。目标网关拿到包后会在局域网中请求数据,然后将包返回给发送端。
传输层
关键词:应用、端口、TCP协议、UDP协议
一台电脑上有多个软件,它们都通过一张网卡与其他设备通信,这样就需要分区哪些数据包是属于哪些软件的。计算机通过 端口 来区分不同应用程序的数据包。传输层规范了端口和端口的通信。
每个端口大小为16bits,所以单个计算机的可用端口数为 $2^{16}=65536$,端口号范围为 0 ~ 65535。
TCP协议和UDP协议是传输层的两个重要协议,它们规定的报头中包含了关于源主机和目标主机的端口信息。TCP数据包和UDP数据包还会继续被网络层和数据链路层封装,最后结构为:
$$
\text{以太网头 - IP头 - TCP头/UDP头 - 数据}
$$
应用层
这里的应用指的是网络通信中对数据结构的一种细分,而不是指计算机本地安装的软件。
一个应用指的是一类软件用相似的方式在网络上组织和交流数据,例如
- SMP用于各种邮箱软件之间通信
- FTP用于各种传输文件的软件之间通信
- ……
不同的数据应该使用不同的 协议 来规定数据应该组织、表示和解读。这些高层的应用程序协议构成了 应用层。
应用层常用的协议有
- DNS: Domain Name System 域名系统
- FTP: File Transfer Protocol 文件传输协议
- SMTP: Simple Mail Transfer Protocol 简单邮件传输协议
- HTTP: HyperText Transfer Protocol 超文本传输协议
- SNMP: Simple Network Management Protocol 简单网络管理协议
- Telnet: 远程登录协议
评论区