计算机网络部分
1、三次握手,四次挥手?为什么要四次挥手?
1.1、三次握手
三次握手流程:
1、初始状态,双方都处于Closed状态。
2、服务器开启监听功能,处于Listen状态
3、第一次握手:客户端向服务端发送请求,发送一个SYN的标志位,带一个数据包包号1000,并处于SYN-SENT状态
4、第二次握手:服务端接收到之后进行应答,发送SYN、ACK标识的[连接请求和应答数据包](seq=y,ack=x+1),并处于SYN-RCVD状态
5、第三次握手:客户端接收到之后处理服务端的SYN,进行ACK应答,(seq=x+1,ack=y+1),并处于Estavlish状态
6、服务端收到【应答数据包】后将处于Establish状态
第一次握手:server知道client的发送能力和接收能力正常;
第一次握手失败:如果第一次的SYN传输失败,两端都不会申请资源。
第二次握手:client知道server的发送能力和接收能力正常;
第二次握手失败:如果服务端发送的SYN+ACK传输失败,客户端由于没有收到这条响应,不会申请资源,虽然服务端申请了资源,但是迟迟收不到来自客户端的ACK,也会将该资源释放。
第三次握手:server知道自己的发送能力和client的接收能力正常
第三次握手失败:如果第三次握手的ACK传输失败,导致服务端迟迟没有收到ACK,就会释放资源
为什么要三次握手:
1.2、四次挥手
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,client不能发数据,但是能收数据 状态为FIN_WAIT_1,服务端状态CLOSE_WAIT
(2)第二次挥手:Server收到FIN后,返回ack应答,包号加一。此时处于半关闭状态
(3)第三次挥手:Server发送一个FIN标志位,请求关闭。客户端状态为 TIME_WAIT
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,ACK应答+1,Server进入CLOSED状态,完成四次挥手。
1.3、为什么要四次挥手:
两次挥手之后此时处于半关闭状态,client不能发数据,但是能收数据
1.4、尽量并合理地处理TIMEWAIT过多
1、sysctl改两个内核参数就行了,如下:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
简单来说,就是打开系统的TIMEWAIT重用和快速回收,至于怎么重用和快速回收,这个问题我没有深究,实际场景中这么做确实有效果。用netstat或者ss观察就能得出结论。
2、还有些朋友同时也会打开syncookies这个功能,如下:
net.ipv4.tcp_syncookies = 1
2、tcp与udp的区别
TCP 面向连接((如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接。
TCP 要求安全性,提供可靠的服务,通过 TCP 连接传送的数据,不丢失、不重复、安全可靠。而 UDP 尽最大努力交付,即不保证可靠交付。
TCP 是点对点连接的,UDP 一对一,一对多,多对多都可以
TCP 传输效率相对较低,而 UDP 传输效率高,它适用于对高速传输和实时性有较高的通信或广播通信。
TCP 适合用于网页,邮件等;UDP 适合用于视频,语音广播等
TCP 面向字节流,UDP 面向报文
3、tcp如何保证可靠性
首先,TCP 的连接是基于三次握手,而断开则是四次挥手。确保连接和断开的可靠性。
其次,TCP 的可靠性,还体现在有状态 ;TCP 会记录哪些数据发送了,哪些数据被接受了,哪些没有被接受,并且保证数据包按序到达,保证数据传输不出差错。
再次,TCP 的可靠性,还体现在可控制。它有数据包校验、ACK 应答、超时重传 (发送方)、失序数据重传(接收方)、丢弃重复数据、流量控制(滑动窗口)和拥塞控制等机制。
4、tcp的拥塞控制
5、解释一下http的长连接和短连接
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
6、http每个版本的区别
HTTP/1.0
·默认使用短连接,每次请求都需要建立TCP连接。服务完成立即断开,开销大;(可以通过Connection:keep-alive来解决,但是这是非标准的)
·错误状态响应码少;
·不支持断点续传。它可以设置Connection:keep-alive这个字段,强制开启长连接。
HTTP/1.1
·默认长连接,即TCP连接默认不关闭,可以被多个请求复用。
·分块传输编码,即服务端每产生一块数据,就发送一块,用”流模式”取代”缓存模式”。
•管道机制,即在同一个TCP连接里面,客户端可以同时发送多个请求。
缺点:
虽然1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为”队头堵塞” (Head-of-line blocking)。
为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。
7、http 1.1 中流水线阻塞的原理,http2中多路复用的原理,为什么不阻塞了
8、https秘钥交换过程 对称秘钥被黑客截取了咋办(感觉问的有问题,我就回答说对称秘钥不可能被黑客截取,因为对称秘钥是使用服务端公钥加密过的,只能使用服务端的私钥解密)
9、https的公钥被劫持的咋办(ca证书)
10、select 和 epoll。
11、HTTP 和 HTTPS 的区别,https加密的过程,https的缺点
11.1:优缺点
优点:
安全性:
使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
SEO方面:谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
缺点:
在相同网络环境中,HTTPS 相比 HTTP 无论是响应时间还是耗电量都有大幅度上升。
HTTPS 的安全是有范围的,在黑客攻击、服务器劫持等情况下几乎起不到作用。
在现有的证书机制下,中间人攻击依然有可能发生。
HTTPS 需要更多的服务器资源,也会导致成本的升高。
12、TCP 拥塞控制
13、Tcp工作原理,粘包问题处理,和UDP区别
14、Grpc是基于Http还是https
15、grpc工作流程
16、对称加密,非对称加密
17、详细描述一下 HTTPS 的加密过程,需要几次通信
18、三次握手和四次挥手,说一下 time_wait和close_wait,挥手time_wait阶段是什么时候,大量处于Close wait 是什么场景,如何解决,time_wait时间太长会怎样?
19、短链接和长链接的区别
20、说一下https 的认证,更换了tLs
21、tcp粘包问题怎么解决?协议头+Length,根据Length拆Body即可
22、TLS是保障云的安全还是端的安全?
23、TCP流量控制、拥塞控制
24、TCP半连接队列
25、TCP半关闭状态
26、502是什么?如果出现502怎么办?怎么排查?
27、tcp数据包的格式是什么?可选参数有哪些选项?
28、tcp拥塞控制介绍下?
29、syn攻击,为什么是四次挥手不是三次挥手
30、cookie和session的区别?
①、作用范围不同,cookie保存在客户端(浏览器),所以容易遭攻击,session保存在服务器端,安全性更好
②、存取方式不同,cookie只能保存ASCII,Session可以存储任意数据类型,一般情况下我们可以在Session中保存一些常用变量信息,比如说UserID等
③、有效期不同,Cookied可以设置长时间保持,Session一般时间较短
④、存储大小不同,单个cookie保存的数据不能超过4K,Session可存储数据远高于Cookie
31、什么是Cookie?
服务器发送到用户浏览器并保存在浏览器的一小块数据,他会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上,通常,用于告知服务端两个请求是否来自同一浏览器。
Cookie主要用于以下三个方面:
购物车状态,登录状态,个性化设置,
32、什么是session?
Session代表着服务器和客户端一次会话的过程。Session对象存储特定用户会话所需的属性以及配置信息。这样,当用户在应用程序的web页之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存下去,
5、Cookie和session如何配合?
用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session ,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名。
当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。
33、在浏览器中输入网址之后执行会发生什么
1、域名解析(域名 www.baidu.com 变为ip地址)。
浏览器搜索自己的DNS缓存(维护一张域名与IP的对应表);若没有,则搜索操作系统的DNS缓存(维护一张域名与IP的对应表);若没有,则搜索操作系统的hosts文件(维护一张域名与IP的对应表)。
若都没有,则找tcp/ip参数中设置的首选dns服务器,即本地dns服务器(递归查询),本地域名服务器查询自己的dns缓存,如果没有,则进行迭代查询。将本地dns服务器将IP返回给操作系统,同时缓存IP。
2、发起tcp的三次握手,建立tcp连接。浏览器会以一个随机端口(1024-65535)向服务端的web程序80端口发起tcp的连接。
3、建立tcp连接后发起http请求。
4、服务器响应http请求,客户端得到html代码。服务器web应用程序收到http请求后,就开始处理请求,处理之后就返回给浏览器html文件。
5、浏览器解析html代码,并请求html中的资源。
6、浏览器对页面进行渲染,并呈现给用户