计算机网络面试题总结

一、TCP和UDP的区别

1、udp是无连接的,tcp是面向连接的
2、udp是不可靠传输,tcp是可靠传输
3、udp是面向报文传输,tcp是面向字节流传输

二、TCP的三次握手

第一次握手:客户端向服务器发送一个SYN报文段,报文段的首部中的标志位SYN置为1,另外还会指明自己的初始化序号seq=x,此时客户端处于SYN_SENT状态。

第二次握手:服务器收到SYN的报文段后,会以自己的SYN-ACK报文进行应答。该应答报文的首部有三个重要信息:首先SYN被置为1;其次,确认号字段ack=x+1;最后服务器选择自己的初始序号seq=y。

第三次握手:客户端收到SYN-ACK报文后,会发送一个ACK报文段,该报文段中序号seq=x+1,确认号ack=y+1,表明我已经收到了你的确认。此时客户端处于ESTABLISHED状态。

三、为什么TCP三次握手不是两次

1,、第一次握手:服务器能够知道自己的接收能力和客户端的发送能力是正常的

2、第二次握手:客户端能够知道自己的发送能力和接收能力都是正常的,以及知道服务器的发送和接收能力是正常的

3、第三次握手:服务器能够知道自己的发送能力和客户端的接受能力是正常的

四、TCP的四次挥手

第一次挥手:客户端发送一个FIN报文段,报文段中指定序号seq=u。此时客户端处于FIN_WAIT_1状态。

第二次挥手:服务器收到报文段后立即发出确认应答,确认号是ack=u+1,然后服务器就进入CLOSE-WAIT(关闭等待)状态,客户端处于FIN_WAIT_2状态。如果服务器还有数据要发送, 客户端仍要接收

第三次挥手:如果数据传送完毕,服务器也想断开连接,那么就发送一个FIN报文,并重新指定一个序号seq=w,确认号还是ack=u+1,表明可以断开连接。这时 服务器 就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到报文后,一样发出一个ACK报文段做出应答,上一次客户端发送的报文段序号为u,那么这次序号就是seq=u+1,确认号为ack=w+1。此时客户端处于TIME_WAIT状态,需要经过一段时间确保服务器收到自己的应答报文后,才会进入CLOSED状态。

五、为什么TCP四次挥手,不是三次

这个因为第一次挥手表示客户端发送了一个fin的包,表示客户端已发送数据完毕,但是服务端这个时候可能还有数据没有发送完成,先发送给客户端一个ask的包,等待自己的数据发送完成才能向客户端发送一个 fin的包,表示自己的数据也已发送完成。这样中间就必须为两次来发送ask和fin。

六、为什么要等待2MSL?(为什么会存在一个TIME_WAIT状态?)

        MSL(Maximum SegmentLifetime)是报文段最大生存时间。通常MSL的值为30秒左右。

1、如果客户端直接关闭连接并释放资源,而服务器端的ACK报文段在网络中延迟到达,这时客户端已经关闭了(网络中的路由器或防火墙等设备可能还有一些缓存的数据包,导致服务器无法接收ACK),服务器会重新发送FIN报文段,要求重新开始挥手过程。如果服务器在一段时间内一直没有收到客户端发送的ACK报文段,那么它会认为客户端可能已经失去了响应或断开了连接。并且会在一定时间内关闭连接,并在TIME_WAIT状态中等待一段时间,以确保网络中的延迟报文段被丢弃,避免可能出现的数据混淆问题。

2、为了保证关闭连接的稳定性和可靠性,最后一次挥手客户端发送完ACK报文并不会立即关闭连接,会等待2MSL的时间,如果在这个时间内没有接收到FIN报文,说明自己发送的ACK正常到达,不需要再次发送,可以安心进入CLOSED状态了。如果这个时间内接收到了FIN报文,那么客户端就知道自己发送的ACK丢失了,需要重新发送。

七、HTTP和HTTPS的区别

由来:https解决了http的传输的安全问题,因为http传输的是明文,简单来说https=http+ssl(是一种用于加密和保护网络通信的安全协议)进行加密传输,https是身份认证的网络协议

https两个作用:1.建立信息安全通道 2.网站的真实性

httphttps
证书不需要需要ca证书,需要费用
信息传输方式明文密文
连接方式80端口443端口

八、TCP报文格式

 九、从输入网址到浏览器显示过程?

1)DNS对输入网址进行域名解析;

2)建立TCP连接(三次握手);

3)客户端发送HTTP请求,服务端响应请求;

4)浏览器解析渲染页面;

5)连接结束(四次挥手)。

十、DNS 解析过程?

主要依次查询浏览器、操作系统、本地域名服务器、根域名服务器、主(顶级)域名服务器、注册域名服务器中的域名与 IP 映射关系。

1)浏览器先检查自身缓存中有没有被解析过的这个域名对应的 IP 地址,如果有,解析结束。(同时域名被缓存的时间也可通过 TTL 属性来设置。)

2)如果浏览器没有命中缓存,则检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。(在 windows 中可通过 c 盘中一个叫 hosts 的文件来设置,如果在这指定了一个域名对应的 IP,则浏览器会优先使用这个 IP 地址。)

3)如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了;

4)如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析;

5)根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址;

6)此时LDNS再发送请求给上一步返回的 gTLD;

7)接受请求的 gTLD 查找并返回这个域名对应的 Name Server 的地址,这个 Name Server 就是网站注册的域名服务器;

8)Name Server 根据映射关系表找到目标 IP 返回给 LDNS;

9)LDNS 缓存这个域名和对应的 IP;

10)LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束。

十一、有哪些常见状态码?

  • 1XX 正在处理

1)100(继续):服务器已收到请求的一部分,等待其余部分;

2)101(切换协议):服务器根据客户端的请求切换协议;

  • 2XX 成功处理
  • 3XX 重定向

1)301(永久)302(临时);

2)303 307 308区别:link

  • 4XX 客户端错误

1)404(未找到);

2)405(方法禁用);

  • 5XX 服务器错误

1)500(服务器内部错误);

2)504(网关超时)。
 

十二、https的真正请求流程

  1. 客户端发起请求:并携带浏览器支持的加密算法和哈希算法,以及生成一个随机数

  2. 服务器返回证书:服务器从浏览器发来的哈希算法和加密算法中重选择合适的,并和数字证书以及生成一个随机数一起返回

  3. 客户端验证证书:浏览器检查证书的合法性。从浏览器的数字证书列表中查找下发证书的机构,如果没有找到则会提示用户,如果找到了则会取出公钥,用公钥解密证书

  4. 客户端生成随机数:使用数字证书中拿到的服务器公钥,加密这个随机数,然后发给服务器。

  5. 服务器使用自己的私钥,来解密客户端发送过来的随机数。这样服务器就拿到了第三个随机数。而且只有客户端和服务器端知道这第三个随机数,因为第三个随机数是通过加密传输的。
  6. 客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成会话秘钥,以后的对话过程都使用这个对称秘钥(即会话秘钥)来加密信息。

十三、Https 为何采用非对称加密?

证书是公开的,中间人可以随意得到证书,但私钥是无法获取的,一份公钥是不可能推算出其对应的私钥,中间人即使拿到证书也无法伪装成合法服务端,因为无法对客户端传入的加密数据进行解密。

十四、如何预防中间人攻击?

使用 CA 证书。权威机构是要有认证的,不是随便一个机构都有资格颁发证书,不然也不叫做权威机构。另外,证书的可信性基于信任制,权威机构需要对其颁发的证书进行信用背书,只要是权威机构生成的证书,我们就认为是合法的。所以权威机构会对申请者的信息进行审核,不同等级的权威机构对审核的要求也不一样,于是证书也分为免费的、便宜的和贵的。

十五、什么是 TCP 粘包和拆包?

TCP 粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。

十六、如何处理粘包现象?

  1. 定长消息:在发送数据时,发送方将每个数据包的长度固定为固定值。接收方在接收数据时,按照固定长度进行分割,确保每次接收到的数据包长度一致。

  2. 分隔符:在发送数据时,在每个数据包的结尾添加一个特定的分隔符,例如换行符或其他特殊字符。接收方根据分隔符将接收到的数据包进行分割。

  3. 消息头:在发送数据时,为每个数据包添加一个消息头,其中包含数据包的长度信息。接收方首先读取消息头,然后根据长度信息正确地解析和处理数据。

  4. 使用消息结束标记:在数据传输过程中,在每个数据包的结尾添加一个特定的标记,表示该数据包是消息的结束。接收方根据结束标记将接收到的数据包进行分割。

  5. 使用定时器和缓冲区:接收方可以设置一个定时器,在规定时间内等待接收到完整的数据包。如果定时器到期时还没有接收到完整的数据包,则对接收到的部分数据进行缓存,直到接收到完整的数据包后再进行处理。

  6. 应用层协议设计:在设计通信协议时,可以考虑添加特定的数据包格式或控制字段,以便接收方能够准确地识别数据包的开始和结束,从而正确处理数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值