注:牛客职导前端课程笔记
1.TCP/IP四层协议族
1.1网络连接
OSI(Open System Interconnection 开放系统互联模式):
应用层、表示层(为在应用过程之间传送的信息提供表示方法的服务,它只关心信息发出的语法和语义。)、会话层、传输层、数据链路层、物理层。
TCP/IP四层协议族:
应用层(HTTP)、传输层(TCP、UDP)、网络层(IP)、数据链路层。
1.2网络层:IP网络三层传输
IP头信息:IP头是IP数据包开头的信息,包含IP版本、源IP地址、目标IP地址、生存时间等信息。
IP层数据传输步骤:
上层将含有“data”的数据包交给网络层;
网络层再将 IP 头附加到数据包上,组成新的 IP 数据包,并交给底层;
底层通过物理网络将数据包传输给主机 B;
数据包被传输到主机 B 的网络层,在这里主机 B 拆开数据包的 IP 头信息,并将拆开来的数据部分交给上层;
1.3传输层:UDP四层网络连接
UDP作用:IP 通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序 。
UDP头信息:端口号会被装进 UDP 头里面,UDP 头再和原始数据包合并组成新的 UDP 数据包。UDP 头中除了目的端口,还有源端口号等信息 。
UDP层传输步骤:
上层将含有“data”的数据包交给传输层。
传输层会在数据包前面附加上 UDP 头,组成新的 UDP 数据包,再将新的 UDP 数据包交给网络层。
网络层再将 IP 头附加到数据包上,组成新的 IP 数据包,并交给底层;
数据包被传输到主机 B 的网络层,在这里主机 B 拆开 IP 头信息,并将拆开来的数据部分交给传输层;
在传输层,数据包中的 UDP 头会被拆开,并根据 UDP 中所提供的端口号,把数据部分交给上层的应用程序;
UDP数据传输的特点:对于错误的数据包,UDP不提供重发机制,只是丢弃当前的包,UDP在发送数据之后也无法知道是否到达目的地。
应用:UDP虽不能保证数据可靠性,但传输速度非常快,常应用于在线视频、互动游戏等。
1.4传输层:TCP四层网路连接
TCP头信息:除了包含目标端口和本机端口号外,还提供用于排序的序列号,以便接收端通过序列号来重排数据包。
TCP连接的生命周期:
建立阶段(三次握手):客户端向服务器发送请求,服务器做出应答,客户端回复收到应答。
目的:确保客户端和服务器端发出的消息都能收到回复。
数据传输阶段:接收端需要对每个数据包进行确认操作,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端 ,大文件传输中会被拆分为带有序号的小的数据包。
当发送端发送一个数据包后,在规定时间没有接收到接收端反馈的确认信息会触发重发机制。
断开连接阶段(四次挥手):
可由客户端或者服务器端任何一端发起断开请求。
客户端和服务器端都需要是断开就绪状态,才能真正断开。
TCP数据传输的特点:
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议
-
对于数据包丢失的情况,TCP 提供重传机制;
-
TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。
2.http
2.1http0.9
HTTP都是基于TCP协议的,所以客户端先要根据IP地址、端口和服务器建立TCP连接,建立连接的过程就是TCP协议三次握手的过程。
HTTP/0.9实现的三个特点:
①只有一个请求行,没有HTTP请求头和请求体。
②服务器没有返回头信息,只需要返回数据。
③返回的文件内容是以ASCLL字符流来传输的,都是HTML格式。
2.2http1.0
①支持多种类型、格式、编码、语言的文件,添加请求头和响应头。
accept: text/html;
accept-encoding: gzip,deflate,br;
accept-Charset: ISO-8859-1,utf-8;
accept-language: zh-CN,zh;
content-encoding: brcontent-type: text/html; charset=UTF-8
②状态码 有的请求服务器可能无法处理或者处理出错,这时候需要告诉浏览器服务器最终处理该请求的情况。状态码是通过响应行的方式来通知浏览器的。
③Cache机制 为了减轻服务器的压力,1.0中提供了Cache机制用来缓存已经下载过的数据。
④统计客户端的基础信息,在请求头中加入了代理的字段。
2.3http1.1
①TCP持久连接,多个http请求可以在同一个TCP上进行。目前浏览器中对于同一个域名,默认允许同时建立 6 个 TCP 持久连接。
②管线化 将多个http请求整批交给服务器,虽然可以整批发送请求,但服务器依然需要根据请求顺序来回复浏览器的请求。 目的:解决队头拥塞问题。(但似乎未解决)
③提供虚拟主机的支持,1.1请求头中增加了Host字段。
④对动态生成的内容提供了 支持。 服务器会将数据分成若干任意大小的数据块,每块发送时会标注长度,最后一块以零长度作为结束标识。
⑤引入客户端Cookie机制。
⑥补充了缓存的请求头和响应头。
2.4http2.0
主要解决的问题:
①一个域名只使用一个TCP长连接
目的:解决TCP有慢启动(刚连接上传输数据慢),减少TCP连接的次数。
每个TCP连接都会占用部分带宽资源,且不会按照优先级来分配资源,导致需要先加载的数据慢返回。
②消除队头阻塞问题。
解决方法:多路复用
浏览器发送请求:将请求分成二进制分帧层,分成一帧一帧的数据去传输(一个请求可以分成多个帧)
服务器响应请求:服务器接收到所有帧之后,会将相同ID的帧合并为一条完整的请求信息,并将处理的响应行、响应头和响应体分别发送至二进制分帧层,返回时可以根据请求的优先级或者相应的速度返回帧数据。
浏览器接收数据:浏览器接收到响应帧后,会根据ID编号将帧的数据提交给对应的请求。
http2.0特性:
①多路复用:一个域名只使用一个TCP长连接、消除队头拥塞问题。
②可以设置请求的优先级。
③服务器推送。
④头部压缩。 对请求头和响应头进行了压缩。
2.5http状态码
状态码分类:
1**:请求已被接收,需要继续处理。
2**:请求已被接收、理解、并接受。
3**:需要进一步操作,用来重定向。
4**:请求错误。
5**:服务器处理请求时有错误或有异常状态发生。
http常用状态码:
200:成功,服务器提供了请求的网页。
301:永久移动。
302:临时移动。
304:请求的网页自上次访问未修改。
403:服务器拒绝请求。
404:未找到。
500:服务器遇到错误。
504:网关超时。
2.6http请求头和响应头
http请求头:
Accept:text/html、Accept-Encoding:gzip,deflate、Accept-Language:zh-CN,zh;q=0.9
Connection:keep-alive(close)、Host:www.baidu.com、User-Agent、Cookie、content-type:application/json(发送数据的格式 get请求一般没有)
常见响应头:
Cache-Control:private(私有缓存)、public、must-recalidate(每次请求必须向服务器验证缓存是否过时)、no-cache(不应缓存)、max-age=10(10秒内客户端从缓存中读取数据)、no-store(不能存储在磁盘中)
Last-Modified:所请求对象的最后修改日期。
Etag:对象的标志值,如果修改了会改变。
Content-Type:text/html;charset=UTF-8 文件类型、字符编码。
Content-Encoding:gzip.
Date:发送资源时服务器的时间。
Server:服务器信息。
Expires:告诉客户端在这个时间前,可以直接访问缓存副本。max-age=date中的date是个相对时间 。
Connection:keep-alive
Access-Control-Allow-Origin: www.baidu.com 指定哪些网站可以跨域资源共享 。
Access-Control-Allow-Methods:GET,POST,PUT,DELETE 允许哪些方法来访问 。
Access-Control-Allow-Credentials: true 是否允许发送cookie。
2.7http缓存
通过缓存,使用资源副本,大大减少获取资源时间,
能够减少网络带宽消耗、减少延迟与网络阻塞,同时降低服务器压力,提高服务器性能。
强制缓存:响应头Cache-Control。
协商缓存:Last-Modified、Etag(Etag优先级高)。
请求头和响应头:
Etag/If-None-Match
Last-Modifed/If-Modified-Since