二、键入网址但网页显示,期间发生了什么?

学习自(小林coding)(内容非常详细,特此在这里做一个笔记,仅供学习)

https://xiaolincoding.com/network/1_base/what_happen_url.html
image

生成HTTP请求信息

浏览器解析URL(Uniform Resource Loactor),生成发送给Web服务器的请求信息。
image

查询服务器域名对应的IP地址---寻找目的地IP

DNS服务器专门保存了Web服务器域名与IP的应对关系。

www.server.com
DNS中的域名用句点来分隔,越靠右层级越高,呈树状结构
工作流程:
image
PS:
浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」

协议栈--进行传输

1)TCP

HTTP是基于TCP协议传输

TCP报文头部格式

image
源端口号目标端口号确认发给哪个应用;
包的序号----解决包乱序的问题;
确认号---确认发出去对方是否有收到;
状态位---SYN发起一个连接,ACK为回复,RST为重新连接,FIN为结束连接;
窗口大小(缓存大小)----进行流量控制,标识自己当前的处理能力;

三次握手###### TCP传输数据之前,要先三次握手建立连接。----保证双方都有发送和接受的能力。
image

  • 客户端和服务器一开始均处于closed状态。服务期开始监听某个端口,处于Listen状态。
  • 客户端发起连接SYN,之后处于SYN_SENT状态;
  • 服务器接收发起的连接,并ACK客户端的SYN,之后一直处于SYN_RCVD状态;
  • 客户端接收到服务端发送的SYN和ACK,发送对SYN确认的ACK,之后一直处于ESTABLISHED状态,因为他一收一发成功了
  • 服务器接收到ACK的ACK之后,并一直处于ESTABLISHED状态,因为他也一收一发成功了
TCP报文中的数据部分就是存放HTTP头部+数据。

2)IP---远程定位

IP报文头部格式

image
源地址IP---客户端输出的IP地址;
目标地址IP---通过DNS域名解析得到的Web服务器IP;
当存在多个网卡时,在填写源地址 IP 时,就需要判断到底应该填写哪个地址。这个判断相当于在多块网卡中判断应该使用哪个一块网卡来发送包。

这个时候就需要根据路由表规则,来判断哪一个网卡作为源地址 IP

image

将IP地址与子网掩码进行 与运算,得到网络号,与路由表中的网址进行匹配,即可得到源地址IP。

3)MAC头部---两点传输

image

一般在TCP/IP通信里,MAC包头的协议类型只使用:
  • 0800:IP协议
  • 0806:ARP协议
    发送方的MAC地址:在网卡生产时写入到ROM中,直接读取即可;
    接收方的MAC地址
  1. 发给谁----查看路由表的匹配条目中的Gateway列中的IP地址
  2. 获取MAC地址----ARP协议----广播形式
    image

4)网卡---数字信号转换为电信号

image

  • 开头加上包头和起始帧分界符----用来表示起始位置的标记;
  • 末尾加上FCS(帧校验序列)----用于检查包传输过程中是否有损坏。

5)交换机---将网络包原样转发到目的地----电信号转换为数字信号

6)路由器

总体流程

image

  • 发送端经过层层包头后,送到服务器,服务期开始扒开数据包的MAC头部,查看是否与自己的服务器所对应的MAC地址对应;
  • 继续拆看IP头部,查看是否与自己的IP地址对应,根据 IP 头中协议项,知道自己上层是 TCP 协议
  • 继续拆看TCP头部,查看序列号是否符合,如果是就返回ACK,不是就丢弃。TCP头部还有端口号,HTTP监听这个端口号。
  • 将包发送给HTTP进程
  • 服务器里的HTTP进程看到,原来想要打开一个网页,就将这个网页封装在HTTP响应报文里;
  • 继续穿上TCP\IP\MAC头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址。
  • 从网卡出去,交由交换机转发到出城的路由器,路由器就把响应数据包发到了下一个路由器,就这样跳啊跳。
  • 最后跳到了客户端的城门把守的路由器,路由器扒开 IP 头部发现是要找城内的人,于是又把包发给了城内的交换机,再由交换机转发到客户端。
  • 客户端收到了服务器的响应数据包后,同样也非常的高兴,客户能拆快递了!
  • 于是,客户端开始扒皮,把收到的数据包的皮扒剩 HTTP 响应报文后,交给浏览器去渲染页面,一份特别的数据包快递,就这样显示出来了!
  • 最后,客户端要离开了,向服务器发起了 TCP 四次挥手,至此双方的连接就断开了。
posted @   Cassie-xiong  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示