输入url回车会发生什么

1输入要网址

2浏览器通过DNS查找域名的IP地址

dns(域名系统)

3建立TCP连接

1 先是客户端发起请求过程:

2 然后是服务端接受请求处理阶段:

知识点1五层协议

知识点2 三次握手,四次挥手

4 HTTP请求

5 服务器发送响应

6浏览器渲染页面


1输入要网址

2浏览器通过DNS查找域名的IP地址

  1. 浏览器缓存-

浏览器会缓存DNS记录一段时间. 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。

(域名系统(服务)协议(DNS)一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送。)

       2系统缓存-

若在浏览器中没有找到需要的记录,浏览器会做一个系统调用,利用gethostbyname,获得系统的缓存中的记录

       3路由器缓存,

若系统缓存没有,则会将查询请求发送至路由器,它一般会有自己的DNS缓存。

      4 ISP DNS缓存-

接下来要check的就是ISP缓存DNS的服务器,在这一般能找到相应的缓存记录。

(ISP(Internet Service Provider),互联网服务提供商,即向广大用户综合提供互联网接入业务、信息业务和增值业务的电信运营商。ISP是经国家主管部门批准的正式运营企业,享受国家法律保护。)

      5 递归搜索-(这里要细化)

你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。

dns(域名系统)

域名系统英文Domain Name System缩写DNS)是互联网的一项服务。它作为将域名IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网DNS使用TCPUDP端口53[1]。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

开始时,域名的字符仅限于ASCII字符的一个子集。2008年,ICANN通过一项决议,允许使用其它语言作为互联网顶级域名的字符。使用基于Punycode码的IDNA系统,可以将Unicode字符串映射为有效的DNS字符集。因此,诸如“XXX.中国“XXX.美国的域名可以在地址栏直接输入并访问,而不需要安装插件。但是,由于英语的广泛使用,使用其他语言字符作为域名会产生多种问题,例如难以输入,难以在国际推广等。

简单来说就是一个将域名翻译成ip地址的系统。

 

3建立TCP连接

(这里使用五层协议更详细的描述如何建立这个TCP链接的)

1 先是客户端发起请求过程:

1. 使用应用层发起HTTP请求(这个可以根据你本身输入的url访问时,用的什么协议就发起对应协议去进行请求)

2. 然后是传输层的TCP协议为传输报文提供可靠的字节流服务,这里也就使用了TCP三次握手

3. 网络层是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址

4. 然后才是链路层将数据发送到数据链路层传输。至此请求报文已发出,客户端发送请求的阶段结束

 

2 然后是服务端接受请求处理阶段:

原路进行处理:链路层—>网络层—>传输层—>应用层然后响应客户端发送报文。

参考链接https://blog.csdn.net/weixin_41563161/article/details/102233985

知识点1五层协议

1 第五层——应用层(application layer) 

  • 应用层(application layer):是体系结构中的最高。直接为用户的应用进程(例如电子邮件、文件传输和终端仿真)提供服务
  • 在因特网中的应用层协议很多,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议,支持文件传送的FTP协议,DNS,POP3,SNMP,Telnet等等。

2. 第四层——运输层(transport layer)

  • 运输层(transport layer):负责向两个主机中进程之间的通信提供服务。由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能
  • 复用,就是多个应用层进程可同时使用下面运输层的服务。
  • 分用,就是把收到的信息分别交付给上面应用层中相应的进程。
  • 运输层主要使用以下两种协议: 
    (1) 传输控制协议TCP(Transmission Control Protocol):面向连接的,数据传输的单位是报文段,能够提供可靠的交付。 
    (2) 用户数据包协议UDP(User Datagram Protocol):无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“尽最大努力交付”。

3. 第三层——网络层(network layer)

  • 网络层(network layer)主要包括以下两个任务:
  • (1) 负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,或简称为数据报。
  • (2) 选中合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。
  • 协议:IP,ICMP,IGMP,ARP,RARP

4. 第二层——数据链路层(data link layer)

  • 数据链路层(data link layer):常简称为链路层,我们知道,两个主机之间的数据传输,总是在一段一段的链路上传送的,也就是说,在两个相邻结点之间传送数据是直接传送的(点对点),这时就需要使用专门的链路层的协议。
  • 在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧(framing),在两个相邻结点之间的链路上“透明”地传送帧中的数据。
  • 每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。典型的帧长是几百字节到一千多字节。
  • 注:”透明”是一个很重要的术语。它表示,某一个实际存在的事物看起来却好像不存在一样。”在数据链路层透明传送数据”表示无力什么样的比特组合的数据都能够通过这个数据链路层。因此,对所传送的数据来说,这些数据就“看不见”数据链路层。或者说,数据链路层对这些数据来说是透明的。 
    (1)在接收数据时,控制信息使接收端能知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提取出数据部分,上交给网络层。 
    (2)控制信息还使接收端能检测到所收到的帧中有无差错。如发现有差错,数据链路层就简单地丢弃这个出了差错的帧,以免继续传送下去白白浪费网络资源。如需改正错误,就由运输层的TCP协议来完成。

5. 第一层——物理层(physical layer)

  • 物理层(physical layer):在物理层上所传数据的单位是比特。物理层的任务就是透明地传送比特流。

知识点2 三次握手,四次挥手

链接https://blog.csdn.net/weixin_41563161/article/details/101054051

4 HTTP请求

在确认与服务器建立连接后,便会发送一个HTTP请求,HTTP请求的报文主要包括请求行,请求头,请求正文。
请求行的内容一般类似于:GET index.html HTTP/1.1
请求头的内容一般如下,可以通过浏览器开发者工具查看
比如要通过get请求访问“http://www.dydh.org/”,通过抓包可以看到:

请求网址(url):http://www.dydh.org/

请求方法:GET

远程地址:IP

状态码:200 OK

Http版本: HTTP/1.1

请求头: ...

响应头: ...

注意.HTTP是无连接无状态的,即HTTP在传输完成后就会断开,并且下一次登录时不会记录上次的登录状态。

 

5 服务器发送响应

服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。

状态码主要包括以下部分

1xx:指示信息–表示请求已接收,继续处理。

2xx:成功–表示请求已被成功接收、理解、接受。

3xx:重定向–要完成请求必须进行更进一步的操作。

4xx:客户端错误–请求有语法错误或请求无法实现。

5xx:服务器端错误–服务器未能实现合法的请求。

响应头主要由Cache-Control、 Connection、Date、Pragma等组成
响应体为服务器返回给浏览器的信息,主要由HTML,css,js,图片文件组成
* 报文首部(HTTP/1.1 200 OK)
- HTTP版本
- 响应状态码
- 状态码信息
* 空行(CR+LF)
* 报文主体

6浏览器渲染页面

客户端拿到服务器端传输来的文件,找到HTML和MIME文件,通过MIME文件,浏览器知道要用页面渲染引擎来处理HTML文件。

 

a.浏览器会解析html源码,然后创建一个 DOM树。

在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点。

b.浏览器解析CSS代码,计算出最终的样式数据,形成css对象模型CSSOM。

首先会忽略非法的CSS代码,之后按照浏览器默认设置——用户设置——外链样式——内联样式——HTML中的style样式顺序进行渲染。

c.利用DOM和CSSOM构建一个渲染树(rendering tree)。

渲染树和DOM树有点像,但是是有区别的。

DOM树完全和html标签一一对应,但是渲染树会忽略掉不需要渲染的元素,比如head、display:none的元素等。

而且一大段文本中的每一个行在渲染树中都是独立的一个节点。

渲染树中的每一个节点都存储有对应的css属性。

.浏览器就根据渲染树直接把页面绘制到屏幕上。