计算机网络常见面试题整理

1、TCP三次握手、四次分手。

TCP三次握手:

    假设主机A为客户端,主机B为服务器端。

  • 三次握手的过程:主机A向主机B发送连接请求,主机B对收到的主机A的报文段进行确认,主机A再次对主机B的确认进行确认。
  • 目的:为了防止已经失效的连接请求报文段突然又传到服务器端,因而产生错误。《计算机网络》例子:A向B发送的连接请求SYN报文段滞留在网络中的某处。于是A超时重传,与B建立了TCP连接,交换了数据,最后也释放了TCP连接。但滞留在网络中某处的陈旧的SYN报文段,现在突然传送到B了。如果不使用三次握手,那么B就以为A现在再次建立TCP连接,于是就分配资源,等待A传送数据。但A并没有想要建立TCP连接,也不会向B传送数据,B就白白等待A发送数据。浪费了资源。

TCP四次握手:

  • 四次握手过程:主机A向主机B发送关闭请求,主机B对收到的主机A的报文段进行确认,主机B向主机A发送关闭请求,主机A对收到的主机B的报文段进行确认。

为什么建立连接是三次握手,而关闭连接却是四次挥手?

  • 这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。

2、TCP/IP的流量控制?

使用滑动窗口实现流量控制,如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。是一种端到端的控制。

主要方式:返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

1) 1比特滑动窗口协议

当发送窗口和接收和接收窗口固定为1时,滑动窗口协议退化为停等协议。该协议规定发送方每发送一帧后就要停下来,等待接收方已正确接收的确认返回后 才能继续发送下一帧。

2)后退n协议

发送方在发完一个数据帧后,不停下来等待应答帧,而是连续发送若干个数据帧,即使在连续发送过程中受到了接收方发来的应答帧,也可以继续发送。且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍收到确认帧,就要重发相应的数据帧以及之后的所有帧。

接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧。这显然是一种浪费。

3)选择重传协议

在后退n帧协议基础上改进,当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给高层,但接收方仍可接收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以将缓冲区中其余帧一并按正确的顺序递交高层。

选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。

3、TCP拥塞控制?

防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不止于过载。

主要方式:1)慢开始、拥塞避免  2)快重传、快恢复

发送方维持一个叫做拥塞窗口的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接收方的接收能力,发送窗口可能小于拥塞窗口。

慢开始算法就是:先探测一下,由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段MSS数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。(指数增长)

拥塞避免算法就是:每经过一个往返时间RTT就把发送方的拥塞窗口+1,即让拥塞窗口缓慢地增大,按照线性规律增长。当出现网络拥塞,比如丢包时,将慢开始门限设为原先的一半,然后将cwnd设为1,执行慢开始算法。

拥塞窗口cwnd和慢开始门限ssthresh状态变量的关系如下:

  • 当cwnd<ssthresh时,使用上述的慢开始算法。
  • 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
  • 当cwnd=ssthresh时,即可使用慢开始算法,也可使用拥塞控制避免算法。

快重传的机制是:接收方如果发现一个包丢失,则对后续的包继续发送针对该包的重传请求;一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包;此时发送方开始执行“快恢复”算法:a.慢开始门限减半;b.cwnd设为慢开始门限减半后的数值;c.执行拥塞避免算法(线性增长)

当rwnd<cwnd时,是接收方的接收能力限制发送方窗口的最大值。

当cwnd<rwnd时,则是网络的拥塞限制发送方窗口的最大值。

拥塞控制并非可以避免拥塞,而是将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

4、TCP和UDP

  • TCP面向连接,UDP是无连接
  • TCP提供可靠的服务,UDP尽最大努力交付,即不保证可靠交付
  • TCP面向字节流,UDP是面向报文的
  • TCP连接是点到点的,UDP支持一对一、一对多、多对一和多对多的交互通信
  • TCP首部开销20字节,UDP的首部开销小,只有8个字节
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

猜你喜欢

转载自blog.csdn.net/qq_38297106/article/details/82946807