目录

一、四个问题

二、网络为什么分层?

三、程序时如何工作的

3.1 一张图看懂工作过程

3.2 接受包

3.3 发起请求

四、层与层之间的关系


一、四个问题

1. TCP进行三次握手时,IP层和MAC层对应有什么操作?

2. 中转站之间是如何知道自己下一个站在哪的?

3. 二层设备处理的包里,有没有http层的内容呢?

4. 从你的电脑,通过SSH登录到公有云主机中,都需要经过哪些过程?

二、网络为什么分层?

        因为,是个复杂的程序都要分层。

        根据程序设计的要求: 复杂的程序都要分层。 譬如我们写的项目代码还要分成:controller层,service层,dao层呢。 网络分层:(由底向上是) 物理层、数据链路层、网络层、传输层、应用层。

三、程序时如何工作的

3.1 一张图看懂工作过程

 

3.2 接受包

1.第一层物理层发现有网络包经过一个网口时,看看是否需要将这个网络包请进来进行处理。

2.当网络包被拿进来之后,会有一个函数process_layer2摘去包中二层的头,根据头里的内容进行操作。如果发现二层头中的MAC地址与我的相同则说明这个包是发送给我的

3.接着会有下一个函数process_layer3摘去三层的头,在这个头中存有ip地址,如果ip地址与自己相符则表明这个包的终点是我们自己即我是终点,如果ip不相符则说明我们是中转站而非终点

4.假设这个ip地址是tcp的, 然后会有一个函数process_tcp摘去第四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个回复包;如果是一个正常的数据包,就需要交给上层了。这里的上层是某个应用程序,在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了

3.3 发起请求

        用户点击浏览器链接会发起一个http请求,浏览器知道,又要发起另一个 HTTP 请求了,于是使用端口号,将请求发给了你(程序)。

1. 调用send_tcp函数,给http请求的内容加一个tcp头,记录下源端口号。

2. 调用send_layer3函数,此时已经有了http的头和内容以及tcp头。这个函数会加一个ip头,记录源ip地址和目标ip地址。

3.调用send_layer2函数,此时已经有了http、tcp、ip头。这个函数会加一个MAC头,记录源MAC地址即本机器的MAC地址,和目标MAC地址。

5. 从网口将包发送出去。

四、层与层之间的关系

        从分层这一说法本身出发,可以看出网络分层是层层封装的含义,一层套一层的。处理接受到的就想剥洋葱的感觉一样

        那 TCP 在三次握手的时候,IP 层和 MAC 层在做什么呢?当然是 TCP 发送每一个消息,都会带着 IP 层和 MAC 层了。因为,TCP 每发送一个消息,IP 层和 MAC 层的所有机制都要运行一遍。而你只看到 TCP 三次握手了,其实,IP 层和 MAC 层为此也忙活好久了。

        这里要记住一点:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层

        可以理解为空中阁楼(上层依赖于下层):上层是应用层,下层是基础层从上到下依次是:HTTP、TCP、IP、MAC、物理层。 我们区分上下层时,还是将它们按如上顺序看,看成一个倒立的金字塔。 实际的网络包数据结构,是反过来的,HTTP包上套了TCP(端口),TCP包上套了IP,IP包上套了MAC地址。 虽然HTTP的内容相对多一些,IP、MAC地址的内容相对少一些, 但上层的HTTP需要依赖下层的IP、MAC工作,所以网络上跑的包, 可以有下层没上层,却绝不可能有上层没下层。

        所以,对TCP协议来说,三次握手也好,重试也好,只要想发出去包,就需要有ip层和MAC层,不然是发布出去的。

        如果一个 HTTP 协议的包跑在网络上,它一定是完整的。无论这个包经过哪些设备,它都是完整的。因为缺少任何一层,包都是无法发送出去的。

        所谓的二层设备、三层设备,都是这些设备上跑的程序不同而已。一个 HTTP 协议的包经过一个二层设备,二层设备收进去的是整个网络包。这里面 HTTP、TCP、 IP、 MAC 都有。什么叫二层设备呀,就是只把 MAC 头摘下来,看看到底是丢弃、转发,还是自己留着。那什么叫三层设备呢?就是把 MAC 头摘下来之后,再把 IP 头摘下来,看看到底是丢弃、转发,还是自己留着。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐