02 | TCP协议:如何保证页面文件能被完整送达浏览器?
1.IP:把数据包送达目的主机
计算机的地址就称为 IP 地址,访问任何网站实际上只是你的计算机向另外一台计算机请求信息。
数据包从A发送到B时:
数据包 + IP头 组成新的 IP数据包 并交给底层(网络层)- 底层通过物理网络将数据包传输给主机B
- 在主机B
拆开数据包的IP头信息 ,并将拆开的数据部分交给上层(网络层)
IP头:IP 头是 IP 数据包开头的信息,包含 IP 版本、源 IP 地址、目标 IP 地址、生存时间等信息。
2.UDP:把数据包送达应用程序(不可靠性,但是传输速度却非常快,通常在线视频、互动游戏中使用)
UDP 中一个最重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。通过端口号 UDP 就能把指定的数据包发送给指定的程序了。 IP 通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序。
UDP传输存在的问题:
- 数据包在传输过程中容易丢失
- 大文件会被拆分成很多小的数据包来传输,这些小的数据包会经过不同的路由,并在不同的时间到达接收端,而 UDP 协议并不知道如何组装这些数据包,从而把这些数据包还原成完整的文件。
3.TCP:把数据完整地送达应用程序(可靠的)
1.TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。相对于 UDP,TCP 有下面两个特点:
- 对于数据包丢失的情况,TCP 提供重传机制
- TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。
2.TCP 保证了数据完整地传输,它的连接可分为三个阶段:建立连接(三次握手)、传输数据和断开连接(四次挥手)。
3.TCP 为了保证数据传输的可靠性,牺牲了数据包的传输速度,因为“三次握手”和“数据包校验机制”等把传输过程中的数据包的数量提高了一倍。
03 | HTTP请求流程:为什么很多站点第二次打开速度会很快?
1. 浏览器中的 HTTP 请求从发起到结束的八个阶段
构建请求、查找缓存、准备 IP 和端口、等待 TCP 队列、建立 TCP 连接、发起 HTTP 请求、服务器处理请求、服务器返回请求和断开连接。
2. 为什么很多站点第二次打开速度会很快?
主要原因是第一次加载页面过程中,DNS 缓存 和页面资源缓存 这两块数据是会被浏览器缓存的。浏览器缓存直接使用本地副本来回应请求,而不会产生真实的网络请求,从而节省了时间。同时,DNS 数据也被浏览器缓存了,这又省去了 DNS 查询环节。
1.DNS 缓存: 比较简单,它主要就是在浏览器本地把对应的 IP 和域名关联起来 2.页面资源缓存:
a. 如果有缓存,且未过期
- 浏览器是通过响应头中的 Cache-Control 字段来设置是否缓存该资源。如果有,且未过期,会直接返回缓存中的资源给浏览器
b. 如果缓存过期了,浏览器则会继续发起网络请求,并且在 HTTP 请求头中带上(If-None-Match)。服务器收到请求头后,会根据 If-None-Match 的值来判断请求的资源是否有更新。
- 如果没有更新,就返回 304 状态码,相当于服务器告诉浏览器:“这个缓存可以继续使用,这次就不重复发送数据给你了。”
- 如果资源有更新,服务器就直接返回最新资源给浏览器。
3. 登录状态是如何保持的?
如果服务器端发送的响应头内有 Set-Cookie 的字段,那么浏览器就会将该字段的内容保持到本地。当客户端再发送请求时,会自动在请求头中加入 Cookie 值后再发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到该用户的状态信息。
|