不可不知的软件测试经典面试题

♠ \color{red}{\spadesuit}

Q1、为什么要三次握手?/为什么不能用两次握手进行连接?

对三次握手不明白的可以看下三次握手和四次挥手

  答:三次握手完成两个功能:一是连接服务器指定的端口,建立TCP连接,保证通信双方的数据发送和接受正常;二是同步连接双方的序列号和确认号并交换TCP窗口大小信息,这个序列号在握手过程中被发送和确认。

三次握手是为了防止已失效的连接请求报文突然又传送到服务端,而发生错误。

三次握手若改为两次握手,很容易发生死锁。我们假设这样一种情况,考虑计算机S和C之间的通信,假定C给S发送一个分组请求,S收到后发送确认应答分组。按照两次握手协议,S认为连接已经成功建立,可以开始发送数据分组,可是,S的应答分组在传输给C的过程中出现丢失,C不知道S是否已经准备好,不知道S建立了什么样的序列号,C甚至会怀疑S是否已经收到了自己的请求,在这种情况下,C认为连接还未成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重新发出同样的分组,便形成了死锁。

Q2、为何连接的时候是三次握手,关闭的时候是四次挥手?

  答:连接的时候是三次握手,是因为Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文,其中ACK报文是响应,SYN是同步。但关闭时是四次是因为,当Server端收到FIN报文时,并不会立即关闭socket,它仅仅表示对方(Client端)发送完了自己要发的数据,但是,server端的数据未必已经发完,因此,Server端先礼貌地回应Client端一个ACK,”嗯,好的,我收到了“。只有当Server端把所有的数据都发完了,才能发送FIN报文,因此FIN和ACK不能同时一起发送给对方,需要分开来发送,导致多了一次,因此是四次挥手。

Q3、如果已经建立了连接,但是客户端突然出现故障怎么办?

  答:TCP还设有一个保活计时器,当然,客户端若出现故障,server端不可能傻傻一直等待下去,白白浪费资源。服务器每收到一客户端的请求后都会重新复位这份计时器,时间通常是设为2小时,若超过这个设定时间还未收到客户端的任何数据,服务器便会发送一个探测报文段,以后每隔一定时间(75分钟)发送一次。若一连发送10个探测报文人仍然没有得到反应,服务器就认为客户端出了故障,接着关闭连接。

Q4、为何TIME_WAIT状态需要经过2MSL才能返回到CLOSE状态?

  答:按道理,四个报文都发送完毕可以直接进入CLOSE状态了,但是,我们必须假设网络是不可靠的,有可能最后一个ACK丢失了。所以,TIME_WAIT状态就是用来重发可能丢失的ACK报文。

在client端发送出最后的ACK报文回复给server端(ACK可能会丢失),在server端未接收到ACK之前,会一直重复发送FIN片段,所以Client端不能关闭,必须处于TIME_WAIT等待状态。client端会设置一个定时器,等待2MSL的时间,如果在该时间内再次收到FIN,那么client端会重发ACK并再次等待2MSL(Maximum Segment Lifetime)若直到2MSL,Client端没有再次收到FIN,那么Client端推断ACK已经成功被接收,则结束TCP连接。

Q5、简述三次握手和四次挥手

参考我的另外一篇博文三次握手和四次挥手

Q6、为什么客户端最后要等待2MSL?(同Q4)

该问题和Q4问题类似,下面是另外一种回答参考

  答:它可以保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失。MSL是最大报文生存时间,2倍的MSL刚好是报文来回的时间,如果在这个2MSL时间内客户端没有收到服务器端发来的FIN片段,代表服务器端已经成功接收到了ACK,如果没有成功接收,服务器端会发送FIN片段,这是客户端可以重新发送ACK报文,所以它能确保发送的最后一个ACK报文到达服务器。

Q7、HTTP和HTTPS的区别?

  Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
二者之间存在如下不同:

  1. 端口不同:Http的默认端口是80,Https则是443;
  2. 资源消耗:和Http通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
  3. 开销:Https需要申请证书,而证书一般需要向认证机构购买;
  4. http连接很简单,无状态的,而https是由SSL+HTTP协议构建的可进行加密传输、身份验证的网络协议,比http安全。

Q8、TCP和UDP区别?

TCP (Transmission Control Protocol)是传输控制协议
UDP(User Datagram Protocol)是用户数据报协议
两者都属于传输层协议,它们之间的区别包括:

  1. TCP是面向连接的,UDP是无连接的;
  2. TCP是可靠的,UDP是不可靠的;
  3. TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
  4. TCP是面向字节流的,UDP是面向报文的;
  5. TCP有拥塞控制机制,UDP没有拥塞控制,适合媒体通信;
  6. TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大

所谓字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传输给对方。

Q9、HTPPS为什么安全?

这个是我朋友在秋招面试时在回答完Q7的问题后延伸出来的另外一个问题。详情看这篇☞HTTPS为什么安全

更多面试题可以看
软件测试笔试面试题
三次握手和四次挥手

  • 16
    点赞
  • 270
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值