和TCP三次握手有关的面试题

在面试的过程中,TCP三次握手是一个出现频率比较多的话题。三次过程如下图所示:

           Client                             Server

              |------------SYN1----------->|

              |                                       |

              |<------SYN2+ACK1---------|

              |                                       |

              |--------- ACK2------------->|

 

下面列一些常见的几个问题。

1. Q:向一个不存在但合法的公网IP任意端口发送SYN包会出现什么情况?

    A:返回ICMP主机不可达。

 

2. Q:向一个存在的IP但未绑定的端口发送SYN包会出现什么情况?

    A:返回TCP RST segment。

 

3. Q: 第一个SYN包丢失了,客户主机(主动连接方)会采取什么动作?

    A:重传,重试几次后(一般是3次)失败后,连接失败。

 

4. Q: 为什么连接建立的过程作3次TCP segment交互,而不是4次?

    A:Server端的SYN&ACK在一个TCP segment传给了Client。

 

5. Q:什么情况下将会出现4次TCP segment交互?

    A: 连接的两端同时打开。

 

6. Q: 第二个SYN2(就是图示中的SYN2+ACK1)丢失了,将出现什么情况?

    A: Client收不到SYN2而不发送ACK2,Server端将超时重发。

 

7. Q: ACK2丢失了将会怎样?

    A: Server端认为Client没收到SYN2+ACK1,重发SYN2+ACK1;另外连接处于未完成的状态,如果出现大量的ACK2丢失,未完成的连接队列会出现“满”的状态,从而不能再接收SYN1。这就是DOS。

 

还有一些和Socket APIs结合起来的问题,比如connect内部做了什么?accept做了什么?accept执行速度慢了将会出现什么现象?等等。这个问题可以参考上一篇文章:

      http://blog.csdn.net/herm_lib/archive/2010/11/14/6008281.aspx

 

 

posted on 2010-11-18 21:07  daemonh  阅读(1204)  评论(0编辑  收藏  举报

导航