文章目录
- 一. 网络发展史
- 二. IP地址和端口号
- 三. 计算机网络分层
- 1. 什么是网络协议
- 2. OSI七层网络模型
- 3. TCP/IP五层网络模型
- 4. 数据在各个层的传输过程
- 5. 网络设备所在分层
一. 网络发展史
🍂独立模式(单机模式)
我们最初的计算机是在单机模式下使用的, 此时的计算机是没有连接网络的, 也就是我们的计算机之间是相互独立, 是没有办法进行设备之间的通信的.
🍂网络互联
随着时代的发展, 越来越需要计算机之间互相通信, 共享软件和数据, 即以多个计算机协同工作来完成业务, 就有了网络互连.
网络互连: 将多台计算机连接在一起, 完成数据共享, 数据共享本质是网络数据传输, 即计算机之间通过网络来传输数据, 也称为网络通信.
根据网络互连的规模不同, 可以划分为局域网和广域网.
局域网和广域网区分的主要网络的覆盖面, 广域网比比局域网的网络覆盖面更广泛, 比如全世界最大的广域网就是因特网, 再缩小范围, 只有一个城市组成的网络, 就是一个局域网, 网络的覆盖面是相对的, 其实这两者之间并没有一个明确的界限.
🍂 局域网LAN
局域网, 即 Local Area Network, 简称LAN
, 局域网是本地, 局部组建的一种私有网络.
局域网把—些设备通过交换机和路由器连接到—起(设备之间不能离得太远), 使得局域网内的主机之间能方便的进行网络通信, 局域网又称为内网, 局域网和局域网之间在没有连接的情况下, 是无法通信的.
🍂广域网WAN
广域网, 即 Wide Area Network, 简称WAN
, 通过路由器, 将多个局域网连接起来, 在物理上组成很大范围的网络, 就形成了广域网, 广域网内部的局域网都属于其子网.
🍂组建网络的设备
最初局域网之间的设备只是简单的使用网线, 集线器和网口来进行简单的连接, 这种方式也比较古老了, 可以想象如果大范围的使用这种方式来进行网络连接明显是不可取的; 所以随之又有了交换机, 将一些电脑都连接到这一台交换机上就能实现这些计算机之间的通信, 这就算是组成了一个简单的局域网, 但此时还不能进行跨局域网通信, 所以又有了路由器, 路由器可以把两个局域网给连起来, 生活中更常见也是通过路由器进行组网, 路由器上有LAN
口与WAN
口, 设备插在LAN
口的设备组成了一个局域网, 路由器再通过WAN
口连接广域网, 实现网络通信, 现在的wifi本质上就是一个无线路由器.
网络通信本质传输的是电信号与光信号, 通过信号的频率来决定电平到底是0
还是1
, 对于电信号, 可以使用低电平表示1
, 高电平表示0
, 对于光信号, 可以使用高频光表示1
, 低频光表示0
.
二. IP地址和端口号
IP
地址和和端口号在网络通信中用于标识不同的主机和同一主机下不同的进程.
🍂IP地址
主要用于标识网络主机, 其他网络设备(路由器等)的网络地址; 简单来说IP
地址是用于定位主机的网络地址.
通俗点讲IP
地址就相当于我们平常的住址, 地址啥的, 就像我们发送快递一样, 需要知道对方的收货地址, 快递员才能将包裹送到目的地, 网络中就需要知道主机的位置在哪里才能将将数据传输过去.
IP本质上就是一个32
位的二进制整数, 通常被分割为4
个 “8
位二进制数” (也就是4
个字节), 如: 01100100.00000100.00000101.00000110; 进二而把这4部份在转化为10进制来表示(即 “点分十进制”), 得到100.4.5.6这一串数字;
还有一个些特殊的IP地址, 叫做环回IP(127.*), 通常是127.0.0.1
, 这个IP地址表示自己这个主机, 主要用于本机到本机的网络通信.
🍂端口号
在网络通信中, IP地址用于标识主机网络地址, 端口号可以标识主机中发送数据, 接收数据的进程; 简单来说端口号是用于定位主机中的进程.
一个设备上是运行着很多的程序的, 仅仅确定了IP地址(也就是知道了设备在哪里)是不够的, 类似于发送快递时, 不光需要指定收货地址(IP地址), 还需要指定收货人(端口号)才能把快递送到指定的人手里; 对应到网络中就是在一个进程中正在执行的那个应用程序是有一个唯一的端口号与之对应的, 知道了IP地址数据到了主机还需要知道端口号才能将数据传输到指定的应用程序当中.
端口号本质上就是一个2
字节的整数, 范围是0-65535
, 要注意的是两个不同的进程不能绑定同一个端口号.
三. 计算机网络分层
1. 什么是网络协议
协议是网络通信中最为核心的概念, 想要进行有效的通信, 需要明确通信双方间的协议, 这里的协议可以理解为约定, 本质上就是对数据发送的格式做出约定, 通信双方分别按照这个约定去构造数据和解析数据.
这也是很好理解的, 想象如果一个英国人只会说英语, 而我的英语又没有达到可以交流自如的水平, 这就没办法有效沟通了…
网络通信是一个比较复杂的过程, 需求场景复杂了, 我们所需要实现功能也就复杂了, 而如果这里的协议太复杂了, 那么我们的学习, 使用, 理解的成本和维护成本都会非常高, 所以使用协议更好的办法就是把一个复杂的大协议给拆分成若干个相对简单的小的协议, 每个协议负责一小部分的工作,在这些小的协议中, 某些协议之间起到的功能和作用是相似的类似的, 于是我们就将这些小协议分层(分类).
这样的协议分层有以下好处:
- 该层协议不必关心其他层协议的实现细节, 更好地做到了封装, 极大的降低了我们的学习和维护的成本.
- 分层后不同层之间的协议耦合性是很低的, 这样就能灵活的针对某一层协议进行替换.
通俗点来讲, 分层的效果就相当于打电话时, 打电话的人不必知道电话的工作原理(封装), 打电话的人可以使用有线电话, 也可以使用无线电话(解耦合).
当前互联网中协议分层主要有两种风格: OSI
七层网络模型(教科书上的), TCP/IP
五层网络模型(实际实现的), 下面就分别来看一下这两种模型是什么样的.
2. OSI七层网络模型
OSI
七层网络模型是教科书上面的协议分层模型, 从硬件到软件分别为物理层, 数据链路层, 网络层, 传输层, 会话层, 表示层, 应用层.
因为OSI七层网络模型既复杂又不实用, 所在实际实现协议的时候并不会按照这种模型去落地实现, 实际组建网络时, 只是以OSI七层模型设计中的部分分层, 也即是以下TCP/IP
五层模型来实现.
3. TCP/IP五层网络模型
这里的TCP/IP
五层协议有些说法也叫做是四层协议, 因为物理层是属于纯硬件的, 和程序员关系不大.
这里各层的协议越靠近物理层越接近硬件设备, 越靠近应用层就越接近用户; 各层的协议之间是不能跨层交互的, 上层协议会调用下层协议, 而下层协议在为上层协议提供服务.
🎯各协议层的作用:
- 物理层: 针对硬件设备间的协议, 约定了网络通信中基础的硬件设备的规格, 保证主机和网络设备之间是相互匹配的.
- 数据链路层: 负责相邻的两个节点之间数据的传输方式(即相邻两个设备的通信), 看是通过哪种(网线/光纤/wifi无线/网口选择)方式进行传输.
- 网络层: 负责网络中任意两个节点之间的通信, 为这两点的通信规划出一条 “最佳” 路径.
- 传输层: 负责端与端之间的通信, 只关注起点和终点(数据是否成功发送和接收, 只关注结果, 不关心过程).
- 应用层: 和应用程序密切相关, 描述了所传输的数据要如何使用.
其中物理层和数据链路层是通过硬件和驱动程序来实现的, 网络层和传输层是由操作系统内核实现的, 这四层都是现成的, 不需要我们去实现, 而我们也没办法去修改; 应用层是在应用程序中实现的, 也就是说, 一般和程序员打交道的是应用层, 这里的实现和我们自己写的代码息息相关, 再次要的就是需要关注一下传输层, 毕竟在应用层需要去调用传输层的API
.
4. 数据在各个层的传输过程
以QQ为例, 假设有用户A给用户B上发送了一个hello
, 发送时间为2023-02- 08 12:00:00
, 下面模拟该数据发送的过程.
- 首先从发送方的角度来看:
🍂1. 应用层.
应用层代码就是QQ这个应用程序了, 首先应用层会将用户要发送的数据进构造成一个应用层数据报文, 本质上就是一个遵守了约定格式的字符串.
QQ应用层的具体数据格式我们是不清楚的, 假设这里的应用层协议的格式是: 发送方QQ号, 发送时间, 接收方QQ号, 消息内容; 此时得到的应用层的报文如下:
然后, QQ程序会调用操作系统的API, 将这个应用层数据报文交给传输层.
🍂2.传输层(进入了操作系统内核)
传输层会基于应用层的数据来构造一个传输层的数据报文, 传输层常用的协议有UDP
与TCP
, 以UDP为例, 该报文由协议报头加上数据载荷构成, UDP报头中是另外一个特定格式的字符串(涉及源端口和目的端口), 这个的"报头"相当于是一个"标签", 通过标签可以表示出当前要把这个消息怎样进行传输.
然后传输层会将得到的UDP数据报交给网络层.
🍂3. 网络层
网络层最常用的是IP
协议, 会将TCP数据报继续封装成IP数据报, 也是在原来数据的基础上加上一个IP协议报头, 新的网络层IP数据报是由IP协议报头加上数据载荷组成, IP报头也是一个特定的字符串, 包含了另一组信息(核心是源IP和目的IP).
然后网络层会将封装的数据交给数据链路层.
🍂4. 数据链路层
数据链路层最知名的协议是 “以太网”, 会基于IP协议数据报再加上帧头与帧尾, 封装构造成一个 “以太网数据帧”.
最后, 数据链路层的数据继续往下传输交给物理层.
🍂5. 物理层
物理层会将上述的 “以太网数据帧” 的二进制数据转换为高低电平电信号/光信号, 然后通过网线或者无线的形式发送出去.
🎯那么大家是否理解上面说到的传输过程为什么要加报头呢, 其实也好理解, 网络通信中需要知道到基础的五元组是源IP, 源端口, 目的IP, 目的端口, 协议类型(协议号, 标识发送进程和接收进程双方约定的数据格式 ); 这就好比唐僧取经时的自我介绍: 贫僧自东土大唐而来, 到西方拜佛求经而去.
这些报头中就有端口, IP这些信息, 有了这些才能知道数据是从哪里来到哪里去.
- 然后再从接收方的角度再看:
🍂1. 物理层
网卡接收到的是光信号/电信号的信息, 接收方物理层会接收到这些信号转换回二进制数据, 转回的这个数据是一个 “以太网数据帧”.
物理层会把这个数据帧再交给数据链路层.
🍂2. 数据链路层
数据链路层把得到的这个数据进行解析, 然后去掉帧头帧尾, 取出中间的数据载荷, 再交给上层的网络层.
🍂3. 网络层
IP协议对这里的数据继续进行解析, 再去掉IP报头,取出数据载荷交给上层的传输层.
🍂4.传输层
UDP继续进行解析, 去掉UDP报头, UDP报头里有一个目的端口, 这个目的端口是关联着着一个具体的应用程序的, 此时取出的数据载荷就可以交给对应的应用层程序.
🍂5. 应用层.
最后QQ的应用层协议会对上述数据进行解析, 将hello显示到用户界面上.
上面从应用层到物理层(从上层至下层)数据层层加码的过程称为 “封装”, 当接收方收到数据时会将已经封装好的数据从下层至上层进行解析拆分, 这个过程叫做 “分用”; 通俗点理解, 封装就类似于包装快递, 分用就是拆快递了.
上面演示的发送流程实际上省略了中间的发送过程, 在实际的发送过程中, 并不是直接从A
的主机到达B
的主机上, 而是在这两个节点的中间还会经历许多的 “中转站”, 最常见的就是路由器, 交换机等设备.
上面涉及到一些专有名词, 包 (packet), 报(datagram), 帧(frame), 段(segment)等, 这些都是网络传输数据的单位, 不同的协议层对数据包有不同的称谓, 在传输层叫做段, 在网络层叫做数据报/包, 在链路层叫做帧.
5. 网络设备所在分层
对于主机设备来说是有五层转发能力的(实现了物理层到应用层五层), 从传统意义上来说, 交换机有两层转发能力(实现了物理层到数据链路层两层), 路由器有三层转发能力(实现了物理层到网络层三层), 对于集线器只有一层转发能力(只实现了物理层), 但实际上现在的路由器与交换机的界限越来越模糊了, 出现了很多3
层或4
层交换机和4
层路由器, 也就是交换机能当路由器使用, 路由器也能当交换机使用, 任意一台设备接收到数据时都会先进行分用, 分用获取到相关传输信息后再决定是继续发送还是直接使用.
有些路由器/交换机是甚至可以封装分用到应用层, 那么路由器/交换机为什么要封装到应用层呢; 要知道交换机, 路由器这些网络设备都是运营商的, 运营商有的时候要做些别的事情, 就需要进行应用层级别的封装分用; 这里典型的一个例子就是运营商进行舆情分析, 网民通过互联网传播一些言论, 这个时候其实数据是谁在上面时候发的, 数据是发到哪里的, 数据发的是什么内容, 通过运营商这样的设备都是可以有办法监测到的, 所以常说到互联网不是法外之地, 也是需要对自己的一言一行负责的.