目录
编辑局域网
网络通信基础
IP 地址
端口号
协议
协议分层
TCP / IP 五层网络模型
网络数据传输的基本流程
发送方的情况:
接收方的情况
搭建网络的时候,需要用到 交换机 和 路由器
虽然路由器只有 4 个 lan 口
实际上组建的局域网,可以有更多的设备,就可以用到交换机
交换机的口是不分 lan 口 和 wan 口 的,所有的 口 都是等价的
组件企业网络,往往需要一个企业级路由器+ 若干个企业级交换机,延伸出很多的网线,供大家使用
AP 相当于一个不用插网线的小交换机(提高无线热点扩容能力)
路由器,可以进行三层(网络层)转发
交换机,是进行两层(数据链路层)转发
这个定义是站在经典的路由器/ 交换机的定义上看待的
实际上现代的交换机/ 路由器之间的差异越来越小了,之间的功能也是有很多重合的
集线器是把一根网线,分成多个岔口,但是和交换机有本质区别
交换机分出来的这个岔口,彼此之间是独立的,不干扰的
集线器分出来的岔口,是会冲突的
局域网和广域网,并没有一个明确的界限
当局域网中,设备数量非常多,局域网空间跨度特别大,就可以称为广域网了
使用 ip 地址,来描述网络上一个设备所在的位置
用来区分一个主机上不同的应用程序
一个网络程序,在启动的时候,都需要绑定一个或者多个端口号,后续的通信过程都需要依赖端口进行展开的
描述了网络通信传输的数据的含义
网络通信协议,虽然更复杂,但是本质上也是认为约定出来的一些规则
网络发展这么多年了,很多细节,都已经有规定出来的协议了
我们做的主要就是学习已经约定好的协议
为什么要约定好协议呢?
电脑种类很多,设备的厂商也很多,必须有一份统一的协议标准,让大家按照同样的标准来研发设备,这样大家弄出来的东西就可以在一起相互通信了
网络通信,是一个比较复杂的工作,会涉及到一系列非常繁琐,非常细节的工作
靠一个协议解决所有问题会导致这个协议非常复杂,非常庞大
因此就需要对协议进行拆分,由于拆分出来的协议有点多,就对这些协议进行分类,分层
对于网络协议来所,往往分成几个层次进行定义
上层协议调用下层协议
下层协议给上层协议提供服务支持
也就是属于这些协议搞了明确的层级关系,可以避免跨层级调用引起的混乱,降低耦合,提高了整个系统的可读性
这个图就很好描述了分层
(1)上层不需要了解下层的细节(封装)
(2)灵活的 调整 / 替换 某层的协议
协议分层,主要有两种方式:OSI 七层网络模型(只是在教科书上) , TCP / IP 五层网络模型
如果算上物理层,就是五层,如果不算上物理层,就是四层
因为物理层是偏硬件的,和软件关系不大
物理层:
描述的是网络通信中的一些基础设施需要遵守的规范
会约定 网线,网口是什么样子的
数据链路层
相邻节点之间,数据如何运输
网络层
进行路径规划
上海 -> 北京,有很多的路线走法 ,快递公司就需要规划处商品走哪个路线
传输层
只关注起点和终点,不关注中间过程(数据从哪里出发,要到哪里去)
应用层
不同的应用程序,就会使用不同的应用层协议来通信(也可能用相同的)
传输层协议,网络层协议,都是属于操作系统中的,已经内置的
驱动程序,是硬件厂商提供的,驱动程序会和系统内核进行适配,进一步的系统就可以通过驱动来操作硬件了
用四个字概括:封装和分用
以 QQ 发送消息为例,介绍网络数据传输的基本流程
A 把消息通过 QQ 发给主机 B
网络通信中的 “五元组” : 源ip ,源端口,目的ip ,目的端口,协议类型
1、应用层
QQ 应用程序,从输入框获取到你要输入的消息,构造成应用层数据报(根据应用层协议)
很多应用程序里会自定义应用层协议,QQ 使用的是什么协议,我们是不知道的
所谓的 “构造应用层数据报” 过程,就是按照一定格式进行字符串拼接
发送方和接收方,需要达成一致
应用程序,就会调用传输层提供的接口,把上述数据交给传出层进行处理
2、传输层
传输层协议有很多,其中最主要的是 TCP 和 UDP 、
此处假设使用 UDP
上面数据从应用层传到了传输层,交给了 UDP ,于是 UDP 协议就要按照自己的格式,生成一个 UDP 数据报
UDP 不关心应用层数据里面都有啥,都是啥内容,只是把应用层数据当做一个字符串,构造出一个 UDP 数据报
类似于快递小哥在取件的时候,不关心快递具体是啥东西,只是关心尺寸和重量(包裹中能不能放下)
快递小哥在拿到东西之后,会再包装一下,贴上标签
此时,传输层会把构造好的 UDP 数据报,进一步交给网络层
3、网络层
网络层最主要的协议,就是 IP 协议
IP 协议不关心这里的载荷内容是啥,只是单纯的把在和当做一个字符串,再这个基础上拼接上另外一个 IP 报头
接下来, 还需要把数据传输给数据链路层
4、数据链路层
以太网(平时上网需要插一个网线)
以太网,又会针对 IP 数据报,进行进一步封装,再添上数据头和数据尾
以太网也不关心载荷里是啥,只是把载荷当成字符串,进一步拼接上帧头帧尾,构造成 以太网数据帧
上述这样的数据,还需要进一步交给物理层
5、物理层
本质上都是二进制的数据(一组0101 构成的)
硬件设备就需要对上述数据进行转换了(光信号 / 电信号 / 电磁波)
到这里,主机A 完成了发送过程
此处,我们先不考虑中间过程
1、物理层
硬件设备受到 光信号 / 电信号 / 电磁波,需要把受到的信号进行解调,得到了一串 0101 的二进制数据序列,也就是以太网数据帧
调制:把你要传输的信息放到光电信号中
这个数据就需要被交给上一层,数据链路层
2、数据链路层
数据链路层的以太网协议,就会针对这个数据进行解析
此时,再把载荷部分取出来,交给上层(IP协议)
3、网络层
IP 协议针对这个数据报进行解析,去掉 IP 报头,取出载荷,进一步的交给传输层
4、传输层
根据 IP 报头里的字段,就知道当前这个载荷是一个 UDP 数据报,交给 UDP 处理
UDP 也是要针对数据报进行解析,去掉报头,取出载荷,进一步交给应用程序
5、应用层
UDP 报头中,有一个字段,目的端口,根据目的端口找到关联的应用程序,就交给这个程序即可
qq程序接收到了这个数据,就会按照qq 的应用层协议,进行解析
把这里的数据显示到页面上
在qq 中,对应的头像就开始闪烁,点进去,就能显示出这个新的消息以及消息的时间等信息
主机 A 从上到下,依次添加报头的过程,称为封装
主机 B 从下到上,依次解析报头的过程,称为分用
封装就是在打包快递,分用就是在拆快递
每次网络数据的传输,都是要经历这个过程的
消息转发到某个设备,每个设备处理流程都是和上面的封装分用是一样的
如果是一个交换机,交换机分用到数据链路层即可
交换机解析出以太网数据帧,进一步的获取到帧头中的 “mac 地址” ,根据 mac 地址查询到交换机内部的转发表,确定接下来数据从哪个网口发出去
在发送之前,又会重新把以太网数据帧封装好
路由器则是封装分用到网络层
解析出 ip 数据包,获取到 ip 报头,根据 ip 报头中的目的ip 进一步规划接下来要走的路线
接下来又会把这个数据进行转发
上述描述的交换机路由器,只是一个经典的交换机路由器
实际上现代的交换机路由器,会做更多的事情,很可能是封装分用到应用层