测试开发-一天一个面试题之计算机网络

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试开发-一天一个面试题之计算机网络相关的知识,希望对你有一定的参考价值。

写在前面

有好多同学面试被问到osi 七层模型怎么划分、是否了解http 协议,类似这样的问题,很迷惑,我面试测试为什么要问这些问题呢,其实这类问题可以统一归类为计算机网络问题,说到计算机网络,是大学必修的一门课程,这门课讲述了从应用层到物理层所有计算机相关的知识,是计算机基础的课程,那么为什么要 测试工程师要被问到这样的问题呢,正如刚才提到,这是一门基础课程,1、是可以考验面试者是否对基础掌握的足够扎实,2、可以考察面试者是否为计算机专业,3、那就是工作中也是常常用到这方面知识。

什么时候用到了计算机网络?

如果工作在互联网行业的公司,我们的工作大部分是在应用层完成,也不排除有人在硬件行业做测试,可能工作在网络层,既然这样,最常见的协议就是http 协议,除此之外,如果是长链接或者数据传输,就可能用到websocket 协议或者 tcp&udp 协议,所以计算机网络是基础中的基础,我们在工作中无时无刻都是用到。

问答环节

1、TCP/IP三次握手,四次挥手  
    三次握手  
       第一次握手(SYN=1,seq=x):客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。 
       第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1):服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1。服务器端选择自己的ISN序列号,放在seq域里,同时将确认序号(Acknowledgement Number)设置为客户的ISN加1,即X+1。发送完毕后,服务器端进入SYN_RCVD状态。  
      第三次握手(ACK=1,ACKnum=y+1):客户端再次发送确认包(ACK),SYN标志位为0,ACK标志位为1,并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1。  
      发送完毕后,客户端进入ESTABLISHED状态,当服务器端收到这个包时,也进入ESTABLISHED状态,TCP握手结束,TCP连接建立完成  
    四次挥手  
        第一次挥手(FIN=1,seq=x):假设客户端想要关闭连接,客户端发送一个FIN标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接收数据。 发送完毕之后,客户端进入FIN_WAIT_1状态。  
        第二次挥手(ACK=1,ACKnum=x+1):服务器端确认客户端的FIN包,发送一个确认包,表明自己接收到了客户端关闭连接的请求,但还没有准备好关闭连接。发送完毕后,服务器端进入CLOSE_WAIT状态,客户端接收到这个确认包之后进入FIN_WAIT_2状态,等待服务器端关闭连接。  

         第三次挥手(FIN=1,seq=y):服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN置为1。 发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK  

        第四次挥手(ACK=1,ACKnum=y+1):客户端接收到来自服务器的端的关闭请求,发送一个确认包,并进入TIME_WAIT状态,等待可能出现的要重传的ACK包。服务器端接收到这个确认包之后,关闭连接,进入CLOSED状态。  
     客户端等待了某个固定时间(两个最大段生命周期,2MSL,2Maximum Segment Lifetime)之后,没有收到服务器端的ACK,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态。  


2、TCP和UDP的区别  
    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接  
    2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付  
    3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)  
    4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信  
    5、TCP首部开销20字节;UDP的首部开销小,只有8个字节  
    6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道  
3、OSI七层模型  
    应用层 http、smtp、ftp  
    表示层 数据格式化、数据加密、代码转换  
    会话层 建立和解除联系  
    传输层 提供对应的端口/tcp、 udp  
    网络层 为数据包选择路由、路由协议  
    数据链路层 传输有地址的帧以及错误检查功能  
    物理层 二进制进行传输/ ieee、iso  


4、DNS(运行在UDP协议上,端口53)  

    HTTP和HTTPS区别  
        https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用  
        http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议  
        http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443  
        http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全  


5、请求方式  
    常用:get 、post  
    不常用: delete 、put、 option、 head  


6、GET和POST请求的区别  
        参数位置:GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.  
        长度 :GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.  
        请求次数:get 发送一次 ,post 请求两次(第一次发送请求头信息,第二次发送请求信息)  
        获取方式:GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。  
        安全:GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.  


7、http协议包含的内容  
    请求信息  
        请求行  :请求方式、请求地址、http版本  
        请求头  :host、Content-Type、content-encoding、server、user-angent 版本信息  
        请求正文 :data  
        返回信息 
            状态行  :http版本、状态码、转台信息  
            响应头  :类似请求头  
            相应正文  :data  

        状态码  
             1xx:指示信息--表示请求已接收,继续处理  
             2xx:成功--表示请求已被成功接收、理解、接受  
             3xx:重定向--要完成请求必须进行更进一步的操作  
             4xx:客户端错误--请求有语法错误或请求无法实现  
             5xx:服务器端错误--服务器未能实现合法的请求  
8、常见状态码:  
        200 OK //客户端请求成功  
        302 //临时移动  
        400 Bad Request //客户端请求有语法错误,不能被服务器所理解  
        401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用  
        403 Forbidden //服务器收到请求,但是拒绝提供服务  
        404 Not Found //请求资源不存在,eg:输入了错误的URL  
        500 Internal Server Error //服务器发生不可预期的错误  
        501 尚未实施//服务器不具备完成请求的功能  
        504 网关超时 没有及时从上有服务器接受到返回  
        503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常  


9、HTTP原理  
    1、客户端连接到Web服务器  
        一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。  
    2、发送HTTP请求  
        通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。  
    3、服务器接受请求并返回HTTP响应  
        Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。  
    4、释放连接TCP连接  
        若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;  
    5、客户端浏览器解析html内容  
         客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。  

写在最后

我是小巴哥,一个陪你成长,实实在在分享 测试干货职场经验的人,欢迎关注!!!

以上是关于测试开发-一天一个面试题之计算机网络的主要内容,如果未能解决你的问题,请参考以下文章

面试题之心理测试题及答案

测试开发-一天一个面试题6️⃣之接口怎么测试

前端面试题之计算机网络篇

37道WEB前端开发面试题之JavaScript篇章!

前端开发工程师面试题之算法篇

测试开发-一天一个面试题8️⃣之sql 优化问题