网络面试题

124 阅读10分钟

tcp 的握手与挥手

三次握手

图例

image.png

image.png

客户端请求

客户端发送一个小的TCP分组,这个分组设置了一个特殊的SYN标记,用来表示一条连接请求

同时设置初始序列号为x赋值给Seq(这次发送的数据SYN=1, Seq=1)

服务器应答

服务器接受客户端的SYN连接后,会选择服务器初始化序号y

同时向客户端发送含有连接确认(SYN + ACK)、Seq = 0(服务器初始序号),Ack = 1(客户端序号x + 1)等信息TCP分组

客户端应答服务应答

客户端收到了服务器的确定字段,向服务器发送带有ACK = 1, Seq = 1(x + 1), Ack = (服务器Ack信息拷贝)等字段的TCP分组信息给服务器

四次挥手

图例

image.png

客户端发送一个TCP分组,这个分组设置FIN标识,表示断开连接,并设置了Seq=p。且客户端进入到FIN_WAIT_1状态中

服务器接受客户端的FIN请求,返回ACK(ACK=p+1,Seq = y) 服务器会进入CLOSE_WAIT状态

这个时候客户端就会进入FIN_WAIT_2状态。后客户端进入到了TIME_WAIT阶段(等待2MSL).这个阶段用于等待服务器最后的ACK

服务器发送 FIN(FIN, Seq = y, ACK = p + 1)这条应答。然后服务器就会进入LAST_ACK状态中

客户端接受了服务端的应答后,同时对这个应答发送应答(ACK = y + 1)

http与https的区别,加密怎么加的?

HTTP 和 HTTPS的区别

  • HTTPS 协议需要到CA(数字证书)申请证书,一般免费证书很少,需要交费

  • HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl加密传输协议

  • HTTP 和 HTTPS 使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443

  • HTTPS 协议是由SSL + HTTP协议构建的可进行加密传输、身份认证的网路协议 要比 HTTP协议安全

  • HTTPS 内容传输经过完整性校验

  • HTTPS 内容经过对称加密,每个连接生成一个唯一的加密密钥

对称加密

加密和解密的密钥都是一样的

非对称加密

公钥加密,私钥解密

数字证书

由权威部门颁布的证书,证书里包含了公钥、证书的所有者、证书的发布机构、证书的有效期

各大CA机构的公钥是默认安装在操作系统里的

加密过程

image.png

  1. c->s,客户端发起加密通信请求,这个请求通常叫做 ClientHello请求,告知自己支持的协议版本号,加密算法,压缩算法,以及一个用于生成后续通信密钥的随机数;

  2. s->c,服务端响应,也叫作 ServerHello,确认加密通信协议,加密算法,以及一个用于生成后续通信密钥的随机数,还有网站证书;

  3. c->s,客户端在收到上一步服务端的响应之后,首先会检查证书的颁发者是否可信任,是否过期,域名是否一致,并且从操作系统的证书链中找出该证书的上一级证书,并拿出服务端证书的公钥,然后验证签名和hash,如果验证失败,就会显示警告,我们经常在Chrome里面看到,“此网站有风险,是否继续什么的”。如果验证通过,客户端会向服务端发送一个称作 “pre-master-key” 的随机数,该随机数使用证书的公钥加密,以及编码改变通知(以后咋们就用协商的密钥堆成加密通信了),客户端完成握手。

  4. 服务端在收到上一步客户端请求之后,也会确认我以后发给你的信息可

参考资料

http各种返回码,401和406啥区别?

HTTP 错误 401 为未授权错误

401.1 未授权:登录失败

此错误表明传输给服务器的证书与登录服务器所需的证书不匹配

请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限

401.2 未授权:服务器的配置导致登录失败

此错误表明传输给服务器的证书与登录服务器所需的证书不匹配。此错误通常由未发送正确的 WWW 验证表头字段所致

请与 Web 服务器的管理员联系,以确认您是否具有访问所请求资源的权限

401.3 未授权:由于资源中的 ACL 而未授权

此错误表明客户所传输的证书没有对服务器中特定资源的访问权限

此资源可能是客户机中的地址行所列出的网页或文件,也可能是处理客户机中的地址行所列出的文件所需服务器上的其他文件

请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限

401.4 未授权:授权服务被筛选程序拒绝

此错误表明 Web 服务器已经安装了筛选程序,用以验证连接到服务器的用户

此筛选程序拒绝连接到此服务器的真品证书的访问

请记录试图访问的完整地址,并与 Web 服务器的管理员联系以确认您是否具有访问所请求资源的权限

401.5 未授权:ISAPI/CGI 应用程序的授权失败

此错误表明试图使用的 Web服务器中的地址已经安装了 ISAPI 或 CGI程序,在继续之前用以验证用户的证书

此程序拒绝用来连接到服务器的真品证书的访问

请记录试图访问的完整地址,并与 Web服务器的管理员联系以确认您是否具有访问所请求资源的权限

HTTP 错误 406

406 不可接受

根据此请求中所发送的“接受”标题,此请求所标识的资源只能生成内容特征为“不可接受”的响应实体

如果问题依然存在,请与服务器的管理员联系

参考资料

time_wait在哪一端产生,作用是什么

开始时间

time_wait 开始时间为tcp四次挥手中主动关闭连接放发送最后一次挥手,也就是ACK = 1的信号结束后,主动关闭连接方所处的状态

然后time_wait的持续时间为2MSL。MSL是Maximun Segment Lifetime,译为“报文最大生存时间”,可为30s,1min或2min

2msl就是2倍的这个时间。工程上为2min,2msl就是4min

作用

原因1

为了保证客户端发送的最后一个ack报文段能够到达服务器。因为这最后一个ack确认包可能会丢失,然后服务器就会超时重传第三次挥手的fin信息报,然后客户端再重传一次第四次挥手的ack报文

如果没有这2msl,客户端发送完最后一个ack数据报后直接关闭连接,那么就接收不到服务器超时重传的fin信息报(此处应该是客户端收到一个非法的报文段,而返回一个RST的数据报,表明拒绝此次通信,然后双方就产生异常,而不是收不到),那么服务器就不能按正常步骤进入close状态

那么就会耗费服务器的资源。当网络中存在大量的timewait状态,那么服务器的压力可想而知

原因2

在第四次挥手后,经过2msl的时间足以让本次连接产生的所有报文段都从网络中消失,这样下一次新的连接中就肯定不会出现旧连接的报文段

参考资料

输入URL,从一个请求到响应都发生了什么事?

  1. 常规的网络交互过程是从客户端发起网络请求,用户态的应用程序(浏览器)会生成HTTP请求报文、并通过DNS协议查找对应的远端IP地址
  • 请求发出之前,浏览器首先会检查保存在本地计算机中的缓存,如果访问过当前的 URL,会先进入缓存中查询是否有要请求的文件

  • DNS解析 > 浏览器DNS缓存 > hosts文件 > 本地DNS服务器 > (根DNS服务器 > 顶级服务器 > 权威服务器)

  1. 在套接字生成之后进入内核态,浏览器会委托操作系统内核协议栈中的上半部分,也就是TCP/UDP协议发起连接请求

  2. 然后经由协议下半部分的IP协议进行封装,使数据具有远程定位能力

  • IP 层协议的函数都要对网络数据包做后面这 5 步操作

  • 数据包校验和检验

  • 防火墙对数据包过滤

  • IP 选项处理

  • 数据分片和重组

  • 接收、发送和前送

  1. 经过MAC层处理,找到接收方的目标MAC地址

  2. 最终数据包在经过网卡转化成电信号交换机、路由器发送到服务器,服务段经过处理拿到数据,再通过各种网络协议把数据响应给客户端

  3. 客户端拿到数据进行渲染

  4. 客户端和服务端之间反复交换数据,客户端的页面数据就会发生变化

http协议的header中有哪些key及含义?

| key | 含义 |

| --- | --- |

| Accept-Charset | 客户端可以接受的字符集 |

| Content-Type | 正文的格式 |

| Cache-control | 控制缓存 |

| If-Modified-Since | 客户端发送某个资源的更新时间,和服务端的缓存资源里的时间对比。若没有更新则无需返回资源,节省带宽 |

| Retry-After | 告诉客户端应该在多长时间以后再次尝试一下 |

http 状态码及其含意

| 状态码 | 含义 |

| --- | --- |

| 200 | 请求已成功,请求所希望的响应头或数据体将随此响应返回 |

| 301 | 被请求的资源已永久移动到新位置 |

| 302 | 请求的资源现在临时从不同的URI响应请求 |

| 400 | 1、语义有误,当前请求无法被服务器理解。 2、请求参数有误 |

| 401 | 当前请求需要验证 |

| 403 | 服务器已经理解请求,但是拒绝执行它 |

| 404 | 请求失败,请求所希望得到的资源未被服务器上发现 |

| 500 | 服务器遇到一个未曾预料的状况,无法完成对请求的处理,会在程序码出错时出现 |

| 501 | 服务器不支持当前请求所需要的某个功能,无法识别请求的方法 |

| 502 | 作为网关或代理工作的服务器尝试执行请求时,从上游服务器收到无效响应 |

| 503 | 由于临时的服务器维护或过载,服务器当前无法处理请求