网络常识
局域网:在一块地区内部可以进行内部通信,超过这个范围就不行
广域网:把很多个局域网连在一起组成广域网(The Internet)因特网是世界最大的广域网
路由器:让不同的设备,不同的局域网能相互连接

交换机:对路由器接口进行扩展(可以理解为排插)

光猫和路由器有什么区别?

举例子:
现在我要使用手机访问百度,我向百度发起了请求,这个时候,路由器会收到我的请求,然后转发给光猫,光猫接收到这个请求,就会访问然后把数据原路返回,如果是在内部传输就不用经过光猫,比如手机给电脑传文件(必须在同一个局域网下)
光猫的角色:相当于你家小区的 "快递收发室"------ 运营商的光纤(快递运输车)把互联网信号送到小区,光猫负责把 "光纤里的光信号" 转换成你家网线能识别的 "电信号"(把快递从运输车转到小区内部货架),并完成运营商的身份验证(确认是你家的快递)。没有光猫,你家根本接不通运营商的网络,连不上互联网的 "大门"。
路由器的角色:相当于你家的 "快递分拣员 + 配送员"------ 从光猫拿到互联网信号后,路由器把信号分发给家里的手机、电脑、电视(给每个设备分配 "房间号" 即私有 IP),同时帮设备转发数据。没有路由器,你家只能有一台设备通过网线连光猫上网,无法实现多设备共享、WiFi 连接。
协议
什么叫做协议?
协议就类似于约定,就比如你我之间进行的沟通,如果我们都使用普通话沟通,你能听懂我讲什么,我问也能听得懂你讲什么,这个就是普通话协议,就好比你现在在看我的文章,这个就叫做汉字协议。
在网络中,只有遵守同一套协议,彼此之间才能知道数据代表的含义,否则就是对牛弹琴,传个啥都不知道
网络通讯的五元组
源IP,源端口
目的IP,目的端口
协议类型
举例子:我从家里来,去学校找老师学习
每进行一次网络通讯,就会涉及到这五元组
我就是源端口,家里就是我的源IP,学校是我的目的IP,老师就是我的目的端口
协议分层
在网络协议中,是非常复杂的,所以就会把这一个大的协议拆分开成很多个小协议,但是小协议也太多了,所以就会把这些小协议按照功能分类
在分层中,我们规定只有相邻的两层协议之间可以进行交互,上层可以调用下层,下层的要给上层提供服务,每一层之间都是都是封装好的,不需要了解下层协议的具体细节,这样就能很好的解耦合,让每一层的工作更加独立
举例子:
在公司中,不允许存在越级报告,并且领导可以让员工干活,员工需要满足领导的需求。
举例子

在这张图片中,最上层的人打电话不需要知道电话机的工作原理,他们只要会说汉语,沟通的时候遵守汉语协议,那么就能进行沟通,这就是因为每一层都是封装好的,上层不需要了解下层的协议。
其次就是解耦合
在这张图片中,他们使用无线电进行沟通,也不会影响到汉语协议,这就是因为解耦合,每一个都是相互独立的,就算使用英语沟通,也不会影响到电话协议,也是因为解耦合。
教科书式分层
OSI七层网络模型
这一模型太过于复杂,实际的真实网络模型其实更简单一点
TCP/IP五层(四层)网络模型

越往上就越偏向于软件越往下就越偏向于硬件
物理层:网线,WiFi,光纤......(类似于修路)
数据链路层:相邻的设备是如何进行通讯的,如用网线连接路由器和电脑,电脑和交换机,交换机和路由...
网络层:任意的两个设备之间如何进行通讯,通讯的过程是怎么进行的
传输层:两个设备之间的通讯不考虑过程
应用层:收到消息后该干啥
举例子
假设我现在在淘宝买了一个衣服,那么这个时候,路就是物理层,没有路就没办法送到我手上,快递小哥他不关心这个里面是啥,他只关注把这个快递送到下一个节点(数据链路层),物流公司就要关注这个快递要怎么送,走哪里最快最好(网络层),卖家只需要关心收件人的消息(传输层),收到衣服之后我要穿还是干啥都随我(应用层)
第二个例子

TCP/IP四层协议就是把物理层和数据链路层看作一层,因为物理层和数据链路层具有很强的耦合性,物理层对数据链路层的影响很大

OSI模型和TCP/IP模型基本上是一样的只是叫法不一样
传输层和互联网层我们是没办法实现的,是操作系统内核实现的,我们最多也只能调用传输层的API给应用层提供服务
经典面试题
主机工作过程:在物理层到应用层
路由器的工作过程:从物理层到网络层
交换机工作过程:物理层到数据链路层
网络数据通讯的基本流程
网络中的传输,本质上都是字符串或者二进制的bit流(大了传不动,所以要拆分开),只有序列化了数据才能进行传输。
在网络中发送数据的时候,会把结构化数据,变成二进制的bit流进行传输(序列化)
接收数据时,会把bit流解析为结构化数据(反序列化)
假设现在使用QQ发送hello给对方
- 应用程序获取到用户输入,会构造一个应用层的数据包,这个数据包会以程序员规定的应用层协议进行传输。
假设格式是发送者的QQ,接受者QQ,消息时间,消息正文

- 应用程序调用传输层提供的接口(API),把数据交给传输层,传输层在拿到这个数据之后,就会构造出一个传输层的传输数据包
传输层的协议主要是TCP/UDP
假设使用TCP

传输层会在应用程序包的基础上加上一个TCP报头
TCP数据包 =TCP报头 + TCP载荷(payload)
TCP报头里面会包含TCP的相关属性,源端口/目的端口(谁和谁)
- 传输层构造好之后,就会调用网络层的接口(API),把传输层的数据包交给网络层,网络层也会继续处理,狗找一个网络数据包
网络层的主要协议是IP协议

IP协议会继续对传输层数据包进行加工,加上一个IP报头
IP数据包 =IP报头+IP载荷(payload)(整个传输层数据包)
- 网络层构造好之后就会继续调用数据链路层的接口(API),把网络层的数据包交给数据链路层
数据链路层的核心协议是以太网

以太网协议会继续对网络层的数据包进行加工,加上一个报头和报尾
以太网数据包 =以太网报头 + 载荷(payload)(网络数据包)+ 报尾
此刻,数据终于完成了封装的过程,还没出门(有点像女朋友出门前化妆)
- 以太网会把这样的数据交给物理层,如网卡
网卡会把数据转化成二进制的数据,最后以光信号/电信号/电磁波信号等方式传播。
这个时候,数据才算是真的传输出去了
总结
在这个过程中就相当于一步步封装,把内容一步步通过各项协议封装好,就好像女朋友出门之前,要美美的化妆,好好的搭配,最后才会出门(女朋友素颜也好看💗)。
分用
数据到达对方的主机,逐层进行解析
- 数据到达对方的网卡,对方的网卡会把光电,电磁信号转化成二进制,然后把这些数据交给数据链路层
- 数据链路层根据核心协议来解析二进制,取出报头和报尾,然后剩下的载荷传给网络层

- 网络层接收到数据链路层的载荷,会根据协议IP协议,取出报头,然后把载荷交给传输层

- 传输层收到数据之后,会根据协议TCP或UDP来取出报头解析,会根据端口号把载荷交给应用层中的具体程序

- QQ程序收到之后,会解析应用层的数据然后拿到关键消息,给出提示

传输的过程中也是涉及到封装分用的
交换机:只需要封装到数据链路层即可(二层转发,在数据链路层工作)
主机的数据到交换机
交换机收到消息之后,会在物理层解析,然后构造成新的以太网数据包
路由器:只需封装到网络层即可(三层转发,在网络层工作)
路由器收到消息之后,会在物理层解析,然后传给数据链路层,然后在传给网络层,构造出网络数据包,以太网数据包,二进制数据