2、网络分层的真实含义是什么?

2.1、这四个问题你真的懂了吗?

因为教科书或者老师往往会打一个十分不恰当的比喻:为什么网络要分层呀?因为不同的层次之间有不同的沟通方式,这个叫作协议。例如,一家公司也是分“层次”的,分总经理、经理、组长、员工。总经理之间有他们的沟通方式,经理和经理之间也有沟通方式,同理组长和员工。有没有听过类似的比喻?

第一个问题

请问经理在握手的时候,员工在干什么? 很多人听过 TCP 建立连接的三次握手协议,也会把它当知识点背诵。

同理问你,TCP 在进行三次握手的时候,IP 层和 MAC 层对应都有什么操作呢?

(除了上面这个不恰当的比喻,教科书还会列出每个层次所包含的协议,然后开始逐层地去讲这些协议。但是这些协议之间的关系呢?却很少有教科书会讲。)

第二个问题

学习第三层的时候会提到,IP 协议里面包含目标地址和源地址

第三层里往往还会学习路由协议

路由就像中转站,我们从原始地址 A 到目标地址 D,中间经过两个中转站 A->B->C->D,是通过路由转发的。

  • A 知道自己的下一个中转站是 B,那从 A 发出来的包,应该把 B 的 IP 地址放在哪里呢?
  • B 知道自己的下一个中转站是 C,从 B 发出来的包,应该把 C 的 IP 地址放在哪里呢?
  • 如果放在 IP 协议中的目标地址,那包到了中转站,怎么知道最终的目的地址是 D 呢?

第三个问题

你一定经常听说二层设备、三层设备。二层设备处理的通常是 MAC 层的东西。

那我发送一个 HTTP 的包,是在第七层工作的,那是不是不需要经过二层设备?或者即便经过了,二层设备也不处理呢?或者换一种问法,二层设备处理的包里,有没有 HTTP 层的内容呢?

综合问题

1、从你的电脑,通过 SSH 登录到公有云主机里面,都需要经历哪些过程?

2、或者说你打开一个电商网站,都需要经历哪些过程?

2.2、网络为什么要分层?

网络为什么要分层?

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

理解网络角度:

一个很好的角度是,想象网络包就是一段 Buffer,或者一块内存,是有格式的。同时,想象自己是一个处理网络包的程序,而且这个程序可以跑在电脑上,可以跑在服务器上,可以跑在交换机上,也可以跑在路由器上。

你想象自己有很多的网口,从某个口拿进一个网络包来,用自己的程序处理一下,再从另一个网口发送出去。

当然网络包的格式很复杂,这个程序也很复杂。复杂的程序都要分层,这是程序设计的要求。 比如,复杂的电商还会分数据库层、缓存层、Compose 层、Controller 层和接入层,每一层专注做本层的事情。

2.3、程序是如何工作的?

当一个网络包从一个网口经过的时候,你看到了,首先先看看要不要请进来,处理一把。

有的网口配置了混杂模式,凡是经过的,全部拿进来

拿进来以后,就要交给一段程序来处理。

于是,你调用 process_layer2(buffer)。 当然,这是一个假的函数。但是你明白其中的意思,知道肯定是有这么个函数的。那这个函数是干什么的呢?从 Buffer 中,摘掉二层的头,看一看,应该根据头里面的内容做什么操作。

假设你发现这个包的 MAC 地址和你的相符,那说明就是发给你的,于是需要调用 process_layer3(buffer)。 这个时候,Buffer 里面往往就没有二层的头了,因为已经在上一个函数的处理过程中拿掉了,或者将开始的偏移量移动了一下。在这个函数里面,摘掉三层的头,看看到底是发送给自己的,还是希望自己转发出去的。

如何判断呢?

如果 IP 地址不是自己的,那就应该转发出去;如果 IP 地址是自己的,那就是发给自己的。

根据 IP 头里面的标示,拿掉三层的头,进行下一层的处理,到底是调用 process_tcp(buffer) 呢,还是调用 process_udp(buffer) 呢?

假设这个地址是 TCP 的,则会调用 process_tcp(buffer)。这时候,Buffer 里面没有三层的头,**就需要查看四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。**如果是发起或者应答,接下来可能要发送一个回复包;如果是一个正常的数据包,就需要交给上层了。

交给谁呢?是不是有 process_http(buffer) 函数呢?

没有的,如果你是一个网络包处理程序,你不需要有 process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。至于浏览器怎么处理,和你没有关系。

浏览器自然是解析 HTML,显示出页面来。电脑的主人看到页面很开心,就点了鼠标。点击鼠标的动作被浏览器捕获。浏览器知道,又要发起另一个 HTTP 请求了,于是使用端口号,将请求发给了你。

你应该调用 send_tcp(buffer)。不用说,Buffer 里面就是 HTTP 请求的内容。这个函数里面加一个 TCP 的头,记录下源端口号。浏览器会给你目的端口号,一般为 80 端口。

然后调用 send_layer3(buffer)。Buffer 里面已经有了 HTTP 的头和内容,以及 TCP 的头。在这个函数里面加一个 IP 的头,记录下源 IP 的地址和目标 IP 的地址。

然后调用 send_layer2(buffer)。Buffer 里面已经有了 HTTP 的头和内容、TCP 的头,以及 IP 的头。这个函数里面要加一下 MAC 的头,记录下源 MAC 地址,得到的就是本机器的 MAC 地址和目标的 MAC 地址。不过,这个还要看当前知道不知道,知道就直接加上;不知道的话,就要通过一定的协议处理过程,找到 MAC 地址。反正要填一个,不能空着。

万事俱备,只要 Buffer 里面的内容完整,就可以从网口发出去了,你作为一个程序的任务就算告一段落了。

2.4、揭秘层与层之间的关系

首先是分层的比喻。**所有不能表示出层层封装含义的比喻,都是不恰当的。**总经理握手,不需要员工在吧,总经理之间谈什么,不需要员工参与吧,但是网络世界不是这样的。正确的应该是,总经理之间沟通的时候,经理将总经理放在自己兜里,然后组长把经理放自己兜里,员工把组长放自己兜里,像套娃娃一样。那员工直接沟通,不带上总经理,就不恰当了。

现实生活中,往往是员工说一句,组长补充两句,然后经理补充两句,最后总经理再补充两句。但是在网络世界,应该是总经理说话,经理补充两句,组长补充两句,员工再补充两句。

那 TCP 在三次握手的时候,IP 层和 MAC 层在做什么呢?

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

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

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

问题: 我都知道那台机器的 IP 地址了,直接发给他消息呗,要 MAC 地址干啥?

这里的关键就是,没有 MAC 地址消息是发不出去的。 一个公司里,N多电脑,但是外网IP只有一个,不携带MAC地址,那么光知道是这个公司里的某台电脑发的,不知道是具体哪台电脑发的。

所谓的二层设备、三层设备,都是这些设备上跑的程序不同而已。

一个 HTTP 协议的包经过一个二层设备,二层设备收进去的是整个网络包。这里面 HTTP、TCP、 IP、 MAC 都有。

什么叫二层设备呀? 就是只把 MAC 头摘下来,看看到底是丢弃、转发,还是自己留着。

什么叫三层设备呢? 就是把 MAC 头摘下来之后,再把 IP 头摘下来,看看到底是丢弃、转发,还是自己留着。

小结

  • 始终想象自己是一个处理网络包的程序:如何拿到网络包,如何根据规则进行处理,如何发出去;
  • 始终牢记一个原则:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。

60-网络分层的真实含义是什么?相关推荐

  1. 网络分层的真实含义是什么

    网络分层的真实含义是什么? 来自极客时间 当你听到什么二层设备.三层设备.四层LB和七层LB中层的时候,是否有点一头雾水,不知道这些所谓的层,对应的各种协议具体要做什么"工作"? ...

  2. 第2讲 | 网络分层的真实含义是什么?

    长时间从事计算机网络相关的工作,我发现,计算机网络有一个显著的特点,就是这是一个不仅需要背诵,而且特别需要将原理烂熟于胸的学科.很多问题看起来懂了,但是就怕往细里问,一问就发现你懂得没有那么透彻. 我 ...

  3. 网络分层的真实含义是什么?

    目录 这四个问题你真的懂了吗? 网络为什么要分层? 程序是如何工作的? 揭秘层与层之间的关系 小结 长时间从事计算机网络相关的工作,我发现,计算机网络有一个显著的特点,就是这是一个不仅需要背诵,而且特 ...

  4. 【计算机网络】——通信协议综述(网络协议、网络分层、ifconfige命令行、DHCP与PXE)

    一.为什么学习网络协议 协议三要素: 人类和计算机之间需要沟通的协议,只有通过这种协议,计算机才知道我们想让它做什么. 可以看得出,计算机语言作为程序员控制一台计算机工作的协议,具备了协议的三要素. ...

  5. 网络篇-网络分层的含义

    OSI 七层模型 这是一个理想化的模型,给我们的网络划分了层次. 我们可以将复杂的内容简单化,每一层都专人做专事 [最底层]物理层:只关心如何传输数据,传输的是比特流 数据链路层:主要关心的是将两个设 ...

  6. 网络编程-网络分层的意义

    网络 我们生活在一个网络无处不在的一个虚拟世界中,网络中的每一个设备都是一个节点.大多是我们的计算机,但是他还可以连接其他设备,例如打印机,路由器,网关,你的手机,智能家居等.我们可以使用java与计 ...

  7. 一篇文章,只用看三遍,终生不忘网络分层

    前言 如果你对网络分层不太了解,当听到三层协议.五层协议时是不是一头雾水?不知道所谓的层是什么,所谓的协议是什么?甚至对网络通信都知之甚少,那么这篇文章一定能够让你快速学到,如果没有收获就别点赞. 网 ...

  8. 网络分层架构 ARP baidu.com 访问过程 知识点总结

    因为本身学院的课非常"国际化",基本上将软工和CS常见的一些课,例如编译原理.汇编语言.计算机网络等都用 CMU 的 ICS 和 MIT 的 CSE 代替了,因此前面那些课我都没学 ...

  9. 网络分层和数据封装与解封简括

    网络分层和数据封装与解封简括 1.网络分层思想 网络分层的思想:将复杂的流程分解为几个功能相对单一的过程 整个流程更加清晰,复杂问题简单化 更容易发现问题并针对性的解决问题 2.关于OSI分层 OSI ...

最新文章

  1. python学习笔记(开课介绍1)
  2. 开发者和矿工合二为一将是比特币世界的灾难
  3. 2021年春季学期-信号与系统-第六次作业参考答案-第十一小题
  4. 第二章:2.1 微分方程、差分方程求解(概述)
  5. Leaflet实现地图分屏联动
  6. stm32中#ifndef __LED_H的作用
  7. 维护100亿个URL
  8. No primary or default constructor found for interface java.util.List
  9. 工作293:调节删除顺序删除
  10. 黑科技绝对不能错过!随机采样方法MCMC
  11. ole db 访问接口 sqlncli 无法启动分布式事务_分布式事务,看这篇就够了
  12. python列表操作详解_Python --列表(List)详解
  13. 文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance/Good Sync/Allway Sync)
  14. MySQL入门教程:MySQL8安装卸载工具
  15. html写16进制编辑器,浏览器中的16进制编辑器 Hexed.it
  16. linux下安装jdk7
  17. c语言开发简单小游戏扫雷,利用C语言开发一个扫雷小游戏
  18. 《决胜B端》读书笔记04:互联网领域常见产品方向、盈利模式、盈利模式对产品方向的诉求
  19. 【Paper】DTWSequence Analysis
  20. 让windows xp 自动登录的两种方法及脚本

热门文章

  1. AjaxPro Ajax.Net
  2. 触摸屏技术属于计算机技术中的什么,触摸屏技术
  3. 用Python爬虫做一个短视频+评论下载小工具
  4. [转]SMART原则
  5. P2738 [USACO4.1]篱笆回路Fence Loops
  6. Ajax实现点击导航栏只切换页面内容,导航栏不变
  7. Ant构建工具知识概括
  8. 时事点评—红芯浏览器事件
  9. EPSON ESC/POS打印机指令
  10. java咖啡机故障5_咖啡机不得不知道的常见故障及解决方法