从此篇我将开始网络新篇章!
1. 网络发展史
最初的计算机之间相互独立存在,每个计算机只能持有自己的数据,数据无法共享。此时的计算机为独立模式
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完
成业务,就有了网络互连 。
网络互联即将多台计算机连接在⼀起,完成数据共享。
数据共享本质是网络数据传输 ,即计算机之间通过⽹络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网 和广域网。
2. 广域网VS局域网
2.1局域网LAN
局域网,即LocalAreaNetwork,简称LAN。
Local 即标识了局域网是本地,局部组建的⼀种私有网络。
局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方式有很多种:
- 基于网线直连
- 基于集线器组建
集线器只能单向转发数据,现在不使用了
- 基于交换机组建
可以实现对所有计算机设置的数据转发
在内网中实现组网,主要用在公司内部
- 基于交换机和路由器组建
2.2 广域网WAN
广域网,即WideAreaNetwork,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部
的局域网都属于其子网。
其局域网和广域网是一个相对概念,并没有明确的区分
3. 网络通讯基础
3.1 IP地址
概念 :IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
就像我们发送快递⼀样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
格式: IP地址是⼀个32位的二进制数,通常被分割为4个"8位⼆进制数"(也就是4个字节),如:01100100.00000100.00000101.00000110。通常用"点分十进制"的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。
上述IP地址是用四个字节表示的,最多42亿左右的设备,那么不够用怎么办?
上述的IP地址采用的点分十进制的表示方法是Ipv4的表示方法,现如今有了Ipv6表示方法,完全足够使用
在cmd当中使用ipconfig
指令可以查看当前设备的IP地址,以我电脑为例:
3.2 端口号
概念: 在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端⼝号)。
格式:
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定⼀个端口号,来发送及接收网络数据。
端口号是否是可变的呢?
- 如果是服务提供方就需要一个确定的端口号,MYSQL服务端的端口号默认3306
- 如果是客户端的话系统会随机分配一个
那么程序员是否可以随机指定端口号呢?
- 其中1~ 1024 知名端口号,比较有名的程序已经占用了的端口号,比如:WEB程序用的80,FTP用的21
- 1205~ 65535 这个范围内可以随便指定
- 原则就是一台主机上的端口号在不同网络程序之间不能冲突
有了IP地址和端口号,可以定位到网络中唯⼀的⼀个进程,但还存在⼀个问题,⽹络通信是基于⼆进制0/1数据来传输,那么如何告诉对⽅发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同⼀个类型的数据,格式可能也不同,
如发送⼀个文本字符串"你好!":如何标识发送的数据是文本类型,及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式。
3.3 认识协议
概念: 协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的⼀组约定、规则。如:怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在网络上传输的数据包的格式。
计算机之间的传输媒介是光信号和电信号。通过"频率"和"强弱"来表⽰0和1这样的信息。要想传递
各种不同的信息,就需要约定好双⽅的数据格式。
- 计算机⽣产厂商有很多;
- 计算机操作系统,也有很多;
- 计算机⽹络硬件设备,还是有很多;
如何让这些不同厂商之间⽣产的计算机能够相互顺畅的通信?
就需要有人站出来,约定⼀个共同的标准,大家都来遵守,这就是网络协议;
3.4 五元组
在TCP/IP协议中,⽤五元组来标识⼀个网络通信:
- 源IP: 标识源主机,等同于发件人地址
- 源端口号: 标识源主机中该次通信发送数据的进程,等同于发件人名称
- 目的IP: 标识目的主机,等同于收件人地址
- 目的端⼝号: 标识目的主机中该次通信接收数据的进程,等同于收件人名称
- 协议号: 标识发送进程和接收进程双方约定的数据格式,等同于运送的物品或其他相关约定
3.5 协议分层
对于网络协议来说,往往分成几个层次进行定义。
为什么要协议分层?
目的是为了让不同的层专注自身的数据处理方式,只需要为上层去提供API,并
为下层准备数据(根据下层协议要求)
3.5.1 OSI七层模型
OSI: 即Open System Interconnection
,开放系统互连
OSI 七层模型既复杂又不实用:所以OSI七层模型没有落地、实现。
实际组建网络时,只是以OSI七层模型设计中的部分分层,也即是以下TCP/IP五层(或四层)模型来实现。
3.5.2 TCP/IP五层(或四层)模型
- 应用层: 和用户打交道,接收与展示用户的数据,比如收发快递的过程中,只关注物品本身
- 传输层: 完成端到端的传输的准备,确定收送主机的地址和端口号,对比快递来说确定收件人和发件人的地址和电话
- 网络层: 规划出端到端之间的网络路径,路径中可能会包含中间经过的其他网络设备,比如快递中转站
- 数据链路层: 完成点到点之间的传输,每个网络设备之间的传输
- 物理层: 把真实的BIT数据流,通过转换成光电信号在传输介质中传输
网线:电信号 光纤:光信号
注意 :四层模型即不包括物理层
3.6 封装和分用
-
不同的协议层对数据包有不同的称谓,在传输层叫做
段(segment)
,在网络层叫做数据报(datagram)
,在链路层叫做帧(frame)
。 -
应用层数据通过协议栈发到网络上时,每层协议都要加上⼀个
数据首部(header)
,称为封装 (Encapsulation)。 -
首部信息中包含了⼀些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
-
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理。
下图为数封装和分用的过程 :
发送方流程(封装):
- 应用层按照应用层协议组装好我们的数据
- 传输层确定源端口号和目的端口号
- 网络层确定源IP地址和目的IP地址
- 数据链路层确定源MAC地址和目的MAC地址放在MAC头中(帧头),通过CRC算法计算校验和放在MAC尾中(帧尾),加入帧头与帧尾之后,把数据以二进制的形式发送给物理层
- 物理层把具体的数据(报文)转换成光电信号,通过传输介质进行传输
接收方流程(分用):
- 物理层接收到光电信号之后,根据以太网协议把信号转换成二进制BIT流,以二进制的形式交给上一层(数据链路层)
- 数据链路层解析出帧头、载荷、帧尾确认数据正确后,去掉帧头与帧尾把本层的载荷交给上一层(网络层)
- 网络层根据IP协议解析报文件,取出载荷交给上一层(传输层)
- 传输层根据TCP协议解析报文件,取出载荷交给上一层(应用层)
- 应用层按应用程序协议解析数据
此时有一个疑问了? 计算机是如何知道对方的IP地址的呢? 这是因为我们在使用软件时,会连接到该软件的服务器,当我们登入成功使用时,该服务器就会把我们的IP地址和端口号存放在当中