从一个HTTP请求来研究网络分层原理
1.HTTP请求过程
从两台主机,往往是通过非常多的网络设备连到一起的,经过这么多的网络设备肯定会发生很多的问题吧,例如数据丢包数据重复等等等等,所以在网络的传输中是有非常多的问题需要解决的
2.网络分层有两种结构:
- OSI:开放系统互联参考模型
- TCP/IP 协议族
为了简化网络的复杂度,网络通信的不同方面被分解为多层次结构
3.一个HTTP请求的分层解析流程
分析:
1.首先我们在服务器部署了一个静态页面
2.这时候我们需用通过公网来访问服务器,既然要访问服务器,浏览器就要通过你的域名来解析,看看浏览器里面有没有域名对应的DNS相关信息的缓存,如果有就能直接拿到服务端的IP地址,没有的话要去你本地host文件的配置,若你没有配置的话就会发起相应的DNS请求,用来获取你服务器的IP地址
为什么要解析域名呢?
- 因为客户端和服务端进行数据交互的时候是通过IP地址来
3.这时候应用层会构造一个DNS的请求报文,然后应用层会去调用传输层的接口(DNS是使用UDP来实现数据的传输)
- 大白话就是说:应用层会调用传输层的API,然后再DNS的请求报文基础上加上一个UDP的请求头
4.然后传输层会把数据交给网络层,网络层一样会在UDP的请求报文上加一个IP的请求头
5.这时候数据回到数据链路层,数据链路层会实现一个二层的寻址,数据链路层会把自己的MAC头加上,并且会把你的请求报文会交给下一个机器的MAC地址也加上(MAC也就是常说的机器码)
6.再通过物理介质传出去,通常传到路由器上
- 路由器是一个三层的设备只有网络层,数据链路层,还有物理层
7.传到路由器要先通过物理层,然后再由物理层到数据链路层,数据链路层会看看MAC地址是不是给我的,如果是给我的那就解析,如果不是给我的那就丢弃
8.然后数据会再网上进行传输到网络层,网络层会看一下把数据传到下一个路由器的地址是多少
9.然后会把数据传到运营商的服务器上(运营商的服务器非常复杂)
- 然后如果是运营商本地的会找到对应的IP地址(再由路由器到服务器)(原路返回的样子参考)
- 如果是不同的运营商的话,运营商会用他们对应的专线进行连接
10.然后到了对方服务器,然后也会一样,一层一层的解析,最后会到应用层解析你的HTTP的请求报文,解析完以后会去构造一个HTTP的响应报文,然后响应报文再原路返回到客户端
- (数据链路层和网络层一般会解析IP地址)
- (到传输层一般会解析TPC的端口)
(个人理解,仅供参考)
本文作者:小柴Prog
本文链接:https://www.cnblogs.com/progweb/p/14470059.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· 使用TypeScript开发微信小程序(云开发)-入门篇
· 没几个人需要了解的JDK知识,我却花了3天时间研究
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持