网络模块相关面试题
Max_Lyu 人气:11、http 响应码 301 和 302 代表的是什么?有什么区别?
301:永久重定向;302:暂时重定向。
2、http 响应码 301 和 302 代表的是什么?有什么区别?
301:永久重定向;302:暂时重定向。
3、简述 tcp 和 udp的区别?
tcp 面向连接,udp 面向非连接即发送数据前不需要建立链接;
tcp 提供可靠的服务(数据传输),udp 无法保证;
tcp 面向字节流,udp 面向报文;
tcp 数据传输慢,udp 数据传输快
4、tcp三次握手和四次挥手?
(1)三次握手:
客户端发送带有 SYN=1, seq=x 的数据包给服务端;服务端接收并发送 SYN=1, ACK=1,seq=y,ack=x+1的数据包给客户端; 客户端接收并发送 ACK=1,seq=x+1,ack=y+1的数据包给服务端。
(2)四次挥手:
客户端发送带有 FIN=1,seq=x 的数据包给服务器;服务器接收并发送 ACK=1,seq=y,ack=x+1 的数据包给客户端;服务端发送 FIN=1,ACK=1,seq=u,ack=x+1 的数据包给客户端;客户端接收并发送 ACK=1,seq=x+1,ack=u+1 的数据包给服务端。
5、为什么tcp是三次握手?不可以两次?
如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
7、为什么建立连接是3次,断开连接4次?
这是由于 TCP 的半关闭造成的。因为 TCP 连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个FIN来向另一方通告将要终止这个 方向的连接。
8、在浏览器输入url并回车后发生了什么?
(1)浏览器解析url,将url解析成域名、端口、参数等;
(2)根据域名解析ip地址,依次从浏览器、系统、路由器缓存中查找该地址,没有的话则发送 udp 数据包给 DNS,在 DNS 缓存中查找,如果没有则递归查询(从跟域名服务器 到顶级域名服务器再到极限域名服务器依次搜索对应目标域名IP);
(3)浏览器和客户端通过握手建立连接;
(4)请求和传输数据;
(5)浏览器渲染页面。
9、get 和 post 请求有哪些区别?
get 请求会被浏览器主动缓存,而 post 不会。
get 传递参数有大小限制,而 post 没有。
post 参数传输更安全,get 的参数会明文限制在 url 上,post 不会。
10、TCP的粘包/拆包原因及其解决方法是什么?
TCP是基于字节流的,虽然应用层和TCP传输层之间的数据交互是大小不等的数据块,但是TCP把这些数据块仅仅看成一连串无结构的字节流,没有边界。另外从TCP的帧结构也可以看出,在TCP的首部没有表示数据长度的字段。常见的发生原因:
(1)要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
(2)待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
(3)要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
(4)接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有:
(1)发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
(2)发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
(3)可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
11、四次挥手释放连接时,等待2MSL的意义?
(1)为了保证A发送的只有一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。
(2)防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。
12、TCP如何保证可靠传输的?
(1)超时重传:超过时间无应答重传;
(2)滑动窗口:窗口用来缓存字节流,接收方和发送方都有,发送方发送的数据包中包含了窗口大小,使得两边窗口一致;
(3)流量控制;控制发送方的发送速度;
(4)拥塞控制:如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当 控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制 是为了降低整个网络的拥塞程度。
13、http 状态码
14、短连接、长连接、websocket
(1)短连接:HTTP 1.0,client 与 server 每发送一次http请求,都建立一次连接,任务断则关闭;
(2)长连接:HTTP 1.1,client 与 server 建立一次http连接,后续需要连接时则用此连接;
(3)WebSocket:HTTP升级,因为长短连接都是需要 client 通过 request ,server 才会 response;而 websocket 则只需一次http请求, server 就可以主动推送消息;比起轮询,减少了资源消耗。
15、websocket的连接过程?
先进性三次握手建立TCP连接;然后发送一次特殊的请求头包含 Connection:Upgrade Upgrade:websocket 的 HTTP 请求;建立连接,响应码为 101.
加载全部内容