网络请求协议
一、IP协议
数据包在传输之前,会被附加上双方主机的IP地址信息。是通过向数据包上附加IP头的方式实现的(IP头中包含双方主机的IP信息和一些其他信息)。
二、UDP协议
数据包在传输之前,会被附加上双方的端口信息。是通过向数据包上附加UDP头的方式实现的(UDP头中包含双方的端口信息和一些其他信息)。
在使用 UDP 发送数据时,有各种因素会导致数据包出错,虽然 UDP 可以校验数据是否正确,但是对于错误的数据包,UDP 并不提供重发机制,只是丢弃当前的包,而且 UDP 在发送之后也无法知道是否能达到目的地。
UDP 不能保证数据可靠性,但是传输速度却非常快,所以 UDP 会应用在一些关注速度、但不那么严格要求数据完整性的领域,例如:在线视频、游戏等。
三、IP/UDP
上层把数据给传输层,传输层会给数据包加上UDP头,然后给网络层,网络层则给数据包添加IP头,最后底层将被附加了IP/UDP头的数据传输给主机B,主机B在网络层解开IP头获取IP数据,传输层解开UDP头取出端口数据,最后数据交给了上层。
四、TCP协议
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
通过 TCP 头的信息保证了一块大的数据传输的完整性。
对于数据包丢失的情况,TCP 提供重传机制;
TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。
类似于UDP,在传输层时数据包会被附加上TCP头,TCP 头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包
五、三次握手/传输数据/四次挥手
三次握手是指在建立一个 TCP 连接时,客户端和服务器总共要发送三个数据包以确认连接的建立。
传输数据数据阶段
接收端需要对每个数据包进行确认操作,需要发送确认数据包给发送端,如果在规定时间内没有接受到反馈信息,发送端会判定数据包已经丢失,并且触发重发机制。
一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。
四次挥手是指数据传输完毕之后,就要终止连接了,“四次挥手”来保证双方都能断开连接。
六、HTTP协议
HTTP 是一种允许浏览器向服务器获取资源的协议,是 Web 的基础。通常由浏览器发起请求,用来获取不同类型的文件,例如 HTML 文件、CSS 文件、JavaScript 文件、图片、视频等。
1、HTTP和TCP的关系
浏览器使用 HTTP 协议作为应用层协议,用来封装请求的文本信息
浏览器使用 TCP/IP 作传输层协议将它发到网络上,所以在 HTTP 工作开始之前,浏览器需要通过 TCP 与服务器建立连接,也就是说 HTTP 的内容是通过 TCP 的传输数据阶段来实现的。
2、浏览器端发起 HTTP 请求流程
2.1、构建请求行信息
2.2、查找缓存 没查到缓存的话就进入接下来的网络请求的阶段了
2.3、准备端口和IP地址(TCP/IP) 利用 URL 地址来获取 IP 和端口信息 通过域名系统(DNS)查到IP地址 端口号是8080。因为没有哪个URL上面会写有端口号,所以默认就是8080端口。
2.4、等待 TCP 队列 Chrome 有个机制,同一个域名同时最多只能建立 6 个 TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。
2.5、建立 TCP 连接 就是三次握手
2.6、发送HTTP请求 这个是TCP的数据传输阶段 发送请求行,包括了请求方法、请求 URI(Uniform Resource Identifier)和 HTTP 版本协议。 发送请求头,包含了浏览器所使用的操作系统、浏览器内核等信息,以及当前请求的域名信息、浏览器端的 Cookie 信息,等等
3、服务器端处理 HTTP 请求流程
这个还是在TCP的数据传输阶段
3.1、返回请求
发送请求行,包括协议版本和状态码
发送请求头,包含了服务器生成返回数据的时间、返回的数据类型(JSON、HTML、流媒体等类型),以及服务器要在客户端保存的 Cookie 等信息
发送请求体,响应体就包含了 HTML 的实际内容。
3.2、断开连接 就是四次挥手
七、服务器的特殊行为
1、保持 TCP 连接 如果头信息有:Connection:Keep-Alive ,则连接不断开,下次http请求可以直接进行而不用重新建立TCP连接。
2、重定向 发送一个不完整的URL,服务端在请求行里返回301,告诉浏览器重定向,重定向的地址在响应头的Location字段里面。浏览器据此重新发送HTTP请求。
八、浏览器缓存
DNS 缓存和页面资源缓存这两块数据是会被浏览器缓存的 DNS 缓存比较简单,它主要就是在浏览器本地把对应的 IP 和域名关联起来
1、页面缓存,什么时候浏览器会将页面缓存?
服务器返回一个响应行,里面如果包含了Cache-Control,则缓存页面,后面的数字就是缓存的保质期。
缓存过期怎么办
如果缓存查到了缓存,但是缓存过期,则浏览器会进入网络请求,但是在发送请求头时,会发送If-None-Match:“4f80f-13c-3a1xb12a”,判断请求的资源是否有更新
如果资源有更新,则服务端会返回新的资源
如果资源没有更新,则服务端返回304则浏览器会继续使用旧缓存
2、 登录状态
当服务器接收到来自浏览器的用户登录信息,查询后台,验证用户登录信息是否正确,如果正确的话,会生成一段表示用户身份的字符串,并把该字符串写到响应头的 Set-Cookie 字段里,然后把响应头发送给浏览器。
浏览器在接收到服务器的响应头后,开始解析响应头,如果遇到响应头里含有 Set-Cookie 字段的情况,浏览器就会把这个字段信息保存到本地。比如把UID=3431uad保持到本地。
当用户再次访问时,浏览器会发起 HTTP 请求,但在发起请求之前,浏览器会读取之前保存的 Cookie 数据,并把数据写进请求头里的 Cookie 字段里,然后浏览器再将请求头发送给服务器。
服务器在收到 HTTP 请求头数据之后,就会查找请求头里面的“Cookie”字段信息,当查找到包含UID=3431uad的信息时,服务器查询后台,并判断该用户是已登录状态,然后生成含有该用户信息的页面数据,并把生成的数据发送给浏览器。
浏览器在接收到该含有当前用户的页面数据后,就可以正确展示用户登录的状态信息了。

浙公网安备 33010602011771号