tcp三次握手的过程,accept发生在三次握手哪个阶段?还有UDP协议通讯时怎样得知目标机是不是获得了数据包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcp三次握手的过程,accept发生在三次握手哪个阶段?还有UDP协议通讯时怎样得知目标机是不是获得了数据包相关的知识,希望对你有一定的参考价值。

如题,tcp三次握手的过程,accept发生在三次握手哪个阶段?还有UDP协议通讯时怎样得知目标机是否获得了数据包?跪求高手解答。。。。

腾讯笔试题:tcp三次握手的过程,accept发生在三次握手哪个阶段?accept发生在三次握手之后。第一次握手:客户端发送syn包(syn=j)到服务器。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接 http://blog.163.com/zyf_win/blog/static/12206289220109205015343/ 参考技术A 三次握手与accept的接受无必然联系 在listen 监听之后有可能马上就有客户端程序请求连接,那么内核自动完成TCP 三次握手 然后就等待accept 接受; 也有可能是在服务器accept 阻塞的时候客服端发送连接请求,这时还是内核完成TCP三次握手,然后accept 接受。。。

在三次握手和四次挥手协议中,客户端和服务器端各用到什么函数?

三次握手与accept()函数的关系?

  1、客户端发送SYN给服务器。

  2、服务器发送SYN+ACK给客户端。

  3、客户端发送ACK给服务器。

  4、连接建立,调用accept()函数获取连接。

在三次握手和四次挥手协议中,客户端和服务器端各用到什么函数?(这里涉及到底层的socket知识)

Socket server 和client通信流程图:

        

Socket 三次握手连接图:

       

  从图中可以看出,当客户端调用connect()函数时,触发了连接请求,向服务器发送了SYN J 包,这时connect进入阻塞状态(先调用connect()函数,然后发送SYN包);服务器监听到连接请求,即收到SYN J包,调用accept()函数接收请求(先收到SYN包,然后调用accept()函数),向客户端发送SYN K,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

  总结:客户端的connect()函数在三次握手的第二次之后返回,而服务器端的accept()在三次握手的第三次后返回。

Socket 四次挥手断开连接图:

       

  注意,read()返回0就表明收到了FIN段。

函数:

socket() --创建套接字,它会创建一个结构体及收发缓冲区。此时并不指定该套接字在哪个IP和PORT口上。

bind() --用于将套接字绑定在特定的IP和PORT上。

listen(SOCKET s,int backlog) --用于为侦听端口创建两个队列,用于接收用户端的SYN请求,侦听客户端的socket连接请求。backlog指的就是已经完成握手了的队列的大小。

accept() -- 将侦听端口中的ESTABLISHED队列中取出那些连接。accept函数返回的是已建立连接的套接字描述符,包括客户端的IP和PORT信息,服务器的IP和PORT信息。

connect() -- 客户端连接请求。

read() -- 负责从fd中读取内容。当读成功时,read返回实际所读的字节数,如果返回的值是0表示已经读到文件的结束了,小于0表示出现了错误。

write() -- 将buf中的nbytes字节内容写入文件描述符fd。成功时返回写的字节数。

listen的真正目的?

  listen的函数为侦听端口创建两个队列:未完成队列(SYN_RCV状态)和已完成队列。如果不调用listen,则客户端过来的SYN请求无法入队接受进一步的处理。因此,listen是服务器的必须过程。

如果客户端发起握手请求,服务端无法立刻建立连接应该回应什么?

  RST报文,表示重置,重新建立连接。

以上是关于tcp三次握手的过程,accept发生在三次握手哪个阶段?还有UDP协议通讯时怎样得知目标机是不是获得了数据包的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络——TCP三次握手和四次挥手详解

在三次握手和四次挥手协议中,客户端和服务器端各用到什么函数?

TCP三次握手在服务器端是由哪个函数完成的?

Python中的TCP三次握手和四次挥手过程

TCP的三次握手和四次挥手精简易懂版

TCP 连接的握手延迟