目录

一、四个问题

二、网络为什么分层?

三、程序时如何工作的

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 头摘下来,看看到底是丢弃、转发,还是自己留着。

网络协议——一张图看懂网络分层相关推荐

  1. 一张图看懂阿里云网络产品[二] 专有网络VPC

    摘要: 一张图看懂网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 一张图看懂阿里云网络产品系列文章,让用户用最少的时间了解网络产品,本文章是第二篇 专有网络VPC 系 ...

  2. 一张图看懂2017双11中的网络产品和技术

    摘要: 大家都知道,2017年双11又创造了新纪录,全天交易额1682亿,交易峰值32.5万笔/秒,支付峰值25.6W笔/秒,狂欢的背后是极其复杂庞大的技术系统,其中就有大量阿里云云计算相关的产品和技 ...

  3. 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别...

    一张图看懂开源许可协议,开源许可证GPL.BSD.MIT.Mozilla.Apache和LGPL的区别 转载于:https://www.cnblogs.com/jingzhishen/p/589278 ...

  4. 一张图看懂Battery Charging Specification 1.2(BC1.2)USB充电协议

    一张图看懂Battery Charging Specification 1.2(BC1.2)USB充电协议 作者:AirCity 2019.11.2 本文所有权归作者Aircity所有 Aircity ...

  5. 开源项目许可证相关-一张图看懂几种开源许可证

    常见的几种许可 开源许可证允许每个人出于任何目的使用.修改和共享许可软件,前提是要保持软件的来源和开放性.以下许可证从要求条件严苛程度递减排序,从最严苛(GNU AGPLv3)到没有条件(未许可).请 ...

  6. 一张图看懂微服务架构路线

    目录 一张图看懂微服务架构路线 我为什么选择微服务架构? 微服务架构路线 基本思路 Docker 容器编排 Docker 容器管理 API网关 负载均衡 服务发现 事件总线 日志记录 监控和警报 分布 ...

  7. 一张图看懂图像识别算法发展历史

    一张图看懂图像识别算法发展历史

  8. 【转】几张图看懂列式存储

    几张图看懂列式存储 转载于:https://www.cnblogs.com/apeway/p/10870211.html

  9. 鸿蒙分布式体验,一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验

    原标题:一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验 [手机中国新闻]9月10日下午,华为召开HDC2020大会,全新的HarmonyOS 2.0正式发布.新系统的分布式能力全面升级,同时 ...

最新文章

  1. linux getty进程 cpu占用过高 解决办法
  2. 1.15 异常处理规则
  3. CSS Hack 汇总速查一览
  4. Random Forest
  5. leetcode 397 整数替换
  6. 【原码, 反码, 补码的基础概念和计算方法】
  7. LoggingFilter Session 以及Async
  8. RecyclerView子View不刷新(RequestLayout无效),RecyclerView.mEatRequestLayout
  9. Redis迭代查询详解及其使用:Scan命令、Sscan命令、Hscan命令、Zscan命令
  10. 亚马逊吸尘器需要提交UL1017测试报告,亚马逊要求提供ISO17025资质机构出具的UL报告
  11. 淘宝平台搜索规则变化,怎么提升搜算转换率?
  12. js中函数传参的问题
  13. 2021-10-06 BGP错误配置导致脸书网络瘫痪
  14. 主流消费级固态硬盘SSD接口
  15. 笔记本有线网络共享为WiFi
  16. SQL使用函数处理数据
  17. 谈谈如何设计好网站的 URL
  18. ������ʾ����
  19. html邮箱图标代码,CSS3 单元素邮件图标
  20. html 获取浏览器语言,js之获取浏览器语言

热门文章

  1. 计算机软件工程、计算机科学与技术、大数据专业开题报告如何撰写?不懂的可以看下以下模板
  2. 企业发展理论(八):知识理论
  3. perl 数组元素为空和数组元素为undef 是两码事
  4. 浙江理工大学数字电子技术课程设计
  5. php网站作业秦皇岛美食,舌尖上的河北,河北省秦皇岛市的美食有哪些?十大必吃美食推荐!...
  6. 职场也是情场,总有“小三”对你虎视眈眈!
  7. 制作条码(barcode)
  8. 最近流行的QQ爱情说说:爱情可以让人忘了时间
  9. 三年级计算机群鸭戏水教案导入,三年级下册信息技术教案37群鸭戏水自选图形清华大学版.doc...
  10. Affordance Detection of Tool Parts from Geometric Features