浏览器地址输入一个域名发生了什么(用类比的方法来理解)

时间:2021-06-09 13:38:35
URL包含什么:
协议(如:http) + 域名(如:baudu.com) + 文件路径(如:/htm_data/20/1510.html) + 端口(如:80)

开始——
os:我要输入啦
1.输入baidu.com

os:怎么完整的一个URL都不给,算了先找找用了什么协议
2.查找该域名是不是在浏览器的 预加载HSTS中,如果在就自动使用HTTPS协议(http的加密版=http+ssl)不在就自动使用http

os:现在我得赶紧通过域名找到ip
3.利用DNS(域名系统)找对应的ip
3.1.浏览器有没有 这个网址映射关系
3.2. 本地的hosts文件是否有这个网址映射关系
3.3.我设置的本地DNS服务器有没有(360,google等等提供的)
3.3.1.如果我里面没有,但有人用本地服务器访问过,缓存了,那么我也返回ip,但
     是这个不具有权威性

3.4.未设置转发模式的话,直接发送到根DNS(黄帝呀)询问.com谁管,找到管理.com
的*DNS ip后,在*DNS服务器查找,*域名找下面的xxx.com服务器,直到  
找到xxx.baidu.com
3.4.1.如果没有xxx那是域名管理者可以设置自己的域名指向,比如百
   度,设置 www.baidu.com 指向自己的ip,同时也可以设置baidu.com指向自己的i
   p,这样访问者不输入www也可以访问了
3.4.2.服务器给浏览器响应一个301永久重定向响应,这样浏览器就会访
   问“http://www.facebook.com/” 而非“http://facebook.com/”

os:重要找到了ip,该看看这个ip到底对应这我们计算机界得谁了
4.通过ARP( 地址解析协议) 查找物理地址
4.1首先,每台主机都会在自己的ARP缓冲区中建立一个 ARP列表,以表示IP地址和
MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先
检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有,就直接将数
据包发送到这个MAC地址;
4.2如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的
MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机
的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是
否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将
发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该
IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己
是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主
机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传
输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

os:终于找到它了可是它能说话不,能听到我说话不,喂喂喂
5.三次握手建立连接
os:喂(syn),我爱你(seq),
5.1 客户端 A发送位码为SYN=1,随机产生ack=x的数据包到服务器,主机B由SYN=1知道,A要
   求建立联机;

os:嗯(ACK=1),我也爱你(ack=x+1),喂(SYN),我们可以在一起吗(ack=y)!
5.2服务器收到SYN请求和数据x,然后发送ACK=1( 确认编号(Acknowledgement
Number)),主机A得随机数x+1,发送连接请求SYN=1,和随机数y。

os:恩恩恩(ACK=1), 在一起在一起 (ack=y+1)
5.3:客户端收到SYN和ack, 然后发送ACK=1 ,主机A的随机数y+1。

os:我们真的在一起了耶
5.4:服务器收到确认消息建立起TCP连接

6.页面开始显示
6.1. 但是显示那个文件夹呢?其实,web服务器会查看当前的跟目录,寻找默认的网页,一般是index.html,当然,可以通过配置网页去修改。再返回给web浏览器。所以,当我们访问www.baidu.com的时候,浏览器会自动帮我们加上http://,变成http://www.baidu.com.
而百度的服务器,收到该请求后,会自动加上/,变成:
http://www.baidu.com/.
并且每一次请求完成后会释放一次(也就是四次挥手)
7.四次挥手
os:送过去戒指(FNI)和一句我们分手吧(sqe1),然后开始等待( FIN_WAIT_1
7.1.客户端发送FIN(finish)和sqe1给服务器,告诉服务器结束连接,然后进入 FIN_WAIT_1状态

os:我知道了(ack),我知道你要和我分手了(sqe+1),让我想想( FIN_WAIT_1)
7.2.服务器发送确认消息,和随机sqe+1,然后进入( FIN_WAIT_1)状态

os:我想明白了我们结束吧(FIN),就这样了吗(sqe2)
7.3.服务器发送FIN和sqe2给客户端,服务器进入(Last_ack)

os:嗯(ACK),就这样吧(sqe2+1),说完之后久久没有离开(2秒钟)
7.4:客户端收到确认消息(ACK),向服务器发送确认消息(sqe2+1)