当你请求浏览器时发生了什么
网络基础
首先你在浏览器输入一个链接,这个链接里包含着域名,请求资源的目录,参数
假如请求的就是https://www.bilibili.com/video/BV1Ai4y147MS
DNS域名解析
首先查看本地缓存,是否有保存该记录,如果有,直接返回解析的IP
若没有,则请求根服务器,也就是root服务器,服务器也会有缓存,如果缓存没有,然后会返回com服务器所在地址,让我们去请求这个服务器
请求com服务器,一样有缓存机制,没找到则返回bilibili.com服务器的地址,这个得到的才是最终的服务器地址,返回的服务器IP,这个请求得到服务器IP的过程叫做DNS解析
应用层客户端发送http请求
http报文包括
报文首部(请求行+首部字段+其他)
//发送https://www.bilibili.com/video/BV1Ai4y147MS请求的报文 :authority: www.bilibili.com :method: GET :path: /video/BV1Ai4y147MS :scheme: https accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding: gzip, deflate, br accept-language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zh-TW;q=0.6 cache-control: max-age=0 cookie: CURRENT_FNVAL=16; _uuid=75CB3AB2-324E-9A06-18FD-1FC54F97B50421709infoc; buvid3=5461C39D-DED5-46B2-B14F-B0A8B23D7D7D155812infoc; rpdid=|(J|lmR|)lum0J'ul)||kmmJk; LIVE_BUVID=AUTO4215800299352148; sid=crvzlqgp; LIVE_PLAYER_TYPE=2; DedeUserID=23774625; DedeUserID__ckMd5=1108b837b6c041d8; SESSDATA=4bcb5668%2C1600843350%2Cb09e1*31; bili_jct=9002ce28a9808c7a03dd3d9433cc5237; CURRENT_QUALITY=80; PVID=1 sec-fetch-dest: document sec-fetch-mode: navigate sec-fetch-site: none sec-fetch-user: ?1 upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
空行
报文主体(发送的数据,不一定有)
传输层(建立通讯)
服务器与客户端建立可靠的TCP连接
网络层(解析地址)
IP协议的作用是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一对应的关系,一个网络设备的IP地址可以更换,但是MAC地址一般是固定不变的。ARP协议可以将IP地址解析成对应的MAC地址。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC地址来搜索下一个中转目标
链路层
在网络层找到对方的MAC地址后,就将数据发送到数据链路层传输。至此请求报文已发出,客户端发送请求的阶段结束
服务器接收报文
接收端服务器在链路层接收到数据后,删除该层的首部信息并向网络层传递,网络层将接收的数据向传输层传递,在传输层会将传输的数据按序号从组请求报文并传送给应用层。当数据传输到应用层才能算真正接收到由客户端发送过来的HTTP请求
服务器发送响应报文
响应报文和请求报文的形式差不多,不过返回了资源,response返回了网页源码
cache-control: no-cache, must-revalidate, max-age=0, no-store
content-encoding: gzip
content-type: text/html; charset=utf-8
date: Sun, 24 May 2020 05:19:17 GMT
gear: 1
idc: shjd
status: 200
vary: Origin,Accept-Encoding
vikingrmccache: 141696bv-productionvideoplay-index-av540627671-bv-productionvideoplay-page-av540627671
x-cache-webcdn: BYPASS from ks-gz-bgp-w-02
参考地址
https://www.bilibili.com/video/BV1Ai4y147MS
https://www.cnblogs.com/wxgblogs/p/5641643.html