当前位置: 技术问答>linux和unix
腾讯面试题:tcp三次握手的过程,accept发生在三次握手哪个阶段? .
来源: 互联网 发布时间:2017-05-26
本文导语: 先说一下自己的观点 不知是否正确 高手指正我觉得腾讯 这个题目 似乎 有点问题啊 accept 好像可以发生在3次握手之前 也可以发生在3次握手之后。。。。。 不信 可以试试 1.没有accept 3次握手照样...
先说一下自己的观点 不知是否正确 高手指正我觉得腾讯 这个题目 似乎 有点问题啊
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函数获得此连接。 ------------------------------------------------------------ 答案到底是神马。。。。。。。。。。。
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.
accept只是把内核中的“已完成连接队列(FIFO with established state)”取出,
另一个队列是“未完成连接队列( FIFO with syn_rcvd state)”,并且这两个队列总和的最大值是backlog.
|
这是真相,UNP,TCP/IP上都有详细的说明,ACCEPT是从已完成三路握手的队列内取走一个,与三路握手的哪一步都没关系。