一、⽹络发展史
单机时代==》局域网时代==》广域网时代==》移动互联网时代
1.独⽴模式
独⽴模式:计算机之间相互独⽴
2.⽹络互连
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完成业务,就有了⽹络互连。
⽹络互连:将多台计算机连接在⼀起,完成数据共享。
数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为**⽹络通信**。
根据⽹络互连的规模不同,可以划分为局域⽹ 和**⼴域⽹**。
(1)局域⽹LAN
局域⽹,即 Local Area Network,简称LAN。
Local 即标识了局域⽹是本地,局部组建的⼀种私有⽹络。
局域⽹内的主机之间能⽅便的进⾏⽹络通信,⼜称为内⽹;局域⽹和局域⽹之间在没有连接的情况下,是⽆法通信的。
局域⽹组建⽹络的⽅式有很多种:
1.基于⽹线直连
2.基于集线器组建
3.基于交换机组建
4.基于交换机和路由器组建
(2)⼴域⽹WAN
⼴域⽹,即 Wide Area Network,简称WAN。
通过路由器,将多个局域⽹连接起来,在物理上组成很⼤范围的⽹络,就形成了⼴域⽹。⼴域⽹内部的局域⽹都属于其⼦⽹。
如果有北、中、南等分公司,甚⾄海外分公司,把这些分公司以专线⽅式连接起来,即称为"⼴域⽹"。
如果属于全球化的公共型⼴域⽹,则称为互联⽹(⼜称公⽹,外⽹),属于⼴域⽹的⼀个⼦集。
有时在不严格的环境下说的⼴域⽹,其实是指互联⽹。
所谓 "局域⽹" 和 "⼴域⽹" 只是⼀个相对的概念。⽐如,我们有 "天朝特⾊" 的⼴域⽹,也可以看做⼀个⽐较⼤的局域⽹。
3.⽹络通信基础
⽹络互连的⽬的是进⾏⽹络通信,也即是⽹络数据传输,更具体⼀点,是⽹络主机中的不同进程间,基于⽹络传输数据。
那么,在组建的⽹络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使⽤IP地址来标识。
4.IP地址
(1)概念
IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的⽹络地址。
就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到⽬的地。
(2)格式
IP地址是⼀个32位的⼆进制数,通常被分割为4个"8位⼆进制数"(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常⽤"点分⼗进制"的⽅式来表⽰,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的⼗进制整数)。
如:100.4.5.6。
5.端⼝号
(1)概念
在⽹络通信中,IP地址⽤于标识主机⽹络地址,端⼝号可以标识主机中发送数据、接收数据的进程。
简单说:端⼝号⽤于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。
(2)格式
端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数据。
Q: 有了IP地址和端⼝号,可以定位到⽹络中唯⼀的⼀个进程,但还存在⼀个问题,⽹络通信是基于⼆进制0/1数据来传输,如何告诉对⽅发送的数据是什么样的呢?
A: ⽹络通信传输的数据类型可能有多种:图⽚,视频,⽂本等。
同⼀个类型的数据,格式可能也不同,如发送⼀个⽂本字符串"你好!":如何标识发送的数据是⽂本类型,及⽂本的编码格式呢?
基于⽹络数据传输,需要使⽤协议来规定双⽅的数据格式。
二、认识协议
1.概念
协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在⽹络上传输的数据包的格式。
2.作⽤
为什么需要协议?
就好⽐⻅⽹友,彼此协商胸⼝插⽀玫瑰花⻅⾯,这就是⼀种提前的约定,也可以称之为协议。
计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表⽰ 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双⽅的数据格式。
- 计算机⽣产⼚商有很多;
- 计算机操作系统,也有很多;
- 计算机⽹络硬件设备,还是有很多;
如何让这些不同⼚商之间⽣产的计算机能够相互顺畅的通信?
就需要有⼈站出来,约定⼀个共同的标准,⼤家都来遵守,这就是 ⽹络协议;
3.五元组
在TCP/IP协议中,⽤五元组来标识⼀个⽹络通信:
- 源IP:标识源主机
- 源端⼝号:标识源主机中该次通信发送数据的进程
- ⽬的IP:标识⽬的主机
- ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双⽅约定的数据格式
五元组在⽹络通信中的作⽤,类似于发送快递:
可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息:
如果需要过滤(⼀般是通过端⼝号或进程PID过滤),可以使⽤ netstat -ano | findstr 过滤字符串
4.协议分层
对于⽹络协议来说,往往分成⼏个层次进⾏定义。
(1)什么是协议分层
协议分层类似于打电话时,定义不同的层次的协议:
在这个例⼦中,我们的协议只有两层;但是实际的⽹络通信会更加复杂,需要分更多的层次。
(2)分层的作⽤
为什么需要⽹络协议的分层?
分层最⼤的好处,类似于⾯向接⼝编程:定义好两层间的接⼝规范,让双⽅遵循这个规范来对接。
在代码中,类似于定义好⼀个接⼝,⼀⽅为接⼝的实现类(提供⽅,提供服务),⼀⽅为接⼝的使⽤类(使⽤⽅,使⽤服务):
- 对于使⽤⽅来说,并不关⼼提供⽅是如何实现的,只需要使⽤接⼝即可
- 对于提供⽅来说,利⽤封装的特性,隐藏了实现的细节,只需要开放接⼝即可。
这样能更好的扩展和维护,如下图:
- 只有相邻两层协议之间可以进行交互
- 上层协议可以调用下层协议,且不需要了解下层协议的细节(便于封装)
- 下层协议可以给上层提供服务
- 分层之后,灵活的替换其中的某一层,对于整体的工作过程影响很小(便于解耦)
(协议之间的交互,不能跨层进行)
5.OSI七层模型
OSI:即Open System Interconnection,开放系统互连
- OSI 七层⽹络模型是⼀个逻辑上的定义和规范:把⽹络从逻辑上分为了7层。
- OSI 七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
OSI 七层模型划分为以下七层:
OSI 七层模型既复杂⼜不实⽤:所以 OSI 七层模型没有落地、实现。
实际组建⽹络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。
6.TCP/IP五层(或四层)模型
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求。
- 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。
- 传输层:负责任意两台主机之间的数据传输(不考虑中间过程)。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到⽬标主机。
- ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表的⽅式规划出任意两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹路层。
- 数据链路层:负责相邻设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。有以太⽹、令牌环⽹,⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。
- 物理层:负责光/电信号的传递⽅式(硬件设施符合的要求)。⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。
物理层我们考虑的⽐较少。因此很多时候也可以称为 TCP/IP四层模型。
⽹络设备所在分层
- 对于⼀台主机,它的操作系统内核实现了从应用层到物理层的内容(通过应用程序满足网络通信的内容)
- 对于⼀台路由器,它实现了从⽹络层到物理层(组建局域网,进行网络数据包的转发)
- 对于⼀台交换机,它实现了从数据链路层到物理层(对路由器的接口进行拓展,不需要考虑组网的问题)
- 对于集线器,它只实现了物理层;
注意我们这⾥说的是传统意义上的交换机和路由器,也称为⼆层交换机(⼯作在TCP/IP五层模型的下两层)、三层路由器(⼯作在TCP/IP五层模型的下三层)。
随着现在⽹络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的⽹络设备都是传统意义上的交换机和路由器。
7.⽹络分层对应
⽹络数据传输时,经过不同的⽹络节点(主机、路由器)时,⽹络分层需要对应。
以下为同⼀个⽹段内的两台主机进⾏⽂件传输:
以下为跨⽹段的主机的⽂件传输:数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器
8.封装和分⽤
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame)。
- 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation)。
- ⾸部信息中包含了⼀些类似于⾸部有多⻓,载荷(payload)有多⻓,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理。
下图为数据封装的过程
下图为数据分⽤的过程
9.网络数据通信的基本流程
1.应用程序 获取到用户输入, 构造一个应用层的数据包
这个应用层数据包 就会遵守 应用层协议.===>往往是开发这个程序的程序员自己定义的
往往是"结构化数据"
本质上就是"字符串拼接"
- 发送数据的时候,把结构化数据 =>字符串/二进制比特流(序列化)
- 接受数据的时候,字符串/二进制比特流 =>结构化数据(反序列化)
网络传输的数据,本质上都是"字符串"或者"二进制的 bit 流"
2.应用程序调用 传输层 提供的接口(API),把数据交给传输层.
传输层拿到数据之后,构造出"传输层数据包"
传输层的协议,主要是两个TCP/UDP
TCP 数据包 = TCP 报头(header) + TCP 载荷(payload )
报头包含:源端口/目的端口
3.传输层构造好数据之后,继续调用网络层的 api, 把传输层的数据包交给网络层.
网络层继续进行处理
网络层最主要的协议,IP 协议.
IP 协议继续对上述数据包进行加工 =>拼上 IP 报头
IP 数据包 = IP 报头 + IP 载荷 (整个传输层的数据包)
报头包含:源IP/目的IP
4.IP 协议继续调用 数据链路层的 api,把 IP 数据包交给数据链路层
数据链路层中,核心协议,"以太网"
以太网这个协议,也会在网络层数据包的基础上进一步加工
以太网数据帧 = 帧头 + 载荷 + 帧尾
5.以太网继续这样的数据交给硬件设备(网卡)
网卡会把上述二进制数据,最终以 光信号/电信号/电磁波信号 传播出去了,数据终于出门了
- 从上层到下层,数据都要进一步加工(添加报头)
- 封装 (和面向对象的封装,不是一个封装)
分用,数据到达接收方主机,逐层进行解析
1.数据到达接收方的网卡. 网卡把光电信号还原成二进制 0101
把二进制数据交给上层数据链路层
物理层数据信号是咋来的,和数据链路层是直接相关的
网线/光纤来的数据,数据链路层 =>以太网
wifi 来的数据,数据链路层 =>802.11 协议
2 数据链路层按照以太网协议进行解析
把报头和报尾取出来,剩下的载荷,往上传递给网络层
以太网的帧头中就有专门的属性,描述了网络层使用哪个协议.
3.网络层拿到这个数据之后,按照 IP 协议的格式解析,再把载荷数据交给传输层
IP 报头中也有专门的属性,描述了传输层使用哪个协议
4.传输层拿到数据之后,也是类似,按照 TCP 协议来解析,取出载荷, 交给应用层
传输层报头中, 通过目的端口号,告知我们数据交给哪个应用程序
5.应用程序, 解析应用层数据,拿到关键信息,展示到界面上,给出提示
不同的应用程序,自然使用不同的应用层协议来解析
传输的中间过程中,也是涉及到封装分用的.
交换机是工作在数据链路层
(二层转发)
交换机,只需要封装分用到 数据链路层即可
主机的数据 =>交换机. 交换机收到之后,物理层解析,数据链路层解析 (没有网络层了),重新构造出新的以太网数据帧,发给下一个设备
数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作
路由器是工作在网络层
(三层转发)
主机的数据 =>路由器,路由器收到之后,物理层,数据链路层,网络层解析 (没有传输层),重新构造出新的网络数据包,构造出以太网数据帧, 构造出二进制数据, 进行转发
是否有设备工作在传输层?
这样的设备也有,比如:防火墙,网关 封装分用到传输层
也有设备,只工作在物理层的
集线器、网线延长线