目录
22、既然 IP 层会分片,为什么 TCP 层还需要 MSS 呢?
30、服务器出现大量 TIME_WAIT 状态的原因有哪些?
31、服务器出现大量 CLOSE_WAIT 状态的原因有哪些?
43、在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么?
46、TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?
1、TCP/IP 网络模型有哪几层?
共分为四层,分别是应用层,传输层,网络层,网络接口层;
应用层专注于为用户提供服务,例如http,ftp,dns等,处于用户态,其他三层都处于内核态;
传输层负责实现应用到应用的通信,主要有tcp udp两大协议;
网络层负责真正的传输服务,主要用ip协议,主要功能有路由和寻址,寻址更像是找到目的地,而路由则像是选择最佳的路径。
网络接口层负责给网络层提供链路级别的传输服务,会在原本的结构上加上mac头部,在以太网,wifi这样的底层网络上发送原始数据包。
2、键入网址到网页显示,期间发生了什么?
首先是解析url,然后生成http请求信息,随后会通过查询dns确定ip地址,如果缓存中有,则直接获取,如果没有,会通过根域名服务器,顶级域名服务器,权威域名服务器依次确定最终ip地址,接着是通过三次握手建立可靠连接,然后通过ip协议确定传输的目的地,随后加上mac头部,在以太网、wifi这样的底层网络上传输,随后会经过网卡,数字信号需要转换成电信号,然后会在交换机、路由器上进行传输,然后便可以到达服务器,依次扒皮,确定想要获得某一个页面或其他资源,再按照上述过程再送回到客户端,客户端依次扒皮后拿出具体资源,渲染页面,最后看是否是长连接,如果不是长连接,就发起四次挥手,断开连接。
3、HTTP常见的状态码都有哪些
1xx:属于提示信息,是协议处理的一种中间状态,实际使用的比较少
2xx:成功
200:最常见的一种成功
204:响应头中没有body数据的成功
206:响应头中的body数据并不是完整的资源
3xx:重定向
301:永久重定向
302:临时重定向
304:缓存重定向
4xx:客户端错误
403:服务器禁止访问资源
404:资源不存在
5xx:服务端错误
501:客户端请求的功能还不支持
502:服务器自身工作正常,访问时发生错误
503:服务器当前很忙,暂时无法响应客户端
4、HTTP 常见字段有哪些?
host:服务域名,connection:长连接,content-lenth:数据长度,content-type:数据类型,content-encoding:数据压缩格式
5、get与post有什么区别?
get语义为获取资源,post语义为对资源做出处理。
get是安全且幂等的,post是不安全且不幂等。
get的请求参数放在url路径上,post会放在请求体body中
get的多次回退操作并无影响,post的多次回退操作都被认为是重新提交资源
get发送数据时,直接发送header 和 data,并返回200,post先发送header,返回100后,再发送data,返回200。
6、HTTP的缓存技术有哪些?
分别是强制缓存和协商缓存,强制缓存是指当请求资源没过期时,会优先从本地缓存中拿取资源,协商缓存是指当请求资源过期后,会询问服务端,服务端返回304告知本地资源虽然过期但可以继续用,于是还是会拿去本地过期的资源来使用,这种与服务端协商后来判断是否使用本地缓存的技术是协商缓存。
7、HTTP/1.1的优缺点
优点:简单,灵活,易于扩展,跨平台
缺点:无状态,明文传输,不安全
相对于HTTP/1.0,做了进一步的优化:长连接,管道传输(减少整体响应时间),但存在队头阻塞的问题。
8、Http/2做了什么优化?
头部压缩,二进制格式,并发传输(stream),服务器主动推送资源,解决了响应的队头阻塞问题,但仍然在TCP层面还存在队头阻塞的问题
9、Http/3做了什么优化?
由于TCP存在队头阻塞的问题,故HTTP/3改成了基于UDP实现的QUIC协议,相对于HTTP/2,HTTP/3不存在队头阻塞问题,其次能够更快地连接建立,因为quic握手里包含TLS握手,之前TCP握手和TLS握手是分开的,最后能够连接迁移,以前从5g切换成wifi需要断开并重新建立连接,而HTTP/3能够直接迁移。
10、HTTP 与 HTTPS 有哪些区别?
HTTP是不安全的,HTTPS是安全的,HTTP连接的时候只需要进行TCP三次握手,而HTTPS则在三次握手之后进行SSL/TLS加密握手,HTTP的端口是80,HTTPs的端口是443,HTTPS具有证书,HTTP没有,HTTP是明文传输,而HTTPs是加密传输。
11、HTTPS的握手是怎么样的?
首先进行TCP三次握手,即客户端告诉服务端,我要开始连接了,然后发送自己的初始化序列号,自己进入syn-sent的状态,服务端接收到信号之后,返回ACK,ACK的值是客户端发来的初始化序列号的值+1,然后发送自己的初始化序列号,客户端收到后,返回ACK,ACK的值是服务端发来的初始化序列值+1。然后进行SSL/TLS加密握手,首先客户端告诉服务端我们要开始加密握手了,服务端发送一个CA证书给客户端,兵器里面包含一个公钥,客户端收到公钥后对一个随机密文加密,将加密后密文发送给服务端,服务端用私钥解密,然后之后的通信都用这个解密后的密文作为密钥进行通信。
12、HTTPS一定安全可靠吗?
至今为止,HTTPS还是安全可靠的,即使有出现安全问题,也本质上是因为使用人错误点击了不安全的根证书导致的,并不是HTTPS不够安全。
13、HTTP/1.1 如何优化?
减少HTTP请求(缓存);减少请求次数(合并请求);减少响应数据大小(压缩数据)
14、HTTPS如何优化?
软硬件升级,证书升级,会话重用(但要注意会话过期时间,避免带来风险)
15、既然有 HTTP 协议,为什么还要有 RPC?
TCP是一个无边界的消息流,因此它的上层必须要能够定义消息边界,本质上RPC是一种调用方式,其本意是希望调用远程方法和调用本地方法一样实现,gRPC才是一种协议,早期的RPC性能比htpp/1.1好,因此更多的公司都在用rpc,后面HTTP升级为HTTP/2后,性能高于RPC,但由于大多数公司都还在使用rpc,因此现在仍然还有很多公司还在用RPC。
16、什么是Socket?
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。