| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 网络协议——一张图看懂网络分层 -> 正文阅读 |
|
[网络协议]网络协议——一张图看懂网络分层 |
目录 一、四个问题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 头摘下来,看看到底是丢弃、转发,还是自己留着。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:29:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |