在浏览器输入URL回车后发生了什么

在浏览器输入URL回车后发生了什么?

可以通过两个方面来聊

  1. 纯应用层的讲述(HTTP协议/DNS协议)
  2. 从网络原理角度来聊

从应用层来说 1.用户输入URL,回车之后,可能有浏览器搜索引擎的处理,比如输入一个汉字 2.浏览器通过DNS协议来解析域名,如果输入的是ip就跳过这条

    关于如何域名(domain)解析为 ip 浏览器内部有缓存,之前处理过,这个域名,所以就直接返回 找操作系统OS帮忙 1 /etc/hosts固定hosts 2 去 IPv4DNS服务器问 192.128.1.1 3 192.128.1.1知道的话,就告诉OS,不知道就去上级问,问答之后会缓存,一段时间就不用问了

3.浏览器拿到 ip + port(ip可能来自直接输入,也可能来自DNS解析)(端口可能是URL自带也可能是默认端口),HTTP/1.1以下的HTTP协议建立在TCP连接之上,需要和服务端的TCP建立连接,需要远端的ip + port 4.浏览器根据用户的输入,组装HTTP请求(默认方法都是GET),接着构建出请求,然后根据通过刚才建立的TCP连接,给对方发送请求,等待对方的回应 5.假设服务端就是Tomcat,服务端接受请求

    1 根据URL确定是哪个webapp 2 根据url+web.xml确定是哪个Servlet对象进行处理 3 调用Servlet对象的service方法执行doGet方法 4 得到响应,按照HTTP协议进行封装 5 通过建立的TCP连接把响应发送回来

6.浏览器按照HTTP相应的格式,读取这些内容,进行下一步分析

    1 根据Content-Type决定怎么处理这些内容(响应体) 2 text/plian(直接显示)text/html(开始进行html的处理)image/jpeg(显示图片) 3 假设是text/html 浏览器就会按照html标准把html,解析成DOM(文档)树,会再去请求script/link/img带来的http请求,当最后结束的时候,显示这些内容

从网络原理角度聊 起始点:浏览器要求TCP建立连接开始 1.应用层通过socket和OS提供的服务进行通信(socket就是OS提供的使用网络功能的接口) 2.Socket socket = new Socket(服务器ip, 服务器port),应用调用该方法

    1 实际上就是要求OS内部的TCP/IP协议栈,建立TCP连接 2 TCP/IP协议栈,作为连接的主动打开方,开始开始三次握手的过程—看可以多聊聊三次握手的过程 3 1 syn -> 2 syn+ack <- 3 ack -> 3 三次握手成功后,socket = new Socket()调用就会返回,代表连接已经建立

现在视角切换成数据,(具体成三次握手的第一次syn)经过那些层到达对方 1.浏览器所在设备的TCP协议栈,进行TCP Header的封装,进而把数据交给IP层去处理 2.IP层进行IP Header的封装(源IP和目标IP)根据目标ip查询路由表,确定下一跳ip然后接着查询arp表,确定mac地址,看看是否需要ip分片,最后把数据交给数据链路层 3.数据链路层封装 Data Link Header 4.数据链路层把数据交给物理层(网卡)发送数据(局域网内的广播性),哪台设备会真正的接受, 5.一般来说是网关接受了数据帧,解包分用以后交给网络层 6.网络层根据ip然后查看路由表,继续下一跳… 7.直到数据到达目标设备的目标层次

经验分享 程序员 微信小程序 职场和发展