目录
[IP 地址](#IP 地址)
[OSI 七层模型](#OSI 七层模型)
[TCP/IP 五层模型](#TCP/IP 五层模型)
网络发展
独立模式
独立模式:计算机之间相互独立
网络互联
随着时代的发展,计算机之间需要相互通信,共享软件和数据,即,需要多个计算机协调工作来完成业务,此时就有了网络互联
网络互联:将多台计算机连接起来,完成数据共享
数据共享的本质是网络数据传输 ,即,计算机之间通过网络来传输数据,也就是 网络通信
根据网络互联的规模不同,可划分为局域网 和广域网
局域网LAN
局域网,即,Local Area Network ,简称 LAN
Local 标识了局域网是本地、局部组建的一种私有网络
局域网内的主机之间能够方便的进行网络通信,又称为 内网。局域网和局域网之间在没有连接的情况下,是无法通信的
局域网组件网络的方式有很多种:
(1)基于网络直连
(2)基于集线器组建
(3)基于交换机组建
(4)基于交换机和路由器组建
广域网WAN
广域网,即,Wide Area Network ,简称 WAN
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。其内部的局域网属于其子网
网络通信基础
网络互连的目的是进行网络通信,即网络数据传输,也就是 网络主机的不同进程之间,基于网络传输数据
那么,在组件网络时,如何判断是从哪台主机将数据发送到哪台主机呢?这就需要使用IP 地址来进行标识
IP 地址
IP 地址主要用于标识网络主机 ,其他网络设备(如路由器)的网络地址,简而言之,IP 地址用于定位主机的网络地址
就像收发快递一样,只有知道对方的收货地址,快递员才能将包裹送到目的地
格式
IP 地址是一个 32 位的二进制数 ,通常被分割为4个 8位二进制数(也就是4个字节),如
11111111 11111111 11111111 00000000
通常使用点分十进制 的方式来表示,即通过**.**来分割这4个8位二进制数,而每个字节使用十进制来表示,即,a.b.c.d 的格式,如 255.255.255.0
端口号
在网络通信过程中,IP 地址用来标识主机网络地址 ,而端口号用于标识主机中发送数据、接收数据的进程 ,简而言之,端口号用于定位主机中的进程
同样的,在收发快递时,不但需要知道收获地址(IP 地址),还需要知道收件人(端口号)
格式
端口号是0 ~ 65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送和接收网络数据
协议
协议,即 网络协议 的简称,网络协议是网络通信(网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则 。如 如何建立连接,怎样相互识别等。只有遵守这个约定,计算机之间才能相互通信交流
协议(protocol)最终体现为在网络上传输的数据包格式
为社么需要使用协议呢?
计算机之间的传输媒介是 光信号 和 电信号,通过 频率 和 强弱 来表示 0 和 1 这样的信息,要想传递各种不同的信息,就需要约定号双方的数据格式
就如同在和朋友见面之前,需要先彼此协商见面的时间、地点以及要准备的东西,这就是一种提前的约定,也可以称之为协议
计算机的生产厂商有很多,操作系统也有很多,网络硬件设备也很多,如何让不同厂商之间生产的计算机能够互相通信?
就需要约定一个共同的标准,大家都遵守,这就是 网络协议
五元组
在 TCP/IP 协议中,使用 五元组 来标识一个网络通信:
源IP:标识源主机
源端口号:标识源主机中本次通信发送数据的进程
目的IP:标识目的主机
目的端口号:标识目的主机中本次通信接收数据的进程
协议号:标识发送进程和接收进程双方约定的数据格式
同样的,我们还是以收发快递的例子来理解 五元组 在网络通信中的作用:
在cmd 中,通过输入netstat -ano可以查看网络数据传输中的五元组信息:
协议分层
在网络通信的过程中,其中涉及到的细节是非常多的,若使用一个协议来完成网络通信,就需要考虑到每一个细节,约定好方方面面的内容,这就导致这个协议会非常的复杂
而若一个协议太过复杂和庞大,是非常不利于学习和维护的,因此,就需要将这个 "大而全" 的协议,拆分成多个更能更加单一, "小而细" 的协议
但此时,就会拆分出很多协议。为了让这些协议之间相互配合,就引入了协议分层 ,将功能定位相似的协议放到同一层中:
上层协议调用下层协议的功能
下次协议为上层协议提供服务
相邻的层次之间可以进行沟通,不能跨层次调用(若跨层次调用,则容易混乱)
当我们对网络协议进行分层后,就类似于 面向接口编程:定义好两层之间的接口规范,让双方遵循这个规范来对接,这样,就能够更好的扩展和维护
对于上层(使用方)来说,并不关心提供方是如何实现的,只需要使用接口即可
对于下层(提供方)来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可
那么,协议分层分成几层呢?
OSI 七层模型
OSI,即 Open System Interconnection,开放系统互连
OSI 七层网络模型是一个逻辑上的定义和规范,将网络从逻辑上分为了 7 层
OSI 七层模型是一种框架性的设计方法,其中最主要的功能是帮助不同类型的主机实现数据传输
OSI 七层模型划分为以下七层:
分层名称 | 功能 | |
---|---|---|
7 | 应用层 | 针对特定应用的协议 |
6 | 表示层 | 设备固有的数据格式和网络标准数据格式的转换 |
5 | 会话层 | 通信管理。负责建立和断开通信连接(数据流动的逻辑通路)管理传输层以下的分层 |
4 | 传输层 | 管理两个节点之间的数据传输,保证数据被可靠地传输到目标地址 |
3 | 网络层 | 地址管理和路由选择 |
2 | 数据链路层 | 互连设备之间的传送和识别数据帧 |
1 | 物理层 | 以 0 和 1 代表电压的高低、灯光的闪灭,界定连接器和网线的规格 |
但是,由于 OSI 七层模型太过复杂且不实用,因此,OSI 七层模型并没有实现
在实际组建网络时,只是使用了 OSI 七层模型设计中的部分分层,也就是TCP/IP 五层模型来实现
TCP/IP 五层模型
TCP/IP 是一组协议的代名词,其中还包含许多协议,组成了 TCP/IP 协议簇
TCP/IP 通讯协议采用了 5 层层级结构:
分层名称 | 功能 | |
---|---|---|
5 | 应用层 | 负责应用程序间的沟通。如:文件传输协议(FTP)、简单电子邮件传输(SMTP)等。 |
4 | 传输层 | 负责两台主机之间的数据传输。如:传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机 |
3 | 网络层 | 负责地址管理和路由选择。如:在 IP 协议中,通过路由表的方式规划出两台主机之间的数据传输线路(路由) |
2 | 数据链路层 | 负责设备之间的数据帧传送和识别。如:网卡设备的驱动、数据差错校验等 |
1 | 物理层 | 负责 光/电 信号的传递方式。如:光纤、wifi 无线网等。物理层的能力决定了 最大传输速率、传输距离、抗干扰性等。 |
OSI模型 与 TCP/IP模型:
网络设备所在分层
对于一台 主机 ,其操作系统内核实现了传输层到物理层的内容,也就是TCP/IP 五层模型的下四层
对于一台 路由器 ,其实现了从网络层到物理层,也就是TCP/IP 五层模型的下三层
对于一台 交换机 ,其实现了从数据链路层到物理层,也就是TCP/IP 五层模型的下两层
对于 集线器 ,其只实现了物理层
在这里,我们所说的是传统意义上的交换机和路由器,也称为 二层交换机(工作在 TCP/IP 五层模型的下两层)、三层路由器(工作在 TCP/IP 五层模型的下三层)
随着网络设备技术的发展,也出现了许多 3 层、4 层交换机,4 层路由器,在本篇文章中,我们所说的网络设备都是指的传统意义上的交互机和路由器
封装和分用
不同的协议层对数据有不同的称谓:
在传输层 叫做段(segment)
在网络层 叫做 数据报(datagram)
在 数据链路层 叫做 帧(frame)
封装
我们首先来看封装的过程:
假设张三要使用微信给李四发送消息:hello
应用层(应用程序):
从消息输入框获取到张三输入的 hello 后,就将这个字符串构造成一个应用层数据包
假设应用层数据包按照以下应用层协议约定格式来构造(也就是字符串拼接的方式):
接着,应用程序调用操作系统提供的 API,将这个数据包交给传输层
传输层:
将上述数据作为一个整体,再将其构造成 传输层 的 数据段
传输层涉及到的协议主要是 TCP 和 UDP
在这里,我们假设使用的是 UDP 来进行通信,此时就会构造一个 UDP 数据段
上述添加报头的过程,就是封装 ,其本质是 字符串拼接,拼接的报头具有一定的结构,能够承载一些关键的用来转发数据的信息
而对于 UDP 报头来说,承载的最重要的信息就是源端口 和 目的端口
拼接好 传输层 数据段后,再将这个数据段交给下层(网络层)继续进行封装
网络层:
在网络层,涉及到的最核心的协议是IP 协议
此时,将刚才传输层的 UDP 数据段作为一个整体,再拼接上 IP 报头,构成一个 IP数据报:
IP 报头中也包含了辅助转发的关键信息,其中,最关键的是源IP 和 目的IP
构造完IP数据报后,IP 协议 继续调用数据链路层 API,将数据交给数据链路层的协议进行处理
数据链路层:
数据链路层涉及的核心协议是 以太网协议
将 IP 数据报作为一个整体,添加上一个 帧头 和 帧尾
接下来,就将数据交给 物理层
物理层:
将上述以太网数据帧(二进制结构 01001 这样的数据),转换为 光信号/电信号/电磁波,然后进行发送
经过上述一些列操作,数据才终于发送出去
分用
假设数据已经抵达 李四 的网卡,如何进行处理,其处理过程,就称为 分用
物理层:
物理层接收到 光信号/电信号/电磁波,就将这些物理信号转换成数字信息(二进制的0 1 0 1),得到一个以太网数据帧,进一步将这个数据帧交给数据链路处理
数据链路层:
按照 以太网数据帧的格式,解析,取出其中载荷,再将其交给上层协议
网络层:
按照 IP 协议的格式进行解析,取出其中的载荷,再交给上层协议:
传输层:
按照UDP 协议格式来解析,取出其中的载荷,再交给上层协议:
应用层(应用程序):
按照程序内部的应用层协议格式来解析数据,并将信息在窗口弹出
上述 分用 的过程,其实就是 封装 的逆向过程
在数据传输的过程中,需要通过一系列的交换机或路由器来进行数据转发
在经过交互机或路由器时,上述封装和分用的过程,也是相同的
只是,封装分用的程度不一定到应用层
我们以交换机为例:
物理层:
交换机接收到光电信号后,将其转换成 以太网数据帧 二进制数据,交给数据链路层
数据链路层:
数据链路层对上述数据进行解析,取出载荷部分,并解析帧头中的关键信息,根据帧头中的信息,决定下一步将数据往哪里发送,并根据这个情况进一步构造出新的以太网数据帧
然后再将这个新的数据交给物理层,并发送出去
若是 路由器 ,则会 封装分用 到 网络层