浏览器输入url后发生了什么
2021-02-05 07:14
                         标签:请求   ssl   rdl   移动   分组   头部   等待队列   skyline   git          之后从DNS服务器中获得域名对应的ip地址     当浏览器得到了目标服务器的 IP 地址,以及 URL 中给出来端口号(http 协议默认端口号是 80, https 默认端口号是 443),它会调用系统库函数socket ,请求一个 TCP流套接字,对应的参数是  AF_INET/AF_INET6  和  SOCK_STREAM  。 操作系统的任务: 集成网卡的任务(实现以太网协议,负责组装成帧、串行/并行转换、缓存数据:由于网络上的数据率和计算机总线上的数据率并不相同,因此在网卡中必须装有对数据进行缓存的存储芯片): 再通过调制解调器把数字信号转换成模拟信号从网线发出     如上图,比特流在路由器中剖成ip数据报之后再提取出目标ip地址,并根据分组转发协议进行查找:     通过分组转发协议,得到相应的路由器或主机ip后,不是填入ip数据报,而是进行ARP将该ip地址转化为物理地址。之后将物理地址包入以太网帧,转成比特流之后继续发送。 在路由器之间移动的过程中可能会经过一些AS,顺便一提AS的路由选择协议有RIP(UDP)和OSPF(IP),AS间是BGP(TCP)     (epoll的具体流程可以看这里epoll的实现原理)   这一部分将会在后面不停进行以传输TCP segment       这里你的http服务器(可以是nginx也可以是tomcat)就会开始接受socket连接(也就是tcp连接,socket是对tcp和udp的封装),这里如果是tomcat,源码中会有 .accept 和 .register 的调用,在经过三次握手之后  如果你是采用https,则会创建ssl连接: 连接完成之后继续接收从socket拿到的数据,如果是https,后续的数据都要进行简单的解密(加密方式是使用前面获得的随机密码串作为密码参数进行对称加密) 之后就是http服务器对传来的数据进行封装,封装成http请求类等。   总结一下,这里这些操作包括ssl连接主要是http服务器对socket的调用(如Java写的Tomcat调用的accept、register、select等,为NIO部分的知识),并封装http或https对象,感兴趣可以看一下我的这篇源码解析:jdk下httpserver源码解析,https部分详情请见:Https原理     之后就是容器的各种封装了,下图是Tomcat的架构图,这里会送到最右边的Container封装成servlet。这里本来可以写不少东西,不过我没研究过,就不多说了。 前面的Connector部分的解析的话可以看这里:Tomcat中对NIO的应用       之后就是SpringMVC对Servlet的封装了,具体就不细说了,之后就是常见的SpringMVC的流程了:   至于返回到浏览器的流程就大同小异了 本文是我当前水平对这个问题所能做到的最详细的解答了,后续如果有更加深入(例如我一直没看的linux内核)的理解的话再更新吧。   因为我是后端的,就不提浏览器解析部分了,感兴趣的可以看这里:What-happens-when,里面还有从键盘按键中断开始聊起的,还蛮有意思的。   最后惯例附一图:太棒了,我逐渐理解一切.jpg(顺便佩服找不到实习还花了几天水博客的自己)   浏览器输入url后发生了什么 标签:请求   ssl   rdl   移动   分组   头部   等待队列   skyline   git    原文地址:https://www.cnblogs.com/fatmanhappycode/p/12940214.html从url到ip地址
dns解析
hosts 里找到,则将会向 DNS 服务器发送一条 DNS 查询请求(UDP,53端口)
ARP
广播发送ARP请求,单播发送ARP响应。递归查询迭代查询

 从tcp数据报到比特流
从路由器到路由器


分组转发协议
从网线到Socket


从socket到http或https


从http到servlet

从servlet到springMVC框架


上一篇:JSP显示新闻