【软件测试】Web测试基础(各类协议)面试必背

目录

TCP/IP协议

1.概念

2.TCP/IP层次结构与OSI层次结构的对照关系图

3.TCP简介

4.TCP标志位(Flags)

5.TCP三次握手建立连接

6.TCP四次挥手关闭连接

7.三次握手过程中可以携带数据吗

8.三次握手的作用

9.为什么建立连接是三次握手,关闭连接却是四次挥手

10.为什么需要三次握手

11.为什么需要四次挥手

12.(ISN)是固定的吗

13.什么是半连接队列

14.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态

15.为什么不能用两次握手进行连接

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

17.首次握手的隐患------SYN超时问题

18.拓展进阶

HTTP协议

1.概述

2.协议简介

3.浏览器输入url按回车后执行了哪些操作

4.常用的HTTP请求方法有哪些

5.GET和POST的区别

6.常见的HTTP相应状态码

7.HTTP无状态协议

8.实际中的使用情况

9.哪些方法可以实现有状态连接

10.cookies机制和session机制的区别

11.http和https区别

12.HTTP请求报文与响应报文格式

13.常见的 POST 提交数据方式

14.什么是DNS

15.请描述网络传输的过程

16.Http与Https优缺点

17.Http优化

18.Http协议有那些特征

19.Http协议中Http1.0与1.1区别

B/S和C/S


前言:

        在学习web测试前,我们需要对计算机网络的一些概念有一定的了解,以面试问题的形式来详细了解

TCP/IP协议

1.概念

        TCP/IP协议,严格来说是一个协议族,里面包括很多协议(Telnet、HTTP、SMTP、TCP、UDP、IP、ARP等),由于TCP协议和IP是结构中最核心的协议,所以统称为TCP/IP协议。

2.TCP/IP层次结构与OSI层次结构的对照关系图

OSI七层网络模型TCP/IP概念层模型功能TCP/IP协议族
应用层应用层文件传输、电子邮件、文件服务、虚拟终端HTTP、TFTP、SNMP、FTP(文件传输协议)、SMTP、DNS(域名系统)、Telnet
表示层数据格式化、代码转换、数据加密 
会话层解除或建立与别的接点的联系 
传输层传输层提供端对端的接口TCP(传输控制协议)、UDP(用户数据包协议)
网络层网络层为数据包选择路由IP、ICMP、RIP、OSPF
数据链路层链路层传输有地址的帧以及错误检测功能SLIP、PPP、ARP、CSLIP
物理层以二进制数据形式在物理媒体上传输数据ISO2110、IEEE802、IEEE802.2
    

3.TCP简介

  1、面向连接的、可靠的、基于字节流的传输层的通信协议;

  2、将应用层的数据流分割成报文段并发送给目标节点的TCP层;

  3、数据包都有序号,对方收到则发送ACK确认,未收到则重传;

  4、使用校验和来检验数据在传输过程中是否有误;

4.TCP标志位(Flags)

  1、URG:紧急指针标志;

  2、ACK:确认序号标志;

  3、PSH:push标志;

  4、RST:重置连接标志;

  5、SYN:同步序号,用于建立连接过程;

  6、FIN:finish标志,用于释放连接

5.TCP三次握手建立连接

   刚开始客户端处于 closed 的状态,服务端处于 listen 状态:

      1、第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。

      2、第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。

      3、第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。

      4、服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方以建立起了链接。
 

6.TCP四次挥手关闭连接

      刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求:

   1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态

      2、第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态【服务端可能还有一些数据没有传送完,不能立马关闭】

      3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态

      4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

      5、服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态

7.三次握手过程中可以携带数据吗

        第一次、第二次握手不可以携带数据,而第三次握手是可以携带数据的。

        为什么这样呢?假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据,因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。也就是说,第一次握手可以放数据的话,其中一个简单的原因就是会让服务器更加容易受到攻击了。
        而对于第三次的话,此时客户端已经处于 established 状态,也就是说,对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据。

8.三次握手的作用

      1、确认双方的接受能力、发送能力是否正常。

      2、指定自己的初始化序列号,为后面的可靠传送做准备。

      3、如果是 https 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成到。

9.为什么建立连接是三次握手,关闭连接却是四次挥手

        因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

10.为什么需要三次握手

        目的:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。主要防止资源的浪费。

11.为什么需要四次挥手

        为了保证在最后断开的时候,客户端能够发送最后一个ACK报文段能够被服务器接收到。如果客户端在收到服务器给它的断开连接的请求之后,回应完服务器就直接断开连接的话,若服务器没有收到回应就无法进入CLOSE状态,所以客户端要等待两个最长报文段寿命的时间,以便于服务器没有收到请求之后重新发送请求。

  防止“已失效的连接请求报文”出现在连接中,在释放连接的过程中会有一些无效的滞留报文,这些报文在经过2MSL的时间内就可以发送到目的地,不会滞留在网络中。这样就可以避免在下一个连接中出现上一个连接的滞留报文了。

12.(ISN)是固定的吗

        三次握手的一个重要功能是客户端和服务端交换ISN(Initial Sequence Number), 以便让对方知道接下来接收数据的时候如何按序列号组装数据。

        如果ISN是固定的,攻击者很容易猜出后续的确认号,因此 ISN 是动态生成的。

13.什么是半连接队列

        服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。

14.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态

        虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

15.为什么不能用两次握手进行连接

       3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

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

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

       TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

17.首次握手的隐患------SYN超时问题

题起因和分析:

  1、服务器收到客户端的SYN,回复SYN和ACK的时候未收到ACK确认

  2、服务器不断重试直至超时,Linux默认等待63秒才断开连接;(重复5次【不包括第一次】,从1秒开始,每次重试都翻倍:1+2+4+8+16+32=63秒)

针对SYN Flood的防护措施:

  1、SYN队列满后,通过tcp_syncookies参数会发SYN cookie【源端口+目标端口+时间戳组成】;

  2、若为正常连接则Client会回发SYN Cookie,直接建立连接;

建立连接后,Client出现故障怎么办:

保活机制:

  1、向对方发送保活探测报文,如果未收到相应则继续发送;

  2、尝试次数达到保活探测数仍未收到相应则中断连接;

18.拓展进阶

https://blog.csdn.net/csdnnews/article/details/86570658

https://blog.csdn.net/heyi5351230/article/details/106115484

https://blog.csdn.net/weixin_34075268/article/details/87974209?utm_medium=distribute.pc_relevant_right.none-task-blog-OPENSEARCH-4.nonecase&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-OPENSEARCH-4.nonecase

HTTP协议

1.概述

        对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”

2.协议简介

        1、应用层协议, 一般以TCP为基础,数据收发通过TCP实现;

        2、一次性连接。服务器与客户端的每次连接只处理一个请求,下次请求重新建立连接;

        3、 无状态协议。服务器不保留与客户交易时的状态,减轻记忆负担,较快响应速度;

        4、默认端口号80,常用请求方法GET/POST

3.浏览器输入url按回车后执行了哪些操作

        1、首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法
        2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作
        浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求
        操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存)
        路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存
        ISP缓存:若上述均失败,继续向ISP搜索
        3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址
        4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手
        5、握手成功后,浏览器向服务器发送http请求,请求数据包
        6、服务器处理收到的请求,将数据返回至浏览器
        7、浏览器收到HTTP响应
        8、浏览器解码响应,如果响应可以缓存,则存入缓存。
        9、 浏览器发送请求获取嵌入在HTML中的资源(html,css,javascript,图片,音乐······),对于未知类型,会弹出对话框
       10、 浏览器发送异步请求
       11、页面全部渲染结束。

4.常用的HTTP请求方法有哪些

        GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
        POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
        PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置
        HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
        DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件
        OPTIONS:查询相应URI支持的HTTP方法

5.GET和POST的区别

        标准答案参考自w3schools:

  • GET在浏览器回退时是无害的,而POST会再次提交请求

  • GET产生的URL地址可以被Bookmark,而POST不可以

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置

  • GET请求只能进行url编码,而POST支持多种编码方式

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留

  • GET请求在URL中传送的参数是有长度限制的,而POST没有

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

  • GET参数通过URL传递,POST放在Request body中

        (实际上,这两种方法在开发中是没什么区别的,但在面试软件测试的时候面试官问起来,最好还是按照标准答案来回答了,详情可以去知乎搜索“get和post有什么区别”)

6.常见的HTTP相应状态码

返回的状态
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙

7.HTTP无状态协议

        所谓的无状态就是每次请求完成后,不会在客户端和服务器上保存任何的信息,对于客户端和服务器来说,根本不知道上一次请求的信息是什么,甚至不知道本次连接的对端是不是上次连接的那一端,它的生命周期随着TCP/IP连接的关闭结束了。

        无状态是指协议对于事务处理没有记忆功能。缺少状态意味着,假如后面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要前面信息时,应答就较快。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的。

        (1)无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息
        (2)无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

8.实际中的使用情况

  在web应用中,我们使用http协议,但是我们需要的web是有状态的,因此加入了cookie、session等机制实现有状态的的web。

  web=http协议+状态机制+其他机制

9.哪些方法可以实现有状态连接

        cookies, session, application

        有人将web应用中有无状态的情况,比着顾客逛商店的情景。

        顾客:浏览器访问方;

        商店:web服务器;

        一次购买:一次http访问

        我们知道,上一次顾客购买,并不代表顾客下一个小时一定会买(当然也不能代表不会)。也就是说同一个顾客的不同购买之间的关系是不定的。所以说实在的,这种情况下,让商店保存所有的顾客购买的信息,等到下一次购买可以知道这个顾客以前购买的内容代价非常大的。所以商店为了避免这个代价,索性就认为每次的购买都是一次独立的新的购买。浅台词:商店不区分对待老顾客和新过客。这就是无状态的。

        但是,商店为了提高收益。她是想鼓励顾客购买的。所以告诉你,只要你在一个月内购买了5瓶以上的啤酒,就送你一个酒杯。

        我们看看这种情况我们怎么去实现呢?

        A,给顾客发放一个磁卡,里面放有顾客过去的购买信息。

        这样商店就可以知道了。这就是cookie.

        B,给顾客发放一个唯一号码,号码制定的顾客的消费信息,存储在商店的服务器中。这就是session。

        最后,商店可以全局的决定,是5瓶为送酒杯还是6瓶。这就是application。

        其实,这些机制都是在无状态的传统购买过程中加入了一点东西,使整个过程变得有状态。Web应用就是这样的。

10.cookies机制和session机制的区别

        cookies数据保存在客户端,session数据保存在服务器端

        cookies可以减轻服务器压力,但是不安全,容易进行cookies欺骗

        session较安全,但占用服务器资源

11.http和https区别

        HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

总的来说: HTTPS=SSL+HTTP

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

12.HTTP请求报文与响应报文格式

请求报文包含三部分:
a、请求行:包含请求方法、URI、HTTP版本信息
b、请求头部(headers)字段
c、请求内容实体(body)
响应报文包含三部分:
a、状态行:包含HTTP版本、状态码、状态码的原因短语
b、响应头部(headers)字段
c、响应内容(body)实体

13.常见的 POST 提交数据方式

        application/x-www-form-urlencoded
        multipart/form-data
        application/json
        text/xml

14.什么是DNS

        域名解析服务。将主机名转换为IP地址。如将http://www.cnblogs.com/主机名转换为IP地址:211.137.51.78

15.请描述网络传输的过程

16.Http与Https优缺点

  • 通信使用明文不加密,内容可能被窃听,也就是被抓包分析。
  • 不验证通信方身份,可能遭到伪装
  • 无法验证报文完整性,可能被篡改
  • HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护

17.Http优化

  • 利用负载均衡优化和加速HTTP应用
  • 利用HTTP Cache来优化网站

18.Http协议有那些特征

支持客户/服务器模式
简单快速
灵活
无连接无状态

19.Http协议中Http1.0与1.1区别

  • 在http1.0中,当建立连接后,客户端发送一个请求,服务器端返回一个信息后就关闭连接,当浏览器下次请求的时候又要建立连接,显然这种不断建立连接的方式,会造成很多问题。
  • 在http1.1中,引入了持续连接的概念,通过这种连接,浏览器可以建立一个连接之后,发送请求并得到返回信息,然后继续发送请求再次等到返回信息,也就是说客户端可以连续发送多个请求,而不用等待每一个响应的到来。

B/S和C/S

  •  CS = Client - Server = 客户端 - 服务器

        例子: QQ,迅雷,快播,各种网络游戏等等。有和服务器通讯的

        信息有着一对一,点对点的转发,单线传输,实时转发的特性的,服务器只做转发功能,大量的工作在客户端,这样的需求一般就是CS架构

  •  BS = Browser - Server = 浏览器 - 服务器

        例子:所有的网站

        支持很多人访问(甚至包括陌生人,游客等),不需要信息的实时性,但需要长期有效性,这样的需求一定是BS架构

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值