面试&笔试|tcp/ip、http等通信协议面试题集锦(持续更新)

面试&笔试|笔试面试系列|tcp/ip、http等面试题集锦(持续更新)

1、现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?
答:在Http1.0中,默认是短连接(连接一次,断开一次),Http1.1中默认是长连接(连接一次,长久连接,减少不断建立连接的成本,提高请求效率),Http报文中的请求头属性通过Connection: keep-alive/close,来确定一次请求后是否断开,close即表示连接一次后断开

2、一个 TCP 连接可以对应几个 HTTP 请求?
答:如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的

3、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?
答:在 HTTP/1.1 存在 Pipelining (注:RFC 2616(指Http1.1协议)中规定:一个支持持久连接的客户端可以在一个连接中发送多个请求(不需要等待任意请求的响应)。收到请求的服务器必须按照请求收到的顺序发送响应。)技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing(注:HTTP2 提供了 Multiplexing 多路传输特性,可以在一个 TCP 连接中同时完成多个 HTTP 请求) 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。虽然 HTTP/1.1 规范中规定了 Pipelining 来试图解决这个问题,但是PipeLineing实际中有很多问题,具体可见[链接](https://zhuanlan.zhihu.com/p/61423830)

4、为什么有的时候刷新页面不需要重新建立 SSL 连接?
答:参考问题1,TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的

5、浏览器对同一 Host 建立 TCP 连接到数量有没有限制?
答:有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

6、收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?
答:如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,但是可以确定的是 Multiplexing 很可能会被用到。

如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?那其他的请求就只能等等了

7、说说三次握手的过程?
答:(1)建立连接的过程中需要客户端发送SYN标志位为1、ACK标志位为0、seq序列号为x(这里x表示初始的序号)的字节流(报文段)到服务端
(2)服务端收到客户端的字节流(报文段),返回一个字节流(报文段),内容为SYN为1,ACK标志位为1,seq为y(这里y表示初始的序号),ack为x+1(这里ack表示tcp的确认序号)
(3)客户端收到服务端发送的字节流(报文段),会发送确认连接的报文段,内容为ACK=1,seq=x+1,ack=y+1
(4)在收到客户端确认连接的用户段后,连接建立

8、为什么会有三次握手的过程?若设计成两次握手会产生什么问题?
答:第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。 客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

9、说说TCP的四次挥手?
答:(1)由客户端主动发起关闭请求,请求带标志位FIN=1
(2)服务端收到关闭请求,发送应答标志标志位ACK=1
(3)服务端在发送应答标志位之后,会通知应用程序关闭,等应用程序关闭后,服务端再发送终止连接标志位FIN
(4)客户端收到终止标志位FIN=1,会等待2ms再关闭,防止还有数据未传输完毕,同时也会发送ACK=1的应答包给服务端
(5)服务端收到应答包后,彻底关闭连接

10、说说四次挥手的原因?
答:客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
(1)确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
(2)等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

11、简单的说说tcp报文的报文结构?ACK,SYN,FIN标志位为1时都表示什么意思?
答:

[tcp报文结构](https://cyc2018.github.io/CS-Notes/#/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%20-%20%E4%BC%A0%E8%BE%93%E5%B1%82)

12、 TCP 协议如何保证可靠传输?
答:(1)应用数据被分割成 TCP 认为最适合发送的数据块。
(2)TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层
(3)校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
(4)TCP 的接收端会丢弃重复的数据。
(5)流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
(6)拥塞控制: 当网络拥塞时,减少数据的发送。
(7)ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

13、 TCP 的滑动窗口是用来干嘛的?
答:是用来保证接受方与发送方,按顺序发送与接受过程的一种机制。由TCP报文段结构知每个报文段都有窗口这一项描述发送方缓冲区大小的部分,假如A分别按顺序发送123这三个报文段给B,但是由于网络抖动等原因,B应答的2报文段没有被A接受到,由ARP协议可知,需要超时重发,那么这个时候TCP窗口就规定超时重发123,而不是只发2,要按照报文段的顺序发送,通过这样的规定,保证接受方和发送方的报文段都是有顺序的,不会乱的。通过窗口这一机制也可以实现TCP流量控制,窗口的大小决定了收发方数据缓冲的大小,窗口演示具体可以查看动画链接,更加形象:

[动画演示](http://www.exa.unicen.edu.ar/catedras/comdat1/material/Filminas3_Practico3.swf)
  • 6
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值