1、谈一谈对OSI七层模型和TCP/IP四层模型的理解?
为了增强计算机网络的通用性和兼容性,因此计算机网络都被设计成层次结构。
(1)OSI七层模型
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
(2)TCP/IP四层模型
TCP/IP则是四层的结构,相当于是对OSI模型的简化。
- 应用层
- 传输层
- 网络层
- 数据链路层
2.谈谈TCP协议的3次握手过程?
- 第一次握手:客户端给服务器端发送一个SYN同步数据包,表示连接请求。此时控制位SYN=1,ACK=0。
- 第二次握手:服务器端收到客户端的连接请求,发送一个确认数据包,表示同意连接。此时控制位SYN=1,ACK=1。
- 第三次握手:客户端收到服务器端的同意连接包,发送ACK=1的确认包给服务器端。此时控制位SYN=0,ACK=1。 连接成功,可以发送数据了。
3.TCP协议为什么要3次握手?2次,4次不行吗?
- 三次握手是为了避免重复连接。
- 二次握手无法完成初始化seq序列号的值。
- 四次握手可以,但是浪费资源。
4.谈谈TCP协议的四次挥手过程?
- 第一次挥手:客户端向服务器端发送一个释放连接请求数据包。控制位FIN=1,ACK=0。此时,客户端表示没有数据要发送给服务器端了,但还能接收服务器端发送的数据。
- 第二次挥手:服务器端收到客户端的释放连接请求,发送一个确认包ACK给客户端,表示服务器端确认收到释放连接通知,但仍有数据在传输,服务器端仍可给客户端传输数据,客户端可以收到,但是不可以发送。此时控制位FIN=0,ACK=1.。
- 第三次挥手:服务器端向客户端没有数据可以传输了,便给客户端发送一个断开连接数据包,此时控制位FIN=1,ACK=1。这个时候服务器端也不可以给客户端传输消息了。
- 第四次挥手:客户端收到服务器端的断联数据包,发送一个确认包ACK=1。此时客户端与服务器端彻底断开连接。
5.什么是流量控制?
- 简单来讲:流量控制就是为了控制发送方的发送速率,确保接收方能来得及接收。
- TCP使用滑动窗口来实现流量控制。(令牌桶也可以)
6.什么是滑动窗口?
滑动窗口是TCP协议中用于控制发送和接收数据速率的一种机制。它允许发送方在无需等待每个数据段确认的情况下,继续发送多个数据段,从而提高了传输效率。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
这个过程中,接收方向发送方通告一个窗口大小,表示当前接收方还剩余多少空间可以用来接收新的数据。发送方依据此窗口大小决定发送多少数据,这样就可以避免因发送速度过快,导致接收方来不及处理而造成的数据丢失或拥塞。
TCP滑动窗口分为发送窗口和接收窗口:
发送窗口:是发送方维护的窗口,代表能发但没确认的数据范围,会随接收方确认向前滑动。
接收窗口:是接收方维护的窗口,代表能接收但没处理的数据范围,大小由接收方缓冲区决定,通过 TCP 报文段窗口大小字段告知发送方。接收方读取内容后通知发送方,窗口向前滑动,还能通过改变窗口大小控制发送方速率来实现流量控制。
7.什么是拥塞控制?
拥塞控制是一种机制,发送方通过维护拥塞窗口(cwnd)变量来控制同时发送数据包的数量,以此调节网络拥塞的可能性。
TCP 主要用四个算法进行拥塞控制:
- 慢开始:cwnd 从 1 开始,收到确认后就加倍,慢慢增大。
- 拥塞避免:设置慢开始门限(ssthresh),当 cwnd≥ssthresh 时,每个轮次 cwnd 只加 1,减缓增长速度。
- 拥塞发生:
- 超时重传情况:表示网络拥塞严重,ssthresh 设为 cwnd 的一半,cwnd 设为 1,开始慢启动。
- 快速重传情况:表示拥塞不太严重,cwnd 设为当前一半,ssthresh = cwnd,开始快恢复。
- 快恢复:和快重传一起用,cwnd 在原有值基础上加 3,然后开始执行拥塞避免。
8.TCP和UDP有什么区别?
- 面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
- 可靠传输:TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。
- 性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。
- 首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。
TCP | 面向连接 | 可靠传输 | 首部开销20-60字节 | 传输效率慢 | 资源开销大 |
---|---|---|---|---|---|
UDP | 不面向连接 | 不可靠传输 | 首部开销8个字节 | 传输效率快 | 资源开销小 |
9.TCP如何保证传输过程的可靠性?
- 校验和:发送方在发送数据之前计算校验和,接收方收到数据后同样计算,如果不一致,那么传输有误。
- 确认应答,序列号:TCP进行传输时数据都进行了编号,每次接收方通过首部ACK字段进行确认序列号。
- 超时重传:如果发送方发送数据一段时间后没有收到ACK确认,那么就重发数据。
- 连接管理:三次握手和四次挥手的过程。
- 流量控制:TCP协议报头包含16位的窗口大小,接收方会在返回ACK时,同时把窗口值传递回发送方,发送方根据报文中窗口的大小控制发送速率。
- 拥塞控制:通过慢开始、拥塞避免、快重传、快恢复等四个算法来进行拥塞控制,降低整个网络的拥塞程度,避免网络中发送的数据包数量过多,造成数据包阻塞延迟丢失
10.Session和Cookie有什么区别?
保存位置
- Cookie 保存在客户端浏览器本地,是文件形式,受浏览器限制,一般不超过 3kb。
- Session 保存在服务器端内存,是以对象形式存在。
数据内容
- Cookie 不能保存特殊内容(如中文、特殊符号)。
- Session 可以保存任意内容。
存储周期
- Cookie 的存储周期由 Max Age 属性设定,可长期保存。
- Session 依赖 JSESSIONID 这个 Cookie,其 Max Age 默认 -1,关闭浏览器窗口,该 Cookie 失效,对应的 Session 也跟着失效。
11.浏览器请求一个网址的过程?(输入网址到网页显示整个过程)
(1)首先,应用层会创建一个http请求报文;
(2)通过DNS服务器把http请求报文中的域名解析成IP地址;
(3)然后通过socket调用操作系统的协议栈,进行传输层的执行;
(4)传输层添加TCP头部,网络层添加IP头部,数据链路层添加以太网协议头部;
(5)数据经过路由器、交换机转发,最终达到目标服务器;
(6)目标服务器同样解析数据,最终拿到http请求报文,按照对应的程序的逻辑进行处理后,生成一个http响应报文;
12.谈谈对HTTP协议的理解
HTTP是一个属于应用层的协议,基于浏览器-服务端架构工作。浏览器作为HTTP客户端通过URL向HTTP服务端(即WEB服务器)发送请求,Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP 以 TCP协议作为传输层层协议,默认端口为80。
通信过程主要如下:
- 服务器在 80 端口等待客户的请求。
- 浏览器发起到服务器的 TCP连接(创建套接字 Socket)。
- 服务器接收来自浏览器的 TCP 连接。
- 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
- 关闭 TCP连接。
13.谈谈HTTP协议的GET和POST有什么区别?
GET和POST是HTTP请求的两种请求方法,本质上都是通过TCP连接进行通信;
- GET用于获取数据,POST用于提交数据;
- GET使用URL传递请求参数,POST使用Request Boby提交数据;
- GET和POST的请求报文格式不同
- POST方法请求报文第一行是这样的 POST /uri HTTP/1.1 \r\n
- GET方法请求报文第一行是这样的 GET /uri HTTP/1.1 \r\n
- GET是幂等且可缓存,POST非幂等且不可缓存
14.谈谈HTTP协议有哪些请求方式?各自有什么特点?
- GET 获取资源:GET方法用于使用给定的URI从给定服务器中查询获取信息或数据。
- HEAD 获取响应消息报头:HEAD 和 GET方法类似,但是不返回响应报文内容主体部分,仅传输响应报头部分。
- POST 提交数据增加资源:POST方法用于将数据发送到服务器以创建或更新资源。使用post方法,如果两个请求相同,后一个请求不会会把第一个请求覆盖掉,所以post用于增加资源。
- PUT 修改资源:PUT方法用来修改资源。使用put方法,如果两个请求相同,后一个请求会把第一个请求覆盖掉,所以put用于修改资源。
- DELETE 删除资源:DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。
- OPTIONS 查询支持的方法:查询指定的 URL 能够支持的方法。会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容
15.谈谈HTTPS的工作原理?
- 用户通过浏览器请求 https 网站,服务器收到请求后,挑选浏览器支持的加密和 hash 算法,同时把包含颁发机构、网址、公钥、有效期等内容的数字证书发给浏览器。
- 浏览器校验证书,有问题就提示警告,没问题就生成随机秘钥 X,用证书中的公钥加密后发给服务器。
- 服务器用私钥解密得到 X,再用 X 加密网页内容并返回给浏览器,浏览器用 X 和约定算法解密得到网页内容
16.常见的HTTP状态码?
1xx(信息性状态码)
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少
2xx(成功状态码)
「200 OK」最常见的成功状态码,表示一切正常。
「204 No Content」常见的成功状态码,与 200 OK 基本相同,但响应报文没有 body 数据。
「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
3xx(重定向状态码)
「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
4xx(客户端错误状态码)
「400 Bad Request」表示客户端请求的报文有错误。
「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。
「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
「405 Not Allowed」表示服务器不支持客户端采用的请求方式。5XX 服务器错误
5xx(服务器错误状态码)
「500 Internal Server Error」服务器发生了内部错误。
「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。
「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
「503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。