本文介绍了TCP/IP四层模型(应用层、传输层、网络层、数据链路层)及其各层功能,详细阐述了从输入URL到页面展示的完整网络请求流程,包括DNS解析、TCP连接、数据封装与路由等核心步骤,并对比了HTTP请求中GET与POST方法的主要区别。
TCP/IP 四层模型,从顶到底分别是:应用层、连接层、网络层、数据链路层。对于 TCP/IP 相对的还有 OSI 七层网络模型,从顶到底分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。OSI 七层网络模型因为一些原因没有投入实际使用,是一个理想模型,实际我们所使用的为 TCP/IP 四层模型。他们每层的作用分别是:
应用层:为用户提供应用访问的协议,如 HTTP、DNS、FTP、SMTP 等
传输层:负责端到端之间的可靠传输/不可靠传输
TCP:面向连接、可靠性、保证有序。
UDP:无链接、不保证可靠性、无需
网络层:让数据从目标主机到源主机(跨网)
数据链路层:让数据在同网络设备中传输(同网)
整体流程:
【应用层】用户输入 URL,进行 HTTP 请求
【应用层】进行 DNS 解析,将域名转为目的服务器 IP 地址
【传输层】通过 TCP 三次握手建立连接
【网络层】根据目标 IP 判断是否跨网(跨域不夸怎么样呢?)
【链路层】将目标 MAC、源 MAC、数据、MTC、协议封装以太帧,交换机根据 MAC 表将帧转发到目标设备。
浏览解析用户输入:
浏览器检查缓存
应用层进行 HTTP 请求
应用层通过 DNS 解析域名
传输层建立 TCP 连接
第一次:客户端主动发送 SYN(我想通信)
第二次:服务端回复 ACK+SYN(允许,并且我能通信)
第三次:客户端回复 ACK(确认)
若使用 HTTPS,还会在 TPC 后进行 TLS 检查,交互密钥证书等等
网络层检查目标 IP 是否在同一网段
数据链路层封装并发送
构造以太网帧:源 MAC、目标 MAC、数据、MTC(1500 最大)、协议(IPV4/6)
帧经过:
服务器入口(如 Nginx)处理请求
后端程序处理逻辑:
浏览器接收到后,根据响应头进行解析
Content-Type: text/html → 进入 HTML 解析、渲染流程Content-Type: application/octet-stream → 触发 文件下载Location + 301/302 → 重定向,再次发起请求Cache-Control / ETag → 更新缓存策略浏览器进行渲染
假设:
对于 DNS 请求可以分为两个阶段,第一阶段:本地缓存、第二阶段:DNS 请求
第一阶段:本地解析(不发网络请求)
浏览器缓存:浏览器会缓存最近一段时间的 DNS 记录
本地缓存:系统在解析域名后会把记录保存一段时间。如我们修改递归 DNS 服务器后,往往会使用 ipconfig/flushdns 命令,这个命令刷新的就是本地缓存,且强制下一次解析重新查询 DNS 或 hosts ❗ 注意:flushdns 不会刷新 hosts,hosts 修改立即生效。
本地 Hosts 文件:将域名强制绑定到指定 IP,本地开发测试使用较多,或网站 dns 解析未生效,可以自己先强制绑定使用 ❗hosts 是优先级最高的域名解析文件。
第二阶段:向 DNS 服务器请求(只有本地无缓存时才发生)
HTTP 请求方式
GET 请求和 POST 请求的区别
GET 请求:
Post 请求:
推荐阅读
评论 (0)
还没有评论
做第一个留言的人吧