从输入URL到页面加载发生了什么

1 篇文章 0 订阅

从输入URL到页面加载发生了什么

过程概述

参考:从输入URL到页面加载发生了什么?(参考1)
从输入 URL 到页面加载完成的过程中都发生了什么(参考2)

  1. 浏览器查找域名对应的ip(DNS解析)
  2. 浏览器根据ip地址与服务器建立连接(tcp)
  3. 建立连接后,浏览器发送http请求(http请求头,请求方式)
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器接收到部分html文件后开始渲染显示网页。执行html代码时,根据需要继续请求图片、css、js等文件(js的事件循环),请求过程同请求html
  6. 断开连接(四次挥手)(tcp什么时候断开?)

DNS和CDN

参考 CDN与DNS知识汇总

DNS

DNS(Domain Name System),即域名系统,是一个分布式数据库,功能是联系域名和ip地址。ip是服务器的真实地址,域名是便于记住的名称,多个IP可以设置为一个域名,一个 IP 地址也可以绑定多个域名。
DNS解析就是通过域名查找IP的过程

DNS解析过程

以浏览器输入www.example.com为例

  1. 检查浏览器缓存
  2. 检查操作系统缓存,常见的如hosts文件
  3. 检查路由器缓存
  4. 如果前几步都没没找到,会向ISP(网络服务提供商)的LDNS服务器查询
  5. 如果LDNS服务器没找到,会向跟域名服务器(Root Server)请求解析,分为以下几步:
  • 5.1 跟服务器返回顶级域名(TLD)服务器,如 .com,.cn,.org等的地址,全球只有13台,该例子中会返回.com的地址
  • 5.2 接着向TLD发送请求,然后会返回次级域名(SLD)服务器的地址,本例子会返回.example的地址
  • 5.3 接着向SLD域名服务器通过域名查询目标IP,本例子会返回www.example.com的地址
  • 5.4 Local DNS Server会缓存结果,并返回给用户,缓存在系统中。

如果一个域名对应多个IP,会返回哪个IP?

补充

域名与 URL 是两个概念:域名是一台或一组服务器的名称,用来确定服务器在 Internet 上的位置;URL 是统一资源定位符,用来确定某一个文件的具体位置

CDN

CDN(Content Delivery Network),即内容分发网络,即内容分发网络,能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上,返回该服务节点IP。
CDN服务本身并不具备DNS解析功能,而是依托于DNS智能解析功能

CDN解析过程

见参考
CDN与DNS知识汇总
一张图说明CDN网络的原理

浏览器与客户端建立连接

TCP/IP、Http、Socket的区别

参考:TCP/IP、Http、Socket的区别

关于http和tcp的关系:

“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

而socket实际上是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。关于socket和tcp的关系:

“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”

OSI网络参考模型与TCP/IP协议簇

参考:一文读懂OSI七层模型与TCP/IP四层的区别/联系

OSI

OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,定义了网络互连的七层框架,是学术上和法律上的国际标准,而TCP/IP参考模型是事实上的国际标准。分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层

TCP/IP

TCP/IP(Transmission Control Protocol/Internet Protocol),即传输控制协议/网间协议,TCP/IP的开发时间在OSI之前,从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中,而OSI则指定了哪个功能是属于哪一层的。

  • 应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
  • 传输层:TCP,UDP
  • 网络层:IP,ICMP,OSPF,EIGRP,IGMP
  • 数据链路层:SLIP,CSLIP,PPP,MTU
socket

参考:简单理解Socket

socket:套接字,在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,以实现进程在网络中通信。
服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手。

TCP

参考:TCP和UDP的区别
TCP(Transmission Control Protocol),即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP(Transmission Control Protocol),即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,流就是指不间断的数据结构,可靠指在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次“对话”才能建立起来

与UDP的区别(补充介绍下UDP)

参考:一文搞懂TCP与UDP的区别
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

TCP三次握手

参考:简单理解Socket
参考2

  1. 主机向服务器发送一个建立连接的请求(您好,我想认识您)。(向服务器发送syn包(同步序列编号Synchronize Sequence Numbers))
  2. 服务器接到请求后发送同意连接的信号(好的,很高兴认识您)。(服务器发送SYN+ACK包)
  3. 主机接到同意连接的信号后,再次向服务器发送了确认信号(我也很高兴认识您),自此,主机与服务器两者建立了连接。(客户端发送确认包ACK)
TCP三次握手补充

TCP没有双信道使用,TCP协议的制定者,为了提高效率,减少IP包的数目,最大可能地将信令数据、应用数据合二为一,因此第三次握手是可以携带数据的

若没有第三次握手,服务器端在收到请求就会建立连接,若此时客户端已失效的连接请求报文段突然又传送到了服务端,服务端就会建立新的连接,一直等待客户端发送数据,造成资源的浪费。

TCP四次挥手

参考2

  1. 主机向服务器发送一个断开连接的请求(不早了,我该走了)
  2. 服务器接到请求后发送确认收到请求的信号(知道了)
  3. 服务器向主机发送断开通知(我也该走了)
  4. 主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接
TCP四次挥手补充
  • 为什么服务器在接到断开请求时不立即同意断开:当服务器收到断开连接的请求时,可能仍然有数据未发送完毕,所以服务器先发送确认信号,等所有数据发送完毕后再同意断开
  • 第四次握手后,主机发送确认信号后并没有立即断开连接,而是等待了 2 个报文传送周期,原因是:如果第四次握手的确认信息丢失,服务器将会重新发送第三次握手的断开连接的信号,而服务器发觉丢包与重新发送的断开连接到达主机的时间正好为 2 个报文传输周期
http

HTTP(Hyper Text Transfer Protocol),即超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议,基于TCP/IP通信协议来传递数据。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息

http的长连接短链接

参考:HTTP Connection 头(header)说明:keep-alive和closer的区别

HTTP协议采用“请求-应答”模式。当使用普通模式,即非Keep-Alive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(服务器主动关闭TCP连接,客户端被动关闭连接);当使用Keep-Alive模式(又称持久连接、连接重用)时,则该连接会保持一段时间,在该时间内可以继续接收请求

在HTTP/1.0里,为了实现client到web-server能支持长连接,必须在HTTP请求头里显示指定Connection:keep-alive

在HTTP/1.1里,就默认是开启了keep-alive,要关闭keep-alive需要在HTTP请求头里显示指定
Connection:close

如何判断一次请求完成

非keep-alive模式:
发送完数据HTTP服务器会自动断开连接,可以使用返回EOF(-1)来判断

keep-alive模式

  • 使用消息首部字段Conent-Length
    Conent-Length表示实体内容长度,客户端(服务器)可以根据这个值来判断数据是否接收完成
  • 使用消息首部字段Transfer-Encoding
    动态页面等时,服务器是不可能预先知道内容大小,这时就可以使用Transfer-Encoding:chunk模式,即如果要一边产生数据,一边发给客户端。chunk编码将数据分成一块一块的发生。Chunked编码将使用若干个Chunk串连而成,由一个标明长度为0 的chunk标示结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值