TCP Socket在Client和Server中是如何建立连接的
Server
-
先调用函数创建tcp socket,创建的是一个“主动”套接字对象
-
然后用这个套接字调用bind函数,传入ip和port参数,绑定ip和端口号
-
接着调用listen函数,监听在这个端口上,等待客户端的连接请求,这一步可以让socket收到客户端的SYN报文,但是收到后协议栈并不会自动回复SYN+ACK,自动回复需要调用accept函数
-
最后调用函数accept,如果有请求过来(SYN报文),就会让Server端的协议栈自动回复(ACK+SYN),自动完成三次握手
这里有一些需要特别注意和理解的内容:
调用listen函数会将Server端创建的“主动”socket转为“被动”socket,来不停地接收外来的客户端请求。所以listen函数传入的参数中有一个最大值的参数,表示server端允许接受的tcp连接请求的最大值
“被动”socket调用accept函数,能够让此套接字按照顺序提取监听到的来自客户端的连接请求,驱动协议栈自动完成三次握手连接,同时生