赞
踩
在我之前的一篇博文中就有详细的提到过TCP的编程流程TCP详解及编程流程。在那篇博文中我们就详细提到了connect()、listen()和accept()这三个函数的使用。并且我们了解到了,连接的建立是在listen()之后accept之前
。
那么,具体的他们这三个函数内部的关系是怎样的呢?
1、connect()函数分析
【功能】
客户端主动连接服务器,建立连接是通过三次握手。
【注意】
2、listen函数分析
【功能】
将该套接字和套接字对应的连接队列长度告诉linux内核。因此,可以看出,只要TCP服务器调用了listen(),客户端就可以通过connect()和服务器建立连接,而这个连接的过程是内核完成的
【注意】
3、accept()函数分析
【功能】
从连接队列头部取出一个已经完成的连接,如果这个队列没有已经完成的连接,accept()函数就会阻塞,直到取出队列中已完成的用户连接为止。
在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。因为TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户,而而被动等待连接建立的应用进程叫做服务器。
用三次握手建立TCP连接的流程图如下:
第一次握手:
客户端执行connect函数,向服务器发送连接请求报文段,这时TCP报文首部的同步位SYN=1.这时==客户端进入SYN_SENT(同步已发送)==状态,等待服务器的确认
第二次握手:
服务器收到请求报文段后,如果同意建立连接,则向A发送确认,在确认报文段中SYN=1,ACK=1。这时服务器就进入了SYN_RCVD(同步收到)状态客户端进入ESTABLISHED状态
第三次握手:
客户端在收到服务器的确认过后,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。