AI摘要:TCP/IP四层模型包括应用层、传输层、网络层和数据链路层。从输入URL到页面展示,流程涉及DNS解析、TCP连接建立、网络路由、数据封装传输及服务器处理。HTTP请求中,GET通过URL传参,可缓存;POST通过请求体传参,安全性更高。
Powered by AISummary.
TCP/IP 四层模型
TCP/IP 四层模型,从顶到底分别是:应用层、连接层、网络层、数据链路层。对于 TCP/IP 相对的还有 OSI 七层网络模型,从顶到底分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。OSI 七层网络模型因为一些原因没有投入实际使用,是一个理想模型,实际我们所使用的为 TCP/IP 四层模型。他们每层的作用分别是:
- 应用层:为用户提供应用访问的协议,如 HTTP、DNS、FTP、SMTP 等
传输层:负责端到端之间的可靠传输/不可靠传输
TCP:面向连接、可靠性、保证有序。
- 三次握手、四次挥手、流量控制、拥塞控制、超时重传
- 常用于需要保证可靠性的场景如 HTTP、文字图片传送等
UDP:无链接、不保证可靠性、无需
- 常用语及时性高于可靠性的场景,如游戏音视频通话等
网络层:让数据从目标主机到源主机(跨网)
- IP 协议:提供 IP 地址、路由选择、分片重组(MTP 限制)
- ARP 协议:通过 IP 地址寻找对应 MAC 地址
- ICMP 协议:用于网络检测如 ping、telent
- NAT:通过端口复用实现多设备共用同 IP
数据链路层:让数据在同网络设备中传输(同网)
- 以太帧格式:CRC 校验、协议、数据、源 MAC 地址、目的 MAC 地址
- CRC 循环冗余校验:差错控制,不具备纠错功能
- MTU 最大 1500,在网络层如果是 IPV4 超过长度可以分片,IPV6 发送端进行分片
整体流程:
- 【应用层】用户输入 URL,进行 HTTP 请求
- 【应用层】进行 DNS 解析,将域名转为目的服务器 IP 地址
- 【传输层】通过 TCP 三次握手建立连接
【网络层】根据目标 IP 判断是否跨网(跨域不夸怎么样呢?)
- 没有跨网:【网络层】ARP 查询,根据 IP 获取目标 MAC 地址,直接封装帧发给目标主机
- 跨网:【网络层】ARP 查询网关 MAC 地址,将数据封装成帧后发给路由器,根据路由表找到最终目标
- 【链路层】将目标 MAC、源 MAC、数据、MTC、协议封装以太帧,交换机根据 MAC 表将帧转发到目标设备。
从输入 URL 到页面展示发生了什么?
浏览解析用户输入:
- 若输入为网址,则为访问网站
- 若输入为关键字,则交由搜索引擎搜索(仍然是发起一次 HTTP 请求)
浏览器检查缓存
- 强缓存:若未过期 → 本地返回,不发请求。
- 协商缓存:若强缓存失效则使用协商缓存去服务端判断,若服务器判断资源未修改 → 返回 304 Not Modified,浏览器继续用本地缓存。
- 应用层进行 HTTP 请求
应用层通过 DNS 解析域名
- ((20251201201954-921fa20 'DNS 请求过程中都发生了什么?'))
传输层建立 TCP 连接
- 第一次:客户端主动发送 SYN(我想通信)
- 第二次:服务端回复 ACK+SYN(允许,并且我能通信)
第三次:客户端回复 ACK(确认)
若使用 HTTPS,还会在 TPC 后进行 TLS 检查,交互密钥证书等等
网络层检查目标 IP 是否在同一网段
- 本网段:使用 ARP(地址解析协议) 查询目标 IP 对应的 MAC。
- 非本网段:先查询 本地网关(路由器)MAC,把数据帧先发给网关。
数据链路层封装并发送
- 构造以太网帧:源 MAC、目标 MAC、数据、MTC(1500 最大)、协议(IPV4/6)
帧经过:
- 交换机:根据 MAC 表转发
- 路由器:根据路由表进行转发
- 多跳网络 → 最终到达服务器
服务器入口(如 Nginx)处理请求
- 经过流量控制、反向代理、负载均衡等
后端程序处理逻辑:
- 将响应返回给 Nginx,再由 Nginx 转回给客户端。
浏览器接收到后,根据响应头进行解析
Content-Type: text/html→ 进入 HTML 解析、渲染流程Content-Type: application/octet-stream→ 触发 文件下载Location + 301/302→ 重定向,再次发起请求Cache-Control / ETag→ 更新缓存策略
- 浏览器进行渲染
DNS 请求过程中都发生了什么?
假设:
- 本地配置了 8.8.8.8 的 DNS 服务器(递归 DNS)
- 有一个域名 bbpad.com 使用 DNSPOD 的解析服务(顶级 DNS)
对于 DNS 请求可以分为两个阶段,第一阶段:本地缓存、第二阶段:DNS 请求
第一阶段:本地解析(不发网络请求)
- 浏览器缓存:浏览器会缓存最近一段时间的 DNS 记录
- 本地缓存:系统在解析域名后会把记录保存一段时间。如我们修改递归 DNS 服务器后,往往会使用 ipconfig/flushdns 命令,这个命令刷新的就是本地缓存,且强制下一次解析重新查询 DNS 或 hosts
❗ 注意:flushdns 不会刷新 hosts,hosts 修改立即生效。 - 本地 Hosts 文件:将域名强制绑定到指定 IP,本地开发测试使用较多,或网站 dns 解析未生效,可以自己先强制绑定使用
❗hosts 是优先级最高的域名解析文件。
第二阶段:向 DNS 服务器请求(只有本地无缓存时才发生)
- 如果本地找不到解析结果,系统会向配置的递归 DNS(如 8.8.8.8)发起解析请求。递归 DNS 会依次发起 递归查询:
- 根域名服务器:全球共 13 个,负责返回顶级域名服务器
- 顶级域名服务器:.com、.net 等域名的服务器,返回该域名所属 权威 DNS 服务器 的地址
- 权威域名服务器:如 DNSPod、Cloudflare,存放的是自己配置的解析记录。
HTTP 请求方式有哪些,GET 请求和 POST 请求的区别?
HTTP 请求方式
- GET 请求(获取数据)
- POST 请求(发送数据)
- PUT 请求(更新指定数据)
- DELETE(删除指定数据)
GET 请求和 POST 请求的区别
GET 请求:
- URL 传参,留痕、安全性低、容易泄露隐私数据且参数长度受限
- 常用于获取操作,具备天然幂等性等信(后端接口规范前提下)
- GET 请求可在浏览器直接访问
- GET 请求可以被缓存
Post 请求:
- 请求体传参,参数类型丰富,安全性高,不宜泄露,无长度限制
- 通常用于提交操作等,不具备幂等性
- POST 请求需使用工具发出
- POST 请求不会被缓存
IhaveBB