【EE初阶 - 网络原理】网络通信
文章目录
- 网络通信基础
- (一) IP地址
- 格式
- 特殊IP
- (二)端口号
- 概念
- 格式
- (三) 协议
- 概念
- 为什么需要协议?
- 知名协议的默认端口
- (四) 五元组
- (五) 协议分层
- **OSI 七层网络模型**
- **TCP/IP 五层(或四层) 模型**
- 网络设备所在分层
- (六) 封装和分用
- 封装
- 分用
- 交换机路由器的封装分用
网络通信基础
(一) IP地址
IP地址 主要用于 标识网络主机 和 其他网络设备(比如路由器)的网络地址,简答来说:IP地址用于定位主机的网络地址
就像我们寄快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地
格式
IP地址是32位的二进制数,通常被分割为4个"8位二进制数"(也就是4个字节)
如: 01100100.00000100.00000101.00000110
通常使用"点分十进制"表示 如:a.b.c.d (其中a,b,c,d都是0 - 255之间的十进制整数)
如: 100.2.3.4
特殊IP
127.* 的 IP地址用于本机环回 (loop back)测试,通常是 127.0.0.1
本机环回主要是用于本机到本机的网络通信 (系统内部为了性能,不会走网络的方式传输)
对于开发网络通信的程序 (即网络编程) , 常见的开发方式就是本机到本机的网络通信
IP地址解决了网络通信时定位网络主机的问题,但是,传输到目的主机后,由哪个进程来接收数据呢?-----这就需要端口号来进行标识
(二)端口号
概念
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据和接收数据的进程 简单来说: 端口号用于定位主机中的进程
类似寄快递时,不止需要收货地址(IP地址),也需要制定收货人的手机号(端口号),来联系收货人
格式
端口号是0 - 65535 范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送和接收网络数据
注意:两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号
可以简单理解为,一个手机号只能绑定一个人,但是一个人可以绑定多个手机号
问题:
有了IP地址和端口号,可以定位网络中唯一的一个进程,但是,网络通信是给予二进制的0/1数据来传输,我们该如何告诉对方发送的数据是什么样的呢?
网络通信传输的类型可能有很多种: 例如,图片,视频,文本等等
同一个类型的数据,格式也可能不同,比如 发送一个文本字符串 “你好!”
该如何标识发送的数据为文本类型 ,以及文本的编码格式呢? ----- 基于网络数据传输,需要使用协议来规定双方的数据格式
(三) 协议
概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输) 经过的所有网络设备都必须遵从的约定,规则.
比如,如何建立连接,如何互相识别等 只有遵守这个约定,计算机之间才能相互通信交流
协议,最终体现为在网络上传输的数据包的格式
由三要素组成:
- 语法:数据与控制信息的结构或格式
类似于打电话时,双方要使用同样的语言:如 普通话- 语义: 需要发出何种控制信息,完成何种动作以及做出何种响应
语义主要用来说明通信双方应当怎么做,用于协调与参差处理控制信息
类似于打电话时,说话的内容 吃了吗? —害没呢.- 时序:事件实现顺序的详细说明
时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度
比如,采用同步传输还是异步传输
为什么需要协议?
计算机之间的传输媒介是 光信号 和 电信号 通过"频率" 和 “强弱” 来表示0/1这样的信息
要传递各种不同的信息,就需要约定好双方的数据格式
- 计算机生产厂商很多
- 计算机操作系统,也有很多
- 计算机网络硬件设备,还是有很多
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? ----就需要有人站出来,约定一个共同的标准,大家都来遵守, 这就是 网络协议
知名协议的默认端口
系统端口范围是 0 - 65535 其中:0 - 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议
比如
- 22端口 : 预留给 SSH服务器绑定SSH协议
- 21端口 : 预留给 FTP服务器绑定FTP协议
- 23端口 : 预留给 TeInet服务器绑定TeInet协议
- 80端口 : 预留给 HTTP服务器绑定HTTP协议
- 443端口 : 预留给 HTTPS服务器绑定HTTPS协议
补充:以上只是说明 0-1023 范围的知名端口号用于绑定知名协议,某个服务器也可以使用其他 1024 - 65535 范围内的端口来绑定知名协议
就比如,VIP客户可以坐在包房,也可以坐在其他普通作为
(四) 五元组
在TCP/IP协议中,用五元组来标识⼀个网络通信:
- 源IP:标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
1. 源IP :寄件人地址
2. 源端口号 : 寄件人
3. 目的IP : 收件人地址
4. 目的端口号 : 收件人
5. 协议 : 顺丰快递
(五) 协议分层
网络通信,是个非常复杂的过程,有很多的问题,很多细节要处理,如果只用一个协议就把所有的问题解决,就会造成这个协议复杂无比
于是就有了 协议拆分 ,把协议拆分成多个协议 ,但是在后续的发展中发现拆分出来的协议解决的问题都差不多,因此就再把协议分成很多类,就是协议分层 (每一层都有很多协议,这些协议做的工作都差不多)
当前我们学习的网络结构就是协议分层之后的产物
协议拆分并分层后,有什么好处?
- 下层协议给上层提供服务,上层调用下层协议 (封装)
实现上层协议的人,不用考虑下层协议的细节- 解耦合 :可以把同一层协议替换成其他协议 ,对于其他层次的协议来说,基本是无感知的
类似于打电话 我们只需要有语言协议即可,并不需要了解电话协议,也互不影响
分层,只有相邻的两层协议之间可以进行交互,上层协议可以调用下层协议,下层协议可以给上层提供服务(协议之间的交互,不能跨层进行)
封装:上层协议不不要了解下层协议的细节
解耦合:分层之后,灵活的替换其中的某一层,对于整体的工作过程影响很小
当前有两种分层方式:
- OSI 七层网络模型 (理论上存在,实际上没有这么实现的)
- TCP/IP 五层(或四层) 模型
OSI 七层网络模型
TCP/IP 五层(或四层) 模型
- 应用层: 负责应用程序间沟通,如简单的电子邮件传输(SMTP),文件传输协议(FTP) 网络远程访问协议(TeInet) 等。我们的网络编程主要针对应用层(数据传输过去之后,具体怎么使用)
- 传输层:负责两台主机之间的数据传输,如传输控制协议(TCP) 能够确保数据可靠的从源主机发送到目标主机 (两个点之间的通信,不考虑路径规划**
- 网络层: 负责地址管理和路由器选择.例如:在IP协议中 通过IP地址来标识一台主机,并通过 路由表的方式规划出两台主机之间的数据传输的线路(路由).路由器工作在网络层 (两个点之间的路径规划)
- 数据链路层: 负责设备之间的数据帧的传送和识别.例如 网卡设备的驱动,帧同步(就是从网线上检测到什么信号算是新帧的开始),冲突检测(如果检测到冲突就自动重发),数据差错校验等工作,有以太网,令牌环网,无线LAN等标准.交换机工作在数据链路层 (两个相邻结点之间如何传输)
- 物理层: 负责光/电信号的传递方式,比如现在的以太网通常用网线(双绞线) ,电缆,光线,现在的WiFi无线网使用的电磁波都属于物理层的概念;物理层的能力决定了最大的传输速率,传输距离,抗干扰性. 集线器工作在物理层 (网络通行的基础)
注意:其中只有应用层是程序可以写代码处理的,其他都是有 操作系统 和 硬件设备 来处理的
网络编程 的 主要工作就是写应用层代码,来处理应用层的协议数据
物理层我们考虑比较少,因此有时候称为 TCP/IP四层模型
网络设备所在分层
- 主机:操作系统内核时间了从传输层到物理层的内容
- 路由器: 实现了从网络层到物理层
- 交换机: 实现了从数据链路层到物理层
- 集线器: 实现了物理层
注意:我们这里谈到的是传统意义上的 交换机 和 路由器 也称为二层交换机(工作在TCP/IP五层模型的下两层),三层路由器(工作在TCP/IP五层模型的下三层)
实际上现在的路由器和交换机越来越强大,彼此之间有许多功能的重叠;交换机和路由器功能都是用来组建局域网
(六) 封装和分用
封装
封装描述了网络是如何传输数据的
例如我们使用QQ发消息,使用主机A发送消息
- 应用层 : QQ应用程序 把用户输入的数据整理成应用层数据报(本质上就是字符串拼接,构成更完整信息更多的数据,再进行传输)
接下来 就需要把这个数据报交给传输层(操作系统内核)
2. 传输层: 根据当前使用的传输层协议,给应用层数据报进行进一步组装
应用层调用 传输层提供的接口(API) socket API 把数据交给传输层
接下来 继续把这个数据段交给网络层处理- 网络层: 传输层构造好数据之后,继续调用网络层的API 把传输层的数据段交给网络层
网络层最主要的协议:IP协议
IP协议本身不关心载荷内容是啥
TCP协议也不关心载荷内容是啥
协议类型,不只是一份数据,有很多层~~
其中IP报头中会记录当前传输层使用的是哪个协议
传输层报头中也会记录应用层使用的是哪个协议(准确来说是数据交给哪个应用程序)
数据链路层报头 也会记录 网络层使用的是哪个协议- 数据链路层: IP协议继续调用 数据链路层的API ,把IP数据包 交给数据链路层
数据链路层 核心协议:以太网,在网络层数据包基础上进一步加工~~
直到目前为止,数据还在当前主机上转悠,还没出门呢~~
构造成一个以太网数据帧,再把这个数据交给物理层
5. 物理层:以太网继续把数据交给硬件设备(网卡)
网卡会把上述二进制数据,最终一 光信号/电信号/电磁波信号 传播出去
数据终于出门了~~
上述从上到下 依次添加报头的过程,就称为封装
主机B收到数据的时候,就是封装的"逆过程称为分用,就是把每一层协议对应的协议报头解析出来,并去掉报头
分用
分用,数据到达接收方主机,逐层进行解析
- 物理层
数据到达接收方网卡, 光电信号,网卡把光电信号还原成二进制
把二进制数据交给上层数据链路层
网线/光纤来的数据 数据链路层 => 以太网
物理层数据信号咋来的,都是和数据链路层直接相关的~~- 数据链路层
按照以太网协议进行解析
把报头和报尾取出来,剩下的在和,往上传递给网络层
以太网的帧头中就有专门的属性,描述了网络层使用哪个协议
3.网络层
按照IP协议的格式解析,再把载荷数据交给传输层
同样的,IP报头中也有专门的属性,描述了传输层使用哪个协议
4.传输层
按照TCP协议来解析,取出载荷,交给应用层
传输层报头中,通过目的端口号,告知我们数据交给哪个应用程序
5.应用层
QQ应用程序,解析应用层数据,拿到关键信息,展示到界面,给出提示
不同的应用程序,自然使用不同的应用层协议来解析
虽说上述过程,看起来挺复杂的,但是对于计算机而言,这是个极快的过程~~
交换机路由器的封装分用
封装分用不仅仅是出现在主机上,也出现在传输过程中,包括交换机和路由器中
- 经典路路由器,是封装分用到网络层
- 经典交换机,是封装分用到数据链路层
交换机
主机的数据 => 交换机收到之后,物理层解析,数据链路层解析(没有网络层了)
重新构造出新的以太网数据帧,发给下一个设备
数据链路层中,得到的以太网数据帧的帧头,信息足以支持交换机进行下一步工作
交换机是工作在数据链路层
这就是交换机的二层转发
路由器
主机数据 => 路由器收到后,物理层,数据链路层,网络层解析(没有传输层)
重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发~
路由器工作在网络层
这里是路由器的三层转发
是否有设备工作在传输层?-----有的,比如防火墙/网关 是封装分用到传输层的,但是仅做了解即可~~