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