测试工程师社招-计网面试题
(ps:社招对计网的面试题较少,无非是三次握手四次挥手,HTTP状态码等,如果是网安方向建议去专门学习底层原理和测试方法)
打开一个网址url中间发生了什么
dns解析(递归、重复);tcp连接三次握手;发送http请求;服务器处理请求;浏览器解析并渲染页面;连接结束
常见http状态码
200成功
404 找不到页面
500 内部服务器错误
http和https区别
http协议运行在tcp上,明文传输;https以ssl为安全基础,提供数据加密和身份认证,更安全
https比http耗费更多的资源,相应速度也慢
https和http完全不同的连接方式,https端口号443 http端口号80
https通常不免费
四次挥手等2mls的原因
服务器端最后一次发送FIN关闭请求之后,客户端向服务端发送确认请求报文需要1msl的时间,如果服务器端没有收到确认请求的话它会再次发送一个FIN请求,也需要1msl的时间,因此如果2msl之后没有收到服务器端发送的关闭请求,即为已经关闭。
为什么三次握手、四次挥手?
三次握手:第一次握手,如果服务端接收到了客户端发送的请求,那就说明客户端发送能力没问题;第二次握手,如果客户端接受到了服务端的确认和请求,那就说明服务端的接收能力没问题以及发送能力没问题但是两次握手它没有保证客户端的接收能力没问题,所以第三次握手,如果服务端接收到了客户端的请求,那才能就说明客户端接收能力没问题。
四次挥手:客户端发送了关闭请求表名客户端不再发送数据了,但是服务端可能还有数据要发送,发送数据之后在关闭请求
补充:
握手的目的是为了序列号seq一致,而下面两个握手要么做不到序列一致,要么多此一举
两次握手:客户端发送请求,服务端收到请求并返回一个请求和确认,只有客户端知道序列号,服务端不知道,不可能达成序列号一致,不能保证通信的可靠性
四次挥手:客户端发送请求,服务端收到请求并记录到本地命名为服务端的seq,服务端发送请求和确认请求给客户端,客户端收到后再发送一个确认请求给服务端。由此可知,第二步和第三步其实可以合并起来。
总结:tcp传输是双向的,每个方向的通道建立都需要一次SYN和ACK,即四次握手,但是中间两次是可以合并的并且合并后延迟更低,所以使用三次挥手。而两次握手只能建立一个单方向的通道。
补充:
三次握手
第一次握手:客户端发送一个SYN数据包到服务器,并等待服务器确认;第二次握手:服务器收到后向客户端发送一个确认包SYN+ACK;第三次握手:客户端收到后,向服务器发送确认包ACK
四次挥手
第一次挥手:客户端发送一个FIN包申请断开连接,等待服务器确认 第二次挥手:服务器发送一个ACK包,表示接受到关闭请求,此时服务器会检查是否还有会处理完的数据 第三次挥手:服务器有未处理完的数据会继续处理,处理完毕后会向客户端发送一个FIN包,表示可以断开连接 第四次挥手:客户端收到服务器的FIN包,回复一个ACK包表示断开连接
cookie、session、token区别
用户第一次登陆,服务器会创建一个session生成一个sessionid,sessionid保存在cookie中返回到客户端保存在浏览器中,客户端每次发送请求都会把这个值带到服务器,做一个鉴权和会话的跟踪或时效;Token:每次登陆会产生一长串随机字符串,一般放在body里面,都是服务器产生的
Get和post区别
1、请求数据:get url通过?分割参数 通过&连接 不安全;post 请求体(多种不同的数据类型)
2、get用来获取 读;post用来修改 读写;
3、最大:get 2k 只接受ascii;post理论无限制
4、get,一个tcp数据包(header data)--200;post,两个tcp数据包 先header 100(continue) data 200(ok)
5、get 主动缓存;post 手动