一、网络模型及传输

1.1 OSI七层网络模型
OSI七层模型:是ISO组织研究的一种网络互连模型,目的是为了推荐所有公司使用这个规范来控制网络。OSI七层模型从下至上分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。它们大概的作用如下图所示。

关于七层网络模型中的每一层,都是为了解决网络中的某一个或某些问题。每一层的目的,可以参考下图中的描述。针对软件测试人员来说,我们在工作或面试中,常会接触到的就是传输层(TCP、UDP)和应用层(HTTP、HTTPS等)。

1.2 TCP/IP四层概念模型
TCP/IP四层概念模型是目前较为常用的一种网络模型,相较于OSI七层网络模型,只是对比OSI将七层减少为四层。

1.3 网络传输过程
数据在网络传输的过程中,本质是一个封装和解封装的过程。例如:用户使用浏览器向百度服务器发送请求过程中,就是用户的数据从应用层一路封装到物理层,服务器得到物理层的比特流后,一路解封装得到对应数据。同理,服务器响应给用户的数据,也是服务器先一路封装,然后用户再一路解封。

二、TCP、UPD协议详解

在网络层的中,使用ARP、IP、路由协议,实现了数据的转发,从而实现两个机器之间数据包的传输。但是当数据包特别大的时候,通过网络层的协议,没有办法保证数据的完整性。此时,就需要传输层的协议实现数据包的完整传输。
在传输层中,定义了TCP和UDP这两个协议,并且定义端口的概念,用来寻找应用程序,从而实现端到端的数据传输。

2.1 TCP协议概述
TCP协议:传输控制协议,就是对数据的传输进行一定的控制。关于TCP数据报文格式如图所示,关于TCP头部信息详细数据可以参考链接:(传输层)TCP协议。针对测试而言,我此处只标注出需要注意的地方。

  • TCP报文=TCP头部+TCP数据部分。同样,IP数据包也包含tcp数据包或udp数据包。其中,我们经常需要关注的是TCP头部。
  • 源端口和目的端口:各占 2 字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现。
  • 序号:占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。
  • 确认号:占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。
  • ACK:仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1;
  • RST:当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
  • SYN:同步 SYN = 1 表示这是一个连接请求或连接接受报文
  • FIN:用来释放一个连接.FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
    2.2 TCP三次握手
    TCP三次握手:即为TCP连接的建立。如果将TCP三次握手类比为打电话,可以如图所示。

关于TCP三次握手,客户端及服务器处于的状态、三次握手中发送的序号等相关信息可以如图所示。

  • 第一次握手:建立连接时,客户端发送SYN包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;
  • 第二次握手:服务器收到SYN包,为了确认客户的SYN包,所以发送一个确认包ACK(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

2.3 TCP四次挥手
TCP四次握手:即为TCP连接的释放。如果将TCP四次挥手类比为学生和老师之间的对话,如图所示。

关于TCP四次挥手,客户端及服务器处于的状态、四次挥手中发送的序号等相关信息可以如图所示。

  • 第一次挥手:客户端发送一个FIN(seq=u)包,代表连接释放,并停止发送数据,客户端进入FIN-WAIT-1(终止等待1)状态。
  • 第二次挥手:服务器收到客户端发送的释放连接报文,发出确认报文ACK包(ack=u+1),并且带上序列号seq=v,服务端进入CLOSE-WAIT(关闭等待)状态。客户端收到确认请求后,进入FIN-WAIT-2(终止等待2)状态。
  • 第三次挥手:服务器将最后的数据发送完后,向客户端发送释放连接报文FIN包(seq=w)。且由于服务器处于半关闭状态,服务器会像第二次挥手过程中一样,发送ACK包(ack=u+1)。服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手:客户端收到服务器的连接释放报文后,发出确认报文ACK包(ack=w+1),且带上序列号seq=u+1,发送完后,客户端进入TIME-WAIT(时间等待)状态,。而服务器收到客户端发出的确认,立即进入CLOSED状态。

2.4 UDP协议概述
UDP(User Datagram Protocol):用户数据报协议。是一种无连接的传输层协议,不会创建连接,所以是一种不可靠的协议。它的优点为速度快,缺点为会丢包、会出错。关于UDP数据报文的格式,可以参考博客:UDP协议的详细解析
由于UDP协议的特点,所以UPD协议的使用场景如下:

  • 不需要可靠机制,只需要速度快。
  • 流媒体、多媒体游戏、IP电话
  • 资源消耗小
    2.5 TCP协议与UDP协议对比
    根据是否连接、传输可靠性、应用场景、速度这几个特点,TCP协议和UDP协议有以下几点不同。

常见的应用层协议中,基于TCP协议的有:HTTP、HTTPS、FTP。基于UDP协议的有:DNS(域名解析协议)等。

三、HTTP、HTTPS协议详解

3.1 HTTP协议概述
HTTP协议:超文本传输协议,是基于TCP的协议,默认为80端口。它的作用是用来规定客户端和服务器的数据传输格式。是一种用于请求与响应模式的、无状态、无连接 的应用层协议。 由于HTTP协议是一种请求-响应模式,所以一般需要关注HTTP请求和HTTP响应。

3.2 HTTP协议之请求报文
HTTP请求的报文分为四部分:请求行、请求头、空一行、请求体,其中前三个是所有HTTP请求都有的部分,请求体不是所有的HTTP请求都有(例如GET请求没有请求体)。下图为一个HTTP请求的报文信息:

请求行:请求行由 请求方法、统一资源定位符(URL)、HTTP协议及版本。

  • 请求方法:HTTP请求中,有八种请求方式,分别为GET、POST 、HEAD、OPTIONS、PUT、DELETE、TRACE 、CONNECT 。其中最后常用的就是GET、POST请求方法。

  • 统一资源定位符(URL):统一资源定位符用于描述网上的资源,格式如下:协议://host[:port#]/path/…/[?query-string]。

  • HTTP协议及版本:通常为HTTP/1.1。


请求头:包含若干个属性,格式为“属性名:属性值”,服务端根据此获取客户端的信息。下图为常见的请求头及作用,还可以自定义请求头。

空一行:发送回车符和换行符,通知服务器以下不再有请求头。
请求体:即为请求参数,通常为以键值对的形式数据。一般在POST请求中才有请求体。

3.3 HTTP协议之响应报文
HTTP响应的报文分为四部分:状态行、响应头、空一行、响应体,其中前三个是所有HTTP响应都有的部分,响应体不是所有的HTTP响应都有。下图为一个HTTP响应的报文信息:

状态行:状态行由 协议及版本、状态码、状态码解释。

  • 协议及版本:通常为HTTP/1.1。

  • 状态码:常用状态码根据数字大小可以分为以下几大类。常用的响应状态码为:200:请求成功、302:重定向、403:服务器拒绝请求、404:服务器找不到请求的网页、503:服务不可用。


响应头:响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。

3.4 HTTP协议 无状态、无连接特点及解决方案

在最前面介绍HTTP协议的时候,说到HTTP协议是一个无状态、无连接的协议。那么何为无状态、无连接,以及该特点的优势及所带来的问题。

无状态:

  • 含义:(1)对事务处理没有记忆能力,服务器不知道客户端是什么状态,给服务器发送HTTP请求之后,服务器回应之后,不会有任何记录;(2)每个请求都是独立的;

  • 优点:释放服务器压力。

  • 缺点:服务器处理后续请求,需要重传。例如登录系统后,如果不记录登录的相关信息,后续进行添加购物车操作的时候,需要登录的相关信息。

  • 解决方案:(1)Cookie:将前面的请求信息保存在一个临时位置。cookies值存在浏览器里,关闭浏览器后被删除,也可以手动去删除。(2)Session:可以理解为永久的cookie值,保存在服务器上,并传递给客户端,并保存在内存中。问题:资源占用,session超时时间,清除session ID。
    无连接:

  • 含义:(1)限制每次连接只处理一个请求;(2)服务器处理客户端的请求、并接受客户端的应答后,即断开连接;

  • 初衷:用户量(十万、上百万)页面请求、单个用户间歇性大(很长时间上没有交互),有突发性、瞬时性。数据没有关联,导致资源浪费,从而服务器压力很大。

  • 设计:从而设计为处理完请求后,释放连接。

  • 问题:网页越来越复杂了,页面中有很多图片,如果每次都要建立一次TCP连接,效率就会很低。

  • 解决方案:connection响应头字段值 Keep-Alive 表示保持tcp连接不关闭,不会永久保持连接,服务器可设置
    3.5 HTTPS协议详解

HTTP协议存在的问题:发送的数据都是明文的,存在第三方窃听,截取数据包、伪装客户端的情况,存在安全隐患。

HTTPS协议:超文本传输安全协议,是以网络安全为目标的HTTP通道,简单来讲就是HTTP的安全版。它加密数据并确保其机密性,可保护用户在网站交互时免于窃取个人信息及计费数据。可以理解为:(1)HTTPS=HTTP+SSL(2)HTTPS=HTTP+加密+身份认证+完整性。其中加密:密钥;身份认证: 证书(申请)双向认证; 完整性保护:哈希算法 计算一个hash值,验证消息的完整性 摘要=摘要 保证数据没有被篡改 ;

  • HTTPS=HTTP+SSL

  • HTTPS之SSL连接详解

3.6 HTTP协议与HTTPS协议对比

面试题精选

  1. 负载测试和压力测试区别?
  2. 1000个用户的并发测试怎么测?
  3. 一个杯子从哪方面测?
  4. jenkins怎么用的?
  5. 第一个项目哪些方面做了自动化?
  6. 哪些方面可以做性能测试?
  7. 搭建性能环境从哪几个方面考虑?
  8. 手机app测试和web测试的区别?
  9. get请求和post请求的区别(安全性,表单)?
  10. 怎么设计测试用例(正常和异常)?
  11. 怎么测需求文档?XXX
  12. 答案:静态测试,需求文档功能,界面;
  13. 怎么用自动化测试,原理?
  14. web服务器的区别?
  15. 怎么定位,遇到定位不到的情况,js定位?
  16. 自动化中的三个库,关键字有哪些?
  17. 传输层有哪些协议,端口号?XXX
  18. tcp/ip的区别?
  19. QQ登陆用的是什么协议、发消息?
  20. 测试计划最重要的是什么?
  21. 作为web测试 从哪几个方面做测试,从哪些方面制定测试范围?
  22. 怎么看待测试这个行业;
  23. 你遇到过最有意义BUG是什么? 让你印象深刻 为什么?
  24. 你认为测试计划最理想的一个流程?
  25. 有没有做过性能测试?
  26. 1000个人做并发怎么开展?
  27. 性能测试环境怎么搭建,有5台服务器 怎么去分配?
  28. 怎么去获取性能需求的? XXX
  29. 什么样子的项目适合用自动化?
  30. 测试的准入和准出是什么?XXX
  31. 如何维护自动化测试用例?
  32. 测一款手机app除了测他的最基本的功能还需要考虑什么特性?XXX
  33. 答案:电话来了 短信来了 闹钟响了异常退出
  34. 性能测试关注哪些指标?XXX
  35. 答案:CPU,内存,代码 软件 硬件 数据查询语句太复杂 硬件需要加服务器这些;
  36. 数据库怎么测试?XXX
  37. oracle和MySQL的区别?XXX
  38. 数据库为什么要建视图呢?XXX
  39. 能独立搭建自动化测试环境 能不能具体说一下?XXX
  40. 写测试用例有哪些方法 各举例说明一下?哪个项目用的正交表,等价类,边界值?XXX
  41. 什么时候使用自动化进行测试?XXX
  42. 自动化测试的原理是什么?XXX
  43. 你在工作当中做过最高的职位是什么?
  44. 作为测试小组的组长 你平时的工作有哪些?
  45. 自动化你有用过哪些框架RF具体说一下,整体的说一下?
  46. 给你一个桌子怎么测?
  47. B/C 系统从哪些方面进行测试; 怎么进行设计?
  48. 怎么查看数据库的日志?
  49. 给你5台服务器 怎么进行性能测试配置?XXX
  50. 我们做的是支付的项目 你应该从哪些方面入手 关注点是什么?需要保证最基本的功能?XXX
  51. 你用过因果图没有?你解释一下因果图吧?XXX
  52. 搭建性能环境会吗?XXX
  53. 你用过数据库吗?有个外键怎么用你知道吗?有什么好处?XXX
  54. 一个用户没有root权限 想给他root权限 怎么操作? XXX
  55. 在linux下 一个用户没有root权限 想给他root权限 怎么操作?XXX
  56. 连接数据库 连接不上 怎么去定位分析 从哪里入手? XXX
  57. 在什么情况下使用视图?XXX
  58. 你对数据库了解有多少? 索引有几种 唯一索引是什么?XXX
  59. delete 和drop 有什么区别?XXX
  60. linux 下打个gz包怎么打?XXX
  61. 写10个命令 每个命令挑着问你怎么用?XXX
  62. SCP和sftp 有什么区别?XXX
  63. 你口述一下你心里最理想的测试流程?XXX
  64. 做完项目有没有什么感想?XXX
  65. char 和varchar有什么区别?XXX
  66. 用例评审分几轮评审?XXX
  67. 你觉得你在团队中最突出的是什么? 可以具体举例吗?XXX
  68. 你觉得你在团队中的一些缺点有什么? 可以具体举例吗?XXX
  69. 性能测试里面负载测试和压力测试的区别?
  70. 数据库怎么去做自动化?XXX
  71. 为什么要创建视图?XXX
  72. 说一下H模型和V模型的区别? XXX
  73. 四年的测试经验有没有觉得最有意义的BUG;印象最深刻?XXX
  74. 四年的测试 说一下对软件测试行业的看法?XXX
  75. 你为什么选择测试这个行业?XXX
  76. 抓包工具 抓不到要获取的内容你是怎么解决的?XXX
  77. 性能为什么要参数化 参数化有什么好处?XXX
  78. 我们这边需要搭建环境 你会吗? 你说你只会录制一些脚本? 如果真的要搭建环境你会从哪些方面去考虑??XXX
  79. 怎么搭建httpd环境?
  80. 你在工作中最擅长哪个部分啊?XXX
  81. 在测试当中你觉得自己最突出的技能是哪些? XXX
  82. 查询所有的进程信息? XXX
  83. 你做了4年的测试 你做了几个项目 叫什么名字?
  84. 都是做功能的测试吗? 这是你自己做的项目吗? 你确定吗?
  85. 那这4年你哪一块做的比较多? 你比较强项的地方是什么?XXX
  86. 数据库中group by,order by是干嘛的?XXX
  87. 用过视图吗?在数据库里面 如果我这张表我要对AB字段创建视图怎么创建 XXX
  88. chmod chgrp chown 更改权限的三剑客?XXX
  89. grep(文本过滤器),sed(流编辑器),awk(文本格式化工具)? XXX
  90. 我一张中国银行卡去建设银行ATM机去取钱 应该怎么设计测试用例?XXX
  91. 自动化常用的关键词,数据库常用的关键字有哪些?XXX
  92. 你们项目什么时候用自动化呢? XXX
  93. 你用的最多的linux基本命令?mkdir cd touch pwd 等等XXX
  94. 性能中有俩个场景 这俩个场景有什么区别? 那你只是录制脚本是吧?那你做过脚本增强咯? 为什么插入集合点XXX
  95. 你做过的性能测试遇到过哪些性能瓶颈??XXX
  96. 集合点能不能在结束的地方插入?集合点必须在事务前面插入 XXX
  97. 遇到性能瓶颈怎么进行调优?你会从哪几个方面入手?CPU 内存 代码 数据库等方面入手 XXX
  98. 系统测试的重点是什么??XXX
  99. 你怎么什么情况下 使用抓包工具? 举个例子说明一下咯?XXX
  100. fiddler 你是怎么进行调试的啊?XXX

靠这100道软件测试大厂面试题,成功拿下字节跳动,阿里,腾讯,华为等12家Offer!相关推荐

  1. 字节跳动10年经验,10W字228道软件测试经典面试题总结(附答案)

    前言 最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里.腾讯.字节跳动.京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题,最近总结了软件测试常用的面试题,分享给大家,希望大家 ...

  2. 3w字 长文干货!100 道 Linux 常见面试题

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 本文一共 3W + 字,分别从 Linux概述.磁盘.目录.文件.安全.语法级.实战.文件管理 ...

  3. 美团136道软件测试经典面试题及答案汇总

    美团136道软件测试经典面试题及答案汇总 以下是软件测试相关的面试题及答案,欢迎大家参考! 1.问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺 ...

  4. 100道MySQL数据库面试题解析

    1. MySQL索引使用有哪些注意事项呢? 可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则 索引哪些情况会失效 查询条件包含or,可能导致索引失效如何字段类型是字符串,w ...

  5. 100 道常见 Hadoop 面试题及答案解析

    100 道常见 Hadoop 面试题及答案解析 目录 1 单选题 ................................................................... ...

  6. 搬砖:100道c语言面试题

    100道c语言面试题 2018年01月12日 18:52:35 cocos+unity+服务器 阅读数:9166 https://blog.csdn.net/themagickeyjianan/art ...

  7. 软件测试如何进入月薪过两万的大厂(字节跳动、腾讯、阿里......)总结了一些面试经验【建议收藏】

    小编热衷于收集整理资源,记录踩坑到爬坑的过程.希望能把自己所学,实际工作中使用的技术.学习方法.心得及踩过的一些坑,记录下来.也希望想做软件测试的你一样,通过我的分享可以少走一些弯路,可以形成一套自己 ...

  8. 2020最新各大厂面试遇到的100道软件测试面试题+答案纯干货!! 金九银十到了 快点看!!!

    [纯干货!!!]花费了整整3天,整理出来的全网最实用软件测试面试大全,一共100道题目+答案的纯干货,希望大家多多支持,建议 点赞!!收藏!!长文警告,全文共12000+字,涵盖软件测试面试可能遇到的 ...

  9. 前端 100 问,大厂面试题精华解析

    引言 半年时间,几千人参与,精选大厂前端面试高频 100 题,这就是「壹题」. 在 2019 年 1 月 21 日这天,「壹题」项目正式开始,在这之后每个工作日都会出一道高频面试题,主要涵盖阿里.腾讯 ...

最新文章

  1. nsdata是java什么类型_Swift中基本数据类型与NSData转换
  2. python list除以_扫描器篇(三)之python编写基于字典的网站目录探测脚本
  3. Visual SVN 非常好的转贴
  4. POS DES MAC 算法
  5. visual c++ build tools的安装与使用
  6. java开发岗位招聘,吊打面试官
  7. 漫步数理统计四——概率集合函数(下)
  8. 基本功:SQL 多表联合查询的几种方式
  9. 《流畅的Python》读书笔记——Python一等函数
  10. 对xhtml、dhtml、shtml的解释说明
  11. 【CarMaker学习笔记】T型路口多车运行实验
  12. C盘清理和简单的批处理操作
  13. 僵尸网络 Botnet
  14. android中简单视频播放器demo(附githup下载源码)
  15. 面试前端实习生 经验(1)
  16. android 输入法下一步,Android Edittext 软键盘输入法回车键改成下一步Next
  17. Boot重抽样获取logistic回归内部验证AUC可信区间
  18. 为什么人工智能工程师被戏称为“调参侠”?
  19. idea 修改项目名称的方法
  20. java实现打印金字塔

热门文章

  1. 数据库左连接、右连接、内连接、全连接区别
  2. 《Urban stranger》——都市异乡人{英汉互译}【都市时代,异乡异客的我们】
  3. 在逆境中成长,人生的财富
  4. 外贸人如何利用领英LinkedIn开拓海外市场?这七大妙招你要知道
  5. pd怎么卸载linux系统,PD虚拟机怎么完全卸载 PD虚拟机完全卸载方法
  6. 制作命令行界面(CLI)带来乐趣和收益
  7. 抖音“心动”外卖,美团社交“未艾”
  8. (初阶)用Java实现银行管理系统查询,存款,取款功能
  9. [object Object] is not a PostCSS plugin
  10. set 有序吗js_JavaScript Set没你想的那么简单!