1、网络的五层结构
常见的ISP,有分层,自己连到区域,区域再连到国际。ISP(Internet Service Provider),互联网服务提供商。
网络边缘:外界设备连接到服务器,端系统如何接入因特网
网络中心:网络核心就是由互联网端系统的分组交换机和链路构成的网状网络。
主机:与网络相连的设备。
网络分层:
2、协议
3、Http协议和tcp的协议的关系
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
httP协议一般基于tcp协议
HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
-
TCP(传输控制协议)和IP(网际协议
)是最先定义的两个核心协议,所以才统称为TCP/IP协议族
传输层位于应用层的下层,提供位于网络连接中的两台计算机之间的数据传输,传输层中有两种性质不同的协议
敲重点:每一个应用层协议一般都会使用到两个传输层协议之一
-
TCP
:面向连接的TransmissonControlProtocol
传输控制协议(不可靠,适用于实时应用如ip电话,视频会议) -
UDP
: 无连接的包传输UserDataProtocol
用户数据报协议(可靠,适用于要求可靠传输的应用,例如文件传输)
四元组
端口号:本质上是标识符,有助于 TCP
区分机器上运行的应用。计算机上的每个端口号都由该计算机上的应用拥有。
端口号是2字节整数,端口0不可用。因此,我们可以在一台机器上拥有多达65536个端口。
TCP通过端口号来定义“连接”。
TCP连接由源和目标IP地址(来自网络层)以及源和目标端口号标识。这也称为四元组:
// 源IP地址、目的IP地址、源端口、目的端口
(src ip,dst ip,src port,dst port)
四、三次握手四次挥手
TCP网络中,为了保障每个连接提供有保证和有序的字节传递,使用了 SequenceNumber
(序列号)和 AcknowledgmentNumber
(确认号),即 Seq
和 Ack
。
SEQ
,序列号,表示每次传输中字节的偏移量 ACK
,确认号,指出下一个期望接收的 SEQ
(接受完毕)
举个例子:
-
序列号为
#2000
且长度为100
的数据包,在此连接上包含第2000-2099
个字节。 -
当接收器接收到包括第
2099
字节在内的所有字节时,它发送一个确认#2100
。 -
表示它已在第
2100
字节之前接收到该字节。
SYN
,同步序列号
三次握手:主机A向主机B发送SYN同步序列号(标志位的数据段),请求建立连接。--------->主机B收到主机A的请求后,用确认号ACK和同步序列号SYN标志位的数据段响应主机A。-------->主机A收到数据段后,主机A发送确认号ACK给主机B,确认已收到主机B的数据段,开始传输数据。
4次挥手:主机A数据传输完成后,将控制为FIN置为1,提出停止TCP连接的请求,------->主机B收到FIN后作出响应,将ACK置1,确认这一方向上的连接将关闭。-------->主机B再提出停止TCP连接的请求,将FIN置1。-------->主机A收到主机B的请求,将ACK置1,双方向的TCP连接均关闭。
五、浏览器页面渲染机制
1、浏览器内核指支持浏览器运行的最核心程序。常见的浏览器内核分为:Trident(IE)、Gecko(火狐)、Webkit(Safari)、Blink(Chorme 、Opera)
2、页面加载过程
-
浏览器根据 DNS 服务器得到域名的 IP 地址
-
向这个 IP 的机器发送 HTTP 请求
-
服务器收到、处理并返回 HTTP 请求
-
浏览器得到返回内容
3、浏览器渲染过程
浏览器渲染过程大体分为如下三部分:
(1)浏览器解析
-
一是HTML/SVG/XHTML,HTML字符串描述了一个页面的结构,浏览器会把HTML结构字符串解析转换DOM树形结构。
-
二是CSS,解析CSS会产生CSS规则树,它和DOM结构比较像。
-
三是Javascript脚本,等到Javascript 脚本文件加载后, 通过 DOM API 和 CSSOM API 来操作 DOM Tree 和 CSS Rule Tree。
(2)解析完成后,浏览器引擎会通过DOM Tree 和 CSS Rule Tree 来构造 Rendering Tree。
(3)调用操作系统Native GUI的API绘制。
浏览器如果渲染过程中遇到JS文件怎么处理?
渲染过程中,如果遇到<script>
就停止渲染,执行 JS 代码。因为浏览器有GUI渲染线程与JS引擎线程,为了防止渲染出现不可预期的结果,这两个线程是互斥的关系。JavaScript的加载、解析与执行会阻塞DOM的构建,也就是说,在构建DOM时,HTML解析器若遇到了JavaScript,那么它会暂停构建DOM,将控制权移交给JavaScript引擎,等JavaScript引擎运行完毕,浏览器再从中断的地方恢复DOM构建。
如果想首屏渲染的越快,就越不应该在首屏就加载 JS 文件,这也是都建议将 script 标签放在 body 标签底部的原因。