有好多同学面试被问到 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的语法对其进行格式化,并在浏览器窗口中显示。
我是小巴哥,一个陪你成长,实实在在分享 测试干货职场经验的人,欢迎关注!!!