🐵本篇文章开始讲解计算机网络相关的知识
一、基础概念
1.1 局域网和广域网
局域网→Local Area Network→简称LAN,局域网是局部组建的一种私有网络,局域网内的主机之间可以进行网络通信,局域网和局域网之间在没有连接的情况不能进行通信
广域网→Wide Area Network→简称WAN,广域网通过路由器将多个局域网连接组成很大范围的网络
1.2 IP地址
网络通信的本质就是主机之间基于网络进行数据传输,那该如何判断数据从哪台主机传给哪台主机?这就需要IP地址来表识
简单来说,IP地址用于定位主机的网络地址
【格式】
IP地址是一个32位的二进制数(4个字节)如:01100100.00000100.00000101.00000110,这种方式不太容易看,所以通常使用"点分十进制",比如:192.168.100.176,每个部分都是一个0-255的十进制数
1.3 端口号
端口号用来标识一个主机上的不同的应用程序(定位主机中的进程),每个程序在启动时都需要绑定一个和其他程序不重复的端口号
通过IP地址可定位唯一的一个主机,通过端口号可以定位主机里唯一的一个(应用程序)进程,也就是说通过IP地址和端口号可以确定网络中唯一一个进程
【格式】
端口号是0~65535范围的数字,再网络通信中,进程可以通过绑定一个端口号来发送和接收网络数据
端口号是一个由2个字节表示的无符号整数:0~65535,其中 <1024 的端口号称为 "知名端口号" 把这些端口号分配一些比较知名的服务器程序作为这些服务器的 "默认端口号"
注意,前面说每个进程都需要绑定和其他进程不冲突的端口号,但一个进程同一时刻可以绑定多个端口号
二、协议
2.1 概念
协议即网络协议,简单来说,协议就是计算机与计算机之间通过网络实现通信时事先达成的一种"约定",这种约定使那些那些由不同厂商的设备、不同CPU、不同操作系统所组成的计算机,只要遵循相同的协议就能够实现通信
如果不遵循相同的协议,则不能实现通信,就好比两个使用不同语言的人无法进行交流
2.2 协议分层
网络通信是一个很复杂的事情,如果用一个协议约定网络通信的所有细节,这个协议会非常复杂,所以要进行拆分,把一个复杂的协议拆分成多个功能更单一的协议,面对这么多协议,就要进行分类→分层
协议分层和公司中的分组结构很像:
协议分层,把很多协议按照功能分成不同的层级,每个层级都有对应的任务,上层协议会调用下层协议的功能,下层协议会给上层协议提供服务(各种api、接口),不能够"越级调用"
【协议分层的好处】
1)起到封装的效果,某一层的协议不必知道其他层协议的细节,比如下图:
两个人用电话通信,他们只需要会说汉语就行,而不用理解电话的工作原理
2)相同层次的协议可以灵活替换→解耦合
上图可以看到,改变其他层协议并不影响本层协议的使用
2.3 分层模型(OSI和TCP/IP)
1)OSI七层模型:
许多通信协议或多或少都参考了这个模型,但是OSI七层模型没有落地实现,实际组键网络时,知识以OSI模型中的部分分层,也就是TCP/IP五层(或四层)模型来实现的
2)TCP/IP五层(或四层)模型
下图是TCP/IP 与 OSI 模型之间的关系:
可以看到,TCP/IP模型将OSI模型的应用层、表示层、会话层合并成了应用层
每一层代表什么意思:
- 物理层:TCP/IP 的物理层时负责数据传输的硬件,这种硬件相当于以太网或电话线路等物理层的设备
- 数据链路层:通信传输是通过物理层的传输介质实现的,数据链路层就是在通过传输介质互连的设备之间进行数据处理,关注相邻两个点之间的通信
- 网络层:关注的是通信中,通信路径的规划,规划出的路径就决定了数据要经过哪些节点
- 传输层:关注的是通信双方的起点和终点
- 应用层:和具体的应用程序相关,传输的数据干啥用,如何使用,有何意义
2.4 网络设备所在分层
- 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层
- 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层
- 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层
- 对于集线器,它只实现了物理层
2.5 例子
协议的层和层之间是如何配合工作的,以qq发送信息为例:A 通过QQ发送hello给 B
1)假设QQ的应用层协议约定了数据应该按照这种格式来组织:四条信息组织成字符串以逗号分隔,使用\n表示结束标志→【发送人的qq号,接收人的qq号,发送时间,消息正文\n】
QQ应用程序会根据应用层协议约定的数据格式将A发送的数据组织成应用层数据包
应用层接下来要把数据交给传输层,传输层(操作系统内核)提供了api让应用程序去调用,调用api,应用层数据包就交给了传输层
2)传输层会对这个数据包进一步封装,构造成传输层数据包,在传输层有两个典型的协议:TCP、UDP,此处假设用UDP作为传输层协议,根据UDP协议构造UDP数据包
报头里放的是一些UDP属性,如发送方和接收方的端口号
传输层要把数据包交给网络层,调用网络层提供的api(这个调用过程都是系统内核负责的)
3)网络层典型的协议是IP协议,假设根据IP协议构造出IP数据包
IP报头包含一些发送方和接收方的IP地址
网络层要把数据包交给数据链路层,调用数据链路层提供的api
4)数据链路层的典型协议是以太网,以太网会将数据包进一步封装,构造出以太网数据帧
5)上述以太网数据帧本质上是二进制数据,物理层的硬件设备要把上述二进制数据转成光电信号,然后通过传输介质进行传输
数据不是直接到达B而是先到和A连接的路由器/交换机,经过一系列转发之后,最终会到达B,到了B要做的就是上述过程的逆过程
1)物理层收到一系列光电信号,把这些信号转成二进制数据交给数据链路层
2)按照以太网协议解析报头中的关键信息,取出载荷,把载荷交给网络层
3)IP协议拿到IP数据包,按照协议解析报头中的关键信息,取出载荷,把载荷交给传输层
4)UDP协议拿到UDP数据包,按照协议解析报头中的关键信息(要交给哪个端口号对应的进程),取出载荷,把载荷交给应用层
5)QQ程序拿到数据包,按照自己的协议解析并拿到结构化数据
到此,A向B发信息的过程就结束了~
上述过程提到的典型协议,后续都会详细讲解,这里只要有个印象就行