输入网址–>浏览器缓存–>应用层生成http包–>socket库将包发送到协议栈–>传输层保证可靠传输–>网络层定位ip–>
1、首先会查看浏览器中是否有缓存,有缓存的话查看过期时间是否过期,使用缓存的方法分为强制缓存和协商缓存,强制缓存就是缓存没过期直接使用缓存,协商缓存是时间过期了浏览器将发送一个etag版本标签去询问服务器查看访问的资源是否有更新,如果无更新则响应可直接使用缓存,如果有更新,则响应新内容并重新打etag标签。(一般缓存的都是get请求的资源,因为get方法是安全且幂等的,资源内容一般不会发生改变)。
2、当缓存没有命中的时候,浏览器会解析url的内容(对应的域名和服务器资源文件地址),生成http请求报文,包括请求头,请求体。
3、这个时候需要DNS解析url为服务器域名对应的IP地址了,首先客户端会查询本地的DNS服务器,如果有则直接返回对应ip地址,否则将会去根域名服务器(.)去询问,根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中,然后再去顶级域DNS服务器(.com,cn等)询问,最后再去权威DNS服务器询问(baidu.com),这时候就找到了对应的ip地址返回给本地DNS服务器,本地DNS在返回给客户端。
4、这个时候知道目标IP了,浏览器的请求报文也准备好了,就该协议栈出来包装请求报文了。浏览器通过调用socket库来委托协议栈工作。
5、传输层。此时数据包来到了传输层,这里有俩个最常用的协议TCP/UDP协议,TCP会将数据包加上TCP报头,其中包括源端口号、目的端口号,确定包顺序的序号,确认包是否收到的确认号,还有握手挥手中所需要的状态号(SYN发起连接请求号,ACK确认收到请求号,RST重新连接,FIN结束连接,URG紧急传输),还有一个窗口大小用来做流量控制、拥塞控制(保证发送方别发数据太快,接收方能接受多少数据),首部长度、紧急指针、校验和。TCP分割数据,如果 HTTP 请求消息比较长,超过了 MSS 的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。UDP头部只有传输四要素(源IP、目的IP、源端口、目的端口)。
6、网络层。网络层会将传输层发来的包再加上ip头部。包括源地址IP和目的地址IP,协议号(TCP为06十六进制)等。光一个IP地址还不能够精确的定位到某一台机器,因此需要ARP协议去获得MAC地址(唯一标识一台机器),这时会给IP包加上MAC头部,包括源MAC地址、目的MAC地址,协议类型,ARP通过广播、不断的询问路由器获得接收方MAC地址,当获得之后操作系统将会缓存几分钟。到这一步,数据已经全部封装完毕准备发货。
7、物理层,最后通过网卡、路由器、交换机发送到目的地。
来自小林coding学习总结
键入网址到网页显示,期间发生了什么?
最新推荐文章于 2024-04-30 15:15:00 发布