目录
[OSI 七层模型](#OSI 七层模型)
[TCP/IP 五层(四层)模型](#TCP/IP 五层(四层)模型)
[认识 MAC 地址](#认识 MAC 地址)
[IP 地址](#IP 地址)
计算机网络发展
独立模式:最开始计算机之间相互独立,每个终端各自持有数据。
网络互联:多台计算机连接在一起,完成数据共享。
局域网 LAN:计算机数量增多,通过交换机和路由器连接在一起。
广域网 WAN: 将远隔千里的计算机都连在一起。
协议
协议分层
为什么要进行协议分层?
协议本质也是软件,在设计上为了更好的进行模块化以及解耦合,因此进行了分层并被设计为层状结构。
OSI 七层模型
- •OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了七层。每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是,它既复杂又不实用,所以我们按照 TCP/IP 五层模型来理解。
TCP/IP 五层(四层)模型
TCP/IP 通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层:负责光/电信号的传递方式。 比如现在以太网通用的网线(双绞 线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
- 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网、无线 LAN 等标准。交换机(Switch)工作在数据链路层。
- 网络层:负责地址管理和路由选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。 路由器(Router)工作在网络层。
- 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。网络编程主要就是针对应用层。
由于物理层我们考虑的较少,我们只考虑软件相关的内容,因此很多时候我们直接称为
TCP/IP 四层模型。
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器,它实现了从网络层到物理层;
- 对于一台交换机,它实现了从数据链路层到物理层;
- 对于集线器,它只实现了物理层。
但是并不绝对,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的
内容(比如端口转发)。
究竟什么是协议?
关于协议的朴素理解:协议制定了相同的、结构化的数据类型,方便不同主机间的网络通信。因为协议栈是分层的,所以,每层的双方都有协议,同层之间,互相可以认识对方的协议。
bash
ifconfig
网络与操作系统的关系
所有操作系统,只要想入网,就必须遵守 TCP/IP 协议,保证不同主机间的数据通信。
所以操作系统的分层结构属于个性 ,不同操作系统遵守的网络分层结构属于共性。
网络传输基本流程
局域网网络传输流程
首先回答一个问题,两台主机在同一个局域网(以太网为例),能够直接通信?能。
每台主机在局域网上,要有唯一的标识来保证主机的唯一性:MAC 地址。
认识 MAC 地址
- MAC 地址用来识别数据链路层中相连的节点;
- 长度为 48 位,即 6 个字节。 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- MAC 地址在网卡出厂时就确定了,不能修改。MAC 地址通常是唯一的(虚拟机中的 MAC 地址不是真实的 MAC 地址,可能会冲突;也有些网卡支持用户配置 MAC 地址)。
Linux bash 输入以下命令可查看 mac 地址。
bash
ifconfig
局域网(以太网为例)通信原理
- 以太网中,任何时刻,只允许一台机器向网络中发送数据。
- 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞,所有发送数据的主机要进行碰撞检测和碰撞避免。
- 没有交换机的情况下,一个以太网就是一个碰撞域。
- 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac 地址判定。
- 这里可以试着从系统角度来理解局域网通信原理。
以太网和令牌环网都是将局域网看作一个临界资源。
- 以太网是检测到数据碰撞就等会再发数据;
- 令牌环网则是有一个令牌,谁拿到了令牌谁就可以发数据。
初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程:
首先明确一下概念:
- 报文自顶向下交付的过程,要添加每一层的数据首部,这称为封装;自底向上贯穿协议栈,称为解包和分用。
- 首部信息中包含了一些类似于首部有多长,有效载荷有多长,上层协议是什么等信息。
- 解包:将报头和有效载荷进行分离。
- 分用:将自己的有效载荷交付给上层的哪个协议。
- 封装过程中,每个分层接收到上层的报文后,会在头部添加报头。
- 报头部分,就是对应协议层的结构体字段,我们一般叫做报头。
- 除了报头,剩下的叫做有效载荷。
- 所以,报文 = 报头 + 有效载荷。
然后,明确一下不同层的完整报文的叫法:
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理.
最后,给出整体传输流程:
在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自顶向下将数据交付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,再自底向上进行交付。
数据包封装和分用
数据封装流程如下:
数据分用流程如下:
跨网络传输流程
IP 地址
IP 协议有两个版本,IPv4 和 IPv6。后续文章没有特殊说明的,默认都是讨论 IPv4。
- IP 地址是在 IP 协议中,用来标识网络中不同主机的地址;
- 对于 IPv4 来说,IP 地址是一个 4 字节,32 位的整数;
- 我们通常也使用"点分十进制"的字符串表示 IP 地址,例如 192.168.0.1;用点分割的每一个数字表示一个字节,范围是 0 - 255。
IP 网络层存在的意义:提供网络虚拟层,让所有网络都是 IP 网络,屏蔽最底层网络的差异 。
跨网段的主机的数据传输
数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。示意图如下:
为什么给目标主机发数据,先要发给路由器?
当我们向跨网段进行数据传输时,需要给出目的 IP,当目的 IP 不在局域网内,就通过 MAC 地址将数据发给路由器,由路由器对报文进行解释并转发。
结合封装与解包,根据下图重新体现路由器解包和重新封装的特点:
IP 网络的意义和网络通信的宏观流程图如下: