目录
局域网与广域网:
局域网:通过集线器或者路由器或者交换机将一些计算机相连,或者直接连接让所有计算机两两相连,这样就形成了局域网,比如一些游戏就可以进行局域网联机,在局域网外的计算机不能和局域网内部的计算机联机
广域网:一种相对概念,通过相关设备扩大局域网,使局域网更大,连接一个城市,一个国家,最后整个世界,这样就可以实现相隔两地的人也可以进行联机游戏
IP地址:
作用:标识一台主机的位置
本质上是一个四个字节,32位的二进制数字,通常使用点分十进制的形式进行表示:
比如192.168.0.136用三个点将四个字节分开表示,每个字节范围是0-255
可以在cmd窗口使用ipconfig查看IP地址
端口号:
作用:标识主机上哪个应用程序,即根据端口号可以找到相应的进程
协议:
网络传输的本质就是通过网线/光纤/无线电信号或者光信号来传输
比如网线中的高低电平分辨代表01,光纤中的不同频率代表01,
发送者和接收者需要指定同一份协议来确定这些01代表什么意思,也就是说发送的数据的格式需要根据协议来进行理解
协议的分层:
一个协议太复杂时,就可以拆分成多个小协议,针对作用/定位类似的协议可以分为一类,
而针对这些不同类别的协议可以进行分层。
上层协议可以调用下层协议,下层协议可以给予上层协议支持,但协议不能跨层交互
协议分层后,降低了层次间的耦合度,上下层协议之间不必很了解彼此,而且页方便后续协议的替换
分层模型:
真实的分层模型主要有两种:
1.OSI七层网络模型(几乎只存在于教科书中)
2.TCP/IP五层网络模型(主流的分层模型)
(TCP/IP五层网络协议中有一个层级叫物理层,只和硬件相关,跟程序猿关联不大,所以部分资料称其为四层网络协议)
所以这里只介绍TCP/IP五层网络模型:
应用层是程序猿可以设计的,
传输层与网络层是操作系统封装好的
数据链路层和物理层是由相应的硬件设备提供的
应用层
关注数据传输过来要干什么,程序猿网络编程主要关注的就是应用层,下面四个层次都是操作系统已经封装好了的
传输层
只关心传输的起点和终点,不关心中间选择哪条路线,节点间怎么运输,会被应用层调用
网络层(互联网层)
只关心路线的规划,从起点到终点应该选择什么样的节点组成的道路
数据链路层 (网卡层)
只关心节点间传输的细节,选择网线/光纤/无限直接连接设备等
物理层
网络通信的基础设施,网线,光纤,网络接口等硬件设施之间交互遵守的协议
封装与分用:
封装:发送方发送数据,会将数据从上到下依次交给对应的层次协议,进行封装
分用:接收方收到数据,要把数据从下到上,依次交给对应的层次协议,进行解析
(注意不同的协议层对数据包有不同的称谓,在传输层叫段,在网络层叫数据报,在数据链路层叫帧)
以QQ发送消息为例解析传输过程:
发送方工作:
从上到下依次封装,新增报头
1.应用层:
在输入框内输入一段消息:"你好世界"
应用层(QQ应用程序)会拿到上述数据并且进行封装,封装成应用层数据包
这里的封装包是随便画的,QQ真正的封装包更加复杂
封装其实就是字符串拼接,为了更好识别某块内容,不同模块间可能会用分隔符分割比如:
123456;654321;2077-05-31 00:00:00;你好世界
2.传输层:
传输层拿到应用层传来的数据包(应用层会调用传输层的api来处理这个数据)
传输层有许多协议,其中最典型的是TCP和UDP,这里以UDP为例
UDP会针对上述数据包继续封装
此时的封装仍旧是字符串拼接比如:1234;4321;...;123456;654321;2077-05-31 00:00:00;你好世界
生成UDP数据包
3.网络层:
获取到UDP数据包之后,需要把该数据包交给网络层的协议
网络层中最常用的协议就是IP协议
IP协议会为UDP数据包添加IP协议的报头,整个UDP数据包作为载荷
4.数据链路层:
数据链路层中最常用的协议是以太网:
(以太网协议不只是针对数据链路层,其对物理层也有一定的影响)
(我们平时上网用的就是以太网(以太网线))
以太网协议拿到网络层传来的数据包要通过字符串拼接合成数据帧:
会添加一个帧头,一个帧尾,
mac地址就是物理地址,作用是表述一个主机在网络中的位置,其功能和IP地址极其类似
但IP地址是用来进行网络层的路径节点规划的,IP地址存的是起点与终点的位置
但mac存的地址是两节点的地址,比如从上海到西安要先经过南京中转,那么在第一次第二次传输中IP都分别是上海和西安,是不变的,而mac地址是变动的,第一次运输中是上海,南京,第二次是南京,西安
(理论上每个网卡都对应唯一的mac地址,但这只是理论上,实际不一定这样)但IP不是这样的
5.物理层:
物理层获取到数据链路层传输的数据帧后,会把这些二进制数据转换成电信号/光信号/电磁波信号,然后进行传输。
接收方工作:
从下到上,依次分用,去掉报头
1.物理层
即网卡,收到高低电频或者其他信号,就会对这里的信号进行解析,还原成二进制数据
2.数据链路层:
物理层将数据交给数据链路层,此时会把这些二进制数据当作一个以太网数据帧(因为发送的时候用的是以太网协议)
其会将数据帧的帧头与帧尾去除,保留载荷,继续传递给上一层,
(帧头中有一个消息类型,根据他能确定网络层使用的是何种协议)
3.网络层:
由网络层的IP协议进行数据报解析,去掉报头,保留载荷传递给传输层,其中还会做一些其他的工作
IP数据报头中存储了某个字段会标识传输层使用的是哪个协议
4.传输层:
从网络层获取到数据报后根据UDP协议继续处理,去掉报头,将载荷传递给应用层
根据端口号传递给相应的进程
5.应用层:
由QQ这个程序进行数据解析
将其中的数据显示在聊天框中
其他注意事项:
如果是自己发送给自己消息,这其中涉及到环回网卡,是一种特殊情况
也就是说交换机是二次转发,路由器是三次转发
注意上述的交换器与路由器是教科书中标准的交换器与路由器
实际中的交换器与路由器其实界限很模糊,有的交换器与路由器也可以分用到应用层,
在舆情分析中经常使用到这种设备,比如在QQ发消息时如果发送了一些违规词汇,通过中间设备的监管,违规词汇就会被替换成***,情节严重的可能涉及到人工监管直接封号
私聊与群聊:
私聊:
私聊是通过先将数据传递给QQ服务器,QQ服务器根据接收方的QQ号查询当前登录的IP地址,然后朝其发送数据
群聊:
群聊和私聊类似,也是先将数据发送给服务器,然后根据群编号找到当前群内成员,循环给这些成员发消息
上述操作都是应用层的操作,也就是说这样的功能模式是程序猿写代码实现的