daily-plan icon indicating copy to clipboard operation
daily-plan copied to clipboard

2020-04-24日计划: 进程、线程、ip、tcp、http

Open sl1673495 opened this issue 4 years ago • 5 comments

进程

http://blog.poetries.top/browser-working-principle/guide/part1/lesson01.html

  1. 一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。

  2. 当一个进程关闭之后,操作系统会回收进程所占用的内存。

  3. 进程之间的内容相互隔离。如果需要通信,则要用到「进程间通信(IPC)」的机制。

线程

  1. 线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。

  2. 进程中的任意一线程执行出错,都会导致整个进程的崩溃。

  3. 线程之间共享进程中的数据。 image

sl1673495 avatar Apr 25 '20 06:04 sl1673495

IP

IP 的目的是把数据包送到目标主机。

如果要想把一个数据包从主机A发送给主机B,那么在传输之前,数据包上会被附加上主机B的IP地址信息,这样在传输过程中才能正确寻址。

额外地,数据包上还会附加上主机A本身的IP地址,有了这些信息主机B才可以回复信息给主机A。这些附加的信息会被装进一个叫IP头的数据结构里。

IP头是IP数据包开头的信息,包含IP版本、源IP地址、目标IP地址、生存时间等信息

image

sl1673495 avatar Apr 25 '20 06:04 sl1673495

UDP:把数据包送达应用程序

UDP中一个最重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。UDP通过端口号把数据包分发给正确的程序。

和IP头一样,端口号会被装进UDP头里面。

UDP没有重传机制。虽说UDP不能保证数据可靠性,但是传输速度却非常快,所以UDP会应用在一些关注速度、但不那么严格要求数据完整性的领域,如在线视频、互动游戏等

sl1673495 avatar Apr 25 '20 06:04 sl1673495

TCP:把数据完整地送达应用程序

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。相对于UDP,TCP有下面两个特点:

对于数据包丢失的情况,TCP提供重传机制; TCP引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。

和UDP头一样,TCP头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包。

三次握手建立连接 -> 传输数据 -> 四次挥手断开连接。

到这里你应该就明白了,TCP为了保证数据传输的可靠性,牺牲了数据包的传输速度,因为“三次握手”和“数据包校验机制”等把传输过程中的数据包的数量提高了一倍。

sl1673495 avatar Apr 25 '20 06:04 sl1673495

浏览器端发起HTTP请求流程

  1. 构建请求 首先,浏览器构建请求行信息(如下所示),构建好后,浏览器准备发起网络请求 GET /index.html HTTP1.1

  2. 查找缓存 在真正发起网络请求之前,浏览器会先在浏览器缓存中查询是否有要请求的文件。

  3. DNS查询拿到IP地址

  4. 建立TCP连接 Chrome有个机制,同一个域名同时最多只能建立6个TCP连接,如果在同一个域名下同时有10个请求发生,那么其中4个请求会进入排队等待状态,直至进行中的请求完成。当然,如果当前请求数量少于6,会直接进入下一步,建立TCP连接。

  5. 发送HTTP请求

    1. 首先浏览器会向服务器发送请求行,它包括了请求方法、请求URI(Uniform Resource Identifier)和HTTP版本协议。
    2. 还要以请求头形式发送其他一些信息,把浏览器的一些基础信息告诉服务器。

服务器响应HTTP请求

  1. 返回请求 首先服务器会返回响应行,包括协议版本和状态码。 随后,正如浏览器会随同请求发送请求头一样,服务器也会随同响应向浏览器发送响应头。响应头包含了服务器自身的一些信息。 发送完响应头后,服务器就可以继续发送响应体的数据。

  2. 断开连接 通常情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接。除非浏览器或者服务器在其头信息中加入了: Connection:Keep-Alive

  3. 重定向 响应行返回的状态码是301,状态301就是告诉浏览器,我需要永久重定向到另外一个网址,而需要重定向的网址正是包含在响应头的Location字段中。

sl1673495 avatar Apr 25 '20 08:04 sl1673495

浏览器缓存

1. 强缓存

服务端对于请求的资源,返回了 cache-control: max-age=2000,就说明服务端告诉客户端:“这个资源在2000秒内你使用本地的就可以了,不用来找我要”。

下次再发起相同的请求时,客户端判断时间没有过期的话,就直接从本地获取缓存的资源了。

强缓存是不经过服务端的。

2. 协商缓存

服务端对于请求的资源,会用hash算法计算出一个值,然后通过ETag字段返回在响应头里告诉客户。服务端在资源更新后,要实时更新这个 ETag 值。

客户存储到这个值后,通过请求头附加 If-None-Match 字段带上这个 ETag,即可让服务端确认这个资源是否有更新。

如果没有更新的话,则返回 304 not modified,告知客户端可以继续使用缓存资源。

sl1673495 avatar Apr 25 '20 09:04 sl1673495