先验知识:OSI模型
OSI网络模型实际上是参考模型,在实际中并不使用,在网络出现问题的时候,可以从一个宏观的整体去分析和解决问题,而且搭建网络的时候并不需要划分为7层,当今互联网广泛使用的是TCP/IP网络模型(原本只有4层),随着人们不断实践后发现,划分为5层会更符合实际。
网络传输的流程
1. 应用层
- 正:应用程序发起连接,比如”我们要浏览某个网页“,我们就会对该网页发起请求;
- 反:将段解封为报文,报文是数据在应用层中的名字;
例子:客户端要发送数据,也就是报文。
2. 传输层
- 正:将报文封装为段,封装时会加上端口号;
- 反:将包解封为段,段是传输层中数据的名字;
- 传输层管理两个节点之间的数据传输,负责可靠传输(TCP)和不可靠传输(UDP),还有一个新的叫QUIC;
例子:报文来到传输层,加上源端口号和目标端口号,封装成段。
3.网络层
- 正:将段封装为包,封装时会加上
ip
地址; - 反:将帧解封为包,包是网络层中数据的名字;
例子:段来到网络层,加上源
IP
和目标IP
封装成包;
4. 数据链路层
-
正:将包封装为帧,在封装的时候会加上
MAC
地址; -
反:在数据链路层中,比特会被封装成帧,帧是这一层表示数据的名字;
例子:数据来到数据链路层之后,理论上根据目标
MAC
地址可以将包和源MAC
地址和目标MAC
地址封装成帧。但是存在的问题是目标IP地址和源IP地址并不是在同一个网络下的,要发送到其他的网络,就需要经过默认网关,由于客户端主机并不知道默认网关的MAC地址,没有办法封装成帧,这个时候可以用ARP
协议进行广播,找到网关IP对应的MAC地址。具体步骤如下:-
首先,客户端将自己的MAC地址封装成帧,利用
ARP
协议广播出去,默认网关收到广播出去的帧之后,查看帧,可以看到客户端的MAC地址,再解封发现包里面的IP地址,然后将IP和MAC关联为一台主机; -
然后默认网关将自己的IP地址放入包中,再结合自己的MAC地址封装成帧,然后将其原路返回客户端,这样客户端就知道默认网关的MAC地址了;
-
5. 物理层
-
正:将帧封装为比特;
-
反:比特;
-
我们要发送出去的数据在计算机里只不过是无数的0和1(比特),物理层要把这些比特用不同的媒介传输出去,这些媒介可以是电缆、光或者其他形式的电磁波来表示和传输信号;
-
数据从网络接口出去之后,会经过不同的网络拓扑(网络拓扑是指网络中设备如计算机、路由器、交换机之间物理或逻辑连接的布局结构,描述了设备之间的关系以及他们如何相互连接,是设计和管理计算机网络的基础),
例子:帧到了物理层封装成比特流,发送出去。
然后会经过默认网关,解封为帧发现是发送给自己的,再解封为包查看目标IP地址是在另一个网络中的,然后进行路由转发,最终到达目的网络;
如果目标网关知道目标IP地址和MAC地址是哪台主机,封装成帧就可以直接发送了,如果不知道的话也可以用
ARP
协议来广播一下获取。服务器在收到比特流之后按上面的过程倒序进行解封,就可以得到相应的请求报文。
然后以同样的方式给客户端发送回应。
参考:https://www.bilibili.com/video/BV1EU4y1v7ju/?spm_id_from=333.788&vd_source=bad9fad47786fe7e9f54f99cc00b91e9