目录
七层网络协议
网络通信过程中,需要涉及到的细节,其实是非常非常多的,如果要有一个协议来完成网络通信,就需要约定好方方面面的内容,非常多的细节,导致这个协议非常复杂。
怎么办呢?拆分。一个协议太复杂太庞大,非常不利于学习和维护,需要把一个高大全的协议,拆分成多个功能更单一,"小而美"的协议。拆分出来的协议太多了怎么办?为了让这些协议更好的相互配合,引入了协议分层,就好比一个公司一样的。
网络通信协议拆分的多了之后也是分成了很多层。把功能定位相似的协议放到同一层之中。上层协议会调用下层协议的功能,下层协议会给上层协议提供服务。
只有相邻的层次之间可以进行沟通,不能跨层次调用(就容易混乱)
协议分层的初心是为了让复杂的一个协议变成更简单的多个协议
还附带了一些好处:
1)上层协议直接使用下层协议即可,不需要了解下层协议的细节(相当于下层协议吧细节封装好了)
2)某一层的协议进行替换后,对于其他层没啥影响
五层网络协议
OSI七层网络协议,最初大佬们设计的时候,给出的方案,后来在实施过程中,太麻烦了,就简化成了五层。
应用层 :程序拿到数据之后,要用来干啥,解决什么问题
传输层:负责关注 网络数据包 起点和终点(从哪里来要到哪里去) 端到端之间的传输。
网络层:负责关注起点终点之间,要走哪条路(路径规划)
数据链路层:负责两个相邻节点之间的传输
物理层:通信过程中的基础设施
TCP/IP五层(或四层)模型:四层就不算物理层,物理层是纯硬件的。
说是五层,实际上下面这四层都是
在操作系统内核,硬件,驱动程序中已经实现好了(计算机内置了),咱们作为程序员在网络编程过程中能影响到的也就只有应用层了
- 对于一台主机 ,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层。
- 对于一台路由器 ,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层
- 对于一台交换机 ,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层
- 对于集线器 ,它只实现了物理层
路由器工作在网络层,交换机工作在数据链路层
这里的路由器/交换机是"经典"的路由器交换机(教科书上的)。事实上,真实的交换机/路由器的功能更复杂,功能更复杂。很多交换机,也具有一些路由器的功能,也能工作在网络层。
很多路由器,也具备一些交换机的功能,也能工作在数据链路层。
甚至还有些交换机路由器可以工作在应用层。
封装
网络传输数据过程中,最核心的流程就是封装和分用
比如:A通过QQ给B发送一个hello
1.应用层
(应用程序)QQ
QQ从消息输入框获取到用户输入的hello
就要把这个字符串构造成一个应用层的数据包,
QQ这样的程序内部就设置了一个应用层协议,应用层数据包就是按照这个应用层协议约定的格式(字符串拼接)来构造的
应用程序就会调用操作系统提供的API,把这个数据包交给传输层。
2.传输层
传输层就会把上述数据作为一个整体,再构造成一个传输层的数据包,(传输层涉及到的协议,最主要的就是TCP和UDP)
此处假定是使用UDP来进行通信,就会构造成一个UDP的数据包。
形如上述,添加报头的过程,就叫做"封装",其实就是 字符串拼接 。只不过拼的报头,具有一定的结构
拼好传输层数据包之后,就要把这个数据包进一步的交给下层,网络层继续进行封装了。
【交给下层,指的是,下层协议提供一组API(函数),上层调用这个API,并且把刚才构造好的数据通过参数传过去,下层协议就可以来处理这个数据了】
(UDP报头,虽然不能保护数据,但是可以起到"贴标签"类似效果,就能承载一些关键的用来转发数据的信息。对于UDP报头来说,承的最重要的信息就是
源端口 和目的端口)
3.网络层
这里涉及到的最核心的协议,IP协议
网络层IP协议,把刚才的传输层的UDP数据包作为一个整体,再拼上IP协议的报头,构造成一个IP数据包
IP报头还会包含一些辅助转发的关键信息,此处最关键的信息就是 源IP和目的IP了
构造完成完整的IP数据包之后,IP协议继续调用数据链路层的API,把数据再交给数据链路层这里的协议进行处理。
4.数据链路层
数据链路层这里涉及到的核心协议->以太网
此处"以太"用来表示网络数据传输的介质
以太网就是日常最常见到的 有线网络
日常用到的网线,也叫做"以太网线",日常用到的网口也叫做"以太网口"
用到的交换机,也叫做"以太网交换机"
以太网数据帧,也是一IP数据包为一个整体,在这个基础上添加上帧头和帧尾
5.物理层
把上述这样的以太网数据帧,二进制结构转换成光信号/电信号/电磁波,然后进行发送
经过上述一系列的操作,数据终于从你的电脑上发送出去了!!
分用
暂时不考虑中间过程,假定数据包已经到达B的网卡了。B如何处理。B的处理过程,就称为"分用"
1. 物理层
B的物理层收到了光信号/电信号/电磁波,就会把这些物理信号转换成数字信号(二进制的0 1 0 1)得到一个以太网数据帧,进一步的把这个数据帧交给数据链路层处理
2.数据链路层
按照以太网数据帧的格式,来解析,取出其中的载荷,再交给上层协议~~
3.网络层 IP 协议
按照 IP 协议的格式进行解析,取出其中的载荷,再交给上层协议。
4.传输层 UDP 协议
按照 UDP 协议格式来解析,取出其中的载荷再交给上层协议
5.应用层
QQ应用程序
按照QQ应用程序内部的应用层协议格式来解析数据~~~
qq程序拿到这些信息之后,就会在窗口中给你弹出提示~
并且把消息/消息的发送者/发送时间 都显示到聊天窗口上
分用的过程,就是封装的逆向过程~~