一道面试题是如何引发深层次的灵魂拷问? (2)

客户端:hello,你是 server 么?
服务端:hello,我是 server,你是 client 么
客户端:yes,我是 client
建立成功之后,接下来就是正式传输数据。

然后,等到断开连接时,需要进行 4 次挥手(因为是全双工的,所以需要 4 次握手)。

4 次挥手步骤:

主动方:我已经关闭了向你那边的主动通道了,只能被动接收了
被动方:收到通道关闭的信息
被动方:那我也告诉你,我这边向你的主动通道也关闭了
主动方:最后收到数据,之后双方无法通信

tcp/ip 的并发限制

浏览器对同一域名下并发的 tcp 连接是有限制的(2-10 个不等)。而且在 http1.0 中往往一个资源下载就需要对应一个 tcp/ip 请求。所以针对这个瓶颈,又出现了很多的资源优化方案。

get 和 post 区别

get 和 post 本质都是 tcp/ip,但是除了 http 外层外,在 tcp/ip 层面也有区别。get 会产生 1 个 tcp 数据包,post 产生 2 个 tcp 数据包。

具体就是:

(1)get 请求时,浏览器会把 header 和 data 一起发送出去,服务器响应 200(返回数据)。

(2)post 请求时,浏览器首先发送 headers,服务器响应 100 continue,浏览器再发送 data,服务器响应 200(返回数据)。

3、五层网络协议栈

客户端发出 http 请求到服务器接收,中间会经过一系列的流程。

客户端发送请求具体:从应用层发动 http 请求,到传输层通过三次握手简历 tcp/ip 连接,再到网络层的 ip 寻址,再到数据链路层的封装成帧,最后在物理层通过物理介质传输。

服务端接收请求具体:反过来。

五层网络协议:

1、应用层(DNS,HTTP):DNS 解析成 IP 并发送 http 请求;

2、传输层(TCP,UDP):建立 TCP 连接(3 次握手);

3、网络层(IP,ARP):IP 寻址;

4、数据链路层(PPP):封装成帧;

5、物理层(利用物理介质传输比特流):物理传输(通过双绞线,电磁波等各种介质)。

其实也有一个完整的 OSI 七层框架,与之相比,多了会话层、表示层。

OSI 七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

表示层:主要处理两个通信系统中交互信息的表示方式,包括数据格式交换,数据加密和解密,数据压缩和终端类型转换等。

会话层:具体管理不同用户和进程之间的对话,如控制登录和注销过程。

六、从服务器接收请求到对应后台接收到请求

服务端接收到请求时,内部会有很多处理,其中最主要的是负载均衡和后台处理。

1、负载均衡

对于大型项目,并发访问很大,一台服务器吃不消,一般会有若干台服务器组成一个集群,然后配合反向代理实现均衡负载。均衡负载不止一种实现方式。

概括的说:用户发送的请求指向调度服务器(反向代理服务器,比如 nginx 的均衡负载),然后调度服务器根据实际的调度算法,分配不同的请求给对应的集群中的服务器执行,然后调度服务器等待实际服务器的 HTTP 响应,并且反馈给用户。

2、后台处理

一般后台都部署到容器中。过程如下:

(1)先是容器接收到请求(比如 tomcat 容器);

(2)然后对应容器中的后台程序接收到请求(比如 java 程序);

(3)然后就是后台自己的统一处理,处理完毕后响应结果。

具体概括一下:

(1)一般有的后端有统一的验证,比如安全拦截,跨域验证;

(2)如果不符合验证规则,就直接返回相应的 http 报文(拒绝请求等);

(3)如果验证通过了,才会进入到实际的后台代码,此时程序接收到请求,然后执行查询数据库,大量计算等等;

(4)等程序执行完毕后,会返回一个 http 响应包(一般这一步会经过多层封装);

(5)然后将这个数据包从后端返回到前端,完成交互。

七、后台和前台的 http 交互

前后端的交互,http 报文作为信息的载体。

1、http 报文结构

报文一般包括:通用头部,请求/响应头部,请求/响应体

1.1 通用头部

Request Url: 请求的 web 服务器地址

Request Method: 请求方式
(Get、POST、OPTIONS、PUT、HEAD、DELETE、CONNECT、TRACE)

Status Code: 请求的返回状态码,如 200 代表成功

Remote Address: 请求的远程服务器地址(会转为 IP)
比如跨区拒绝时,methord 为 option,状态码 404/405。

其中 method 分为两批次:

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
以及几种 Additional Request Methods:PUT、DELETE、LINK、UNLINK

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsszjw.html