日期:2014-05-16  浏览次数:20841 次

腾讯面试题:tcp三次握手的过程,accept发生在三次握手哪个阶段? .
先说一下自己的观点 不知是否正确 高手指正我觉得腾讯 这个题目 似乎 有点问题啊
accept 好像可以发生在3次握手之前 也可以发生在3次握手之后。。。。。 
  
不信 可以试试 
1.没有accept 3次握手照样成功。也就是说你可以等到3次握手成功以后,再调用accept 
  
2.你也可以先调用accept,后面再开始3次握手,但是,这种情况下,accept会阻塞直到3次握手成功为止。------------------------------------------------------------------------------- 网友评论:accept发生在三次握手之后。

第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。 ------------------------ 答案到底是神马。。。。。。。。。。。

------解决方案--------------------
tcp三次握手发生在connect step.

accept只是把内核中的“已完成连接队列(FIFO with established state)”取出, 
另一个队列是“未完成连接队列( FIFO with syn_rcvd state)”,并且这两个队列总和的最大值是backlog.

------解决方案--------------------
探讨

tcp三次握手发生在connect step.

accept只是把内核中的“已完成连接队列(FIFO with established state)”取出,
另一个队列是“未完成连接队列( FIFO with syn_rcvd state)”,并且这两个队列总和的最大值是backlog.