浏览器输入网址到获取响应的过程
- 1.输入网址:
www.baidu.com
,回车后。。。 - 2.查询
DNS
缓存,首先依次查询浏览器DNS缓存
,操作系统本地缓存
,路由器缓存
以及ISP服务缓存
,如果还查不到,就发起DNS查询,搜索DNS服务器; - 3.通过ARP协议,实现从IP地址到MAC地址的映射,即查询目标IP对应的MAC地址;
- 4.浏览器获取到目标服务器IP和MAC地址后,会准备TCP数据包,并建立起与目标服务器的连接;【TCP/IP三次握手,四次挥手】
- 5.TCP连接建立完成后,就开始数据传输,浏览器会发送HTTP请求(一般就指POST/GET),请求成功后,服务器根据请求返回响应体,包括请求页面,状态码,压缩类型,cookie,等等;
- 6.浏览器根据返回的页面,构建渲染树,显示请求的页面,详见
浏览器如何显示页面(二)
DNS解析
DNS:域名系统,是一个分布式的数据库,它用于维护网址 URL 到其 IP 地址的映射关系;
- 输入网址后不会一开始就进行DNS服务器查询,而是先看缓存数据
如图,浏览器会依次从浏览器DNS缓存
,系统缓存
,路由器缓存
和ISP服务缓存
中查找URL对应的IP地址,如果还是没有找到,就说明没有DNS缓存,即开始发起DNS服务请求查询;
- DNS查询
DNS服务: 是分布式域名服务器,每台服务器维护一部分IP地址到URL的映射,没有任何一台服务器可以支撑全部的映射关系;
DNS通过递归查询
,DNS迭代查询
和非递归查询
三种方式去查找URL对应的IP地址;
ARP请求
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。其作用是在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的
- MAC地址是设备的一种标识,具有全球唯一性。
- MAC地址是物理层的,应用于数据链路层,当一个数据报文要发送时,先添加源目ip地址,再添加源目mac地址,对端收到后,会拆解数据报文,先拆mac地址,然后查看数据报文的目的ip是不是自己;
- 如果是,就会把数据报文自己留下来;
- 如果不是,就会查自己的路由表,看有没有目的ip在里面,有的话,再次把已经拆解的数据报文再次添加上mac地址,继续往下传;
综上,数据传输需要依赖MAC地址,此时ARP协议就实现了IP地址到MAC地址的解析;
TCP/IP协议
经过DNS和ARP流程后,浏览器会获取到目的服务器的IP和MAC地址,然后根据TCP/IP
协议建立数据连接;
需要明确的是,此处说的TCP/IP
协议,是指一个协议族,并不存在一种名叫TCP/IP的特定协议
,该协议族包含,TCP协议
,IP协议
,IMCP协议
,HTTP协议
等,包含了TCP/IP四层模
型中的应用层
,传输层
,网络层
,数据链路层
等
IP协议
- IP协议作用于网络层,也叫网际协议;
- 作用:各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址;
- IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址;
- IP 地址可以和 MAC 地址进行配对。IP 地址可变换,受所在区域网络影响,但 MAC地址基本上不会更改。
TCP协议
- 按层次分,TCP 位于传输层,提供可靠的字节流服务;
- 字节流服务:为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理;
- TCP可靠性策略:TCP 协议采用了三次握手(three-way handshaking)策略;三次握手的过程其实就是浏览器和服务器交换 SYN 同步和 ACK 确认消息的过程。
假设图中左端是客户端主机,右端是服务端主机,一开始,两端都处于CLOSED(关闭)状态。
1.服务端进程准备好接收来自外部的
TCP
连接。然后服务端进程处于LISTEN
状态,等待客户端连接请求。
2.客户端向服务器发出连接请求,请求中首部同步位SYN = 1
,同时选择一个初始序号sequence
,简写seq = x
。SYN
报文段不允许携带数据,只消耗一个序号。此时,客户端进入SYN-SEND
状态。
3.服务器收到客户端连接后,,需要确认客户端的报文段。在确认报文段中,把SYN
和ACK
位都置为 1 。确认号是ack = x + 1
,同时也为自己选择一个初始序号seq = y
。请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。此时,TCP 服务器进入SYN-RECEIVED
(同步收到) 状态。
4.客户端在收到服务器发出的响应后,还需要给出确认连接。确认连接中的 ACK 置为 1 ,序号为seq = x + 1
,确认号为ack = y + 1
。TCP 规定,这个报文段可以携带数据也可以不携带数据,如果不携带数据,那么下一个数据报文段的序号仍是seq = x + 1
。这时,客户端进入ESTABLISHED
(已连接) 状态
5.服务器收到客户的确认后,也进入ESTABLISHED
状态。
其中,在确认阶段来回发送了三次报文信息,也称三次握手
;
- 首先,浏览器向服务器发送一个连接请求,表明需要开始向服务器发送请求数据了;
- 其次,服务收到连接请求后,会发送一个确认收到连接请求的确认报文;
- 第三,浏览器收到服务器回传的确认报文后,再次向服务器发送确认收到服务端的确认信息;
- 第四,此时客户端,服务端都明确建立了连接,就开始传输数据;
四次挥手:
当连接需要端开时,在客户端和服务端,任何一方都可以断开连接,但必须是一方主动断开,另一方被动断开;
四次挥手:
- 客户端想要释放连接,向服务端发送TCP报文,请求断开
- 服务端收到请求后,确认客户端想要断开连接,返回收到确认的报文,并开始准备断开连接
- 服务端在准备好断开连接后,进入等待断开状态,并发送报文给客户端,自己准备好了;
- 客户端在收到服务端准备好断开连接信息后,客户端发送确认报文,自己知道服务端准备好了
- 服务端开始断开连接;【这种情况下,最后是服务端断先断开连接】
前"两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务器端了解了自己想要释放连接的请求。于是,可以确认关闭客户端到服务器端方向上的连接了
后“两次挥手”既让客户端知道了服务器端准备好释放连接了,也让服务器端知道了客户端了解了自己准备好释放连接了。于是,可以确认关闭服务器端到客户端方向上的连接了,由此完成“四次挥手
UDP协议
1.用户数据协议,与TCP协议一样处于传输层;
2.面向无连接,有数据就直接发送,不会确定稳定的连接;
3.有单播,多播,广播等功能;
4.发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文
5.不可靠,不需要建立连接,想发就发;
HTTP协议
- 当服务端和客户端建立稳定的连接后,就开始互通信息,此时需要用到HTTP协议进行通信;
- HTTP协议中,
POST
或者GET
是最常用的请求,客户端发送POST
或GET
请求后,服务端会返回请求响应体; - 获取到响应信息,浏览器就可以开始构建渲染树,并展示在页面中;
参考
TCP/IP协议
三次握手/四次挥手
MAC地址用处
浏览器输入网址后…
ARP协议详解
有了IP地址为什么还要mac地址