原文地址:网络分层的真实含义
知识点
- 网络分层
- 数据包处理程序
- TCP握手的背后
网络为什么分层?
因为是个复杂的程序都要分层,这是程序设计的要求, 涉及到架构和设计模式的问题,分层是各个模块业务逻辑的职责划分。
处理网络数据包的程序是如何工作的?
客户端和服务器就像没有天桥的双子楼,要从A座的24层到达B座24层就得先下楼梯再上楼梯
发送请求:封包
- 点击网页,发起HTTP请求,浏览器使用端口号发送。
- 添加TCP头,记录下源端口号。浏览器给出目的端口号,一般为80端口。
- 添加IP头,记录下源IP地址和目标IP地址。
- 添加MACtou,记录源MAC地址和目标MAC地址,目标MAC地址如果不知道,需要通过一定的协议处理过程(玄奘西行),找到MAC地址。
- 网口发出。
接受请求:拆包
- 经过网口。
- 判断mac地址是否是自己,不是则不接收。
- 判断IP地址是否是自己的,不是则转发。
- 判断地址是TCP还是UDP进行不同的逻辑处理。假设这个地址是 TCP
的,则会调用process_tcp(buffer)。这时候,Buffer
里面没有三层的头,就需要查看四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个回复包;如果是一个正常的数据包,就需要交给上层了。判断哪个应用处理,在四层的头里面有端口号,不同的应用监听不同的端口号。 - 浏览器解析HTML,显示页面。
TCP 在三次握手的时候,IP 层和 MAC 层在做什么呢?
TCP 发送每一个消息,都会带着 IP 层和 MAC 层了。
因为,TCP 每发送一个消息,IP 层和 MAC 层的所有机制都要运行一遍。
记住:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。
所以,对 TCP 协议来说,三次握手也好,重试也好,只要想发出去包,就要有 IP 层和 MAC 层,不然是发不出去的。
如同跨越没有天桥的双子楼,从A栋的4楼跑去B栋的4楼都需要经过下楼、上楼的步骤,把4楼以下的楼层跑一次。
知识复盘
网络为什么要分层?
太复杂
处理网络数据包的程序是如何工作的?
像个没有天桥的双子楼,到达服务器就要先封包下楼再拆包上楼
TCP在三次握手的时候,IP层和MAC层在做什么?
IP层和MAC层所有机制都要运行一遍,封包下楼、拆包上楼
小结
- 网络程序分层处理,下楼封包、上楼拆包
- MAC地址对上就上楼,IP地址不对就从楼中丢出去
- 楼层(TCP)与对面楼层之间不能飞跃而过,该怎么走就怎么走