三次握手
建立一个tcp连接:1.客户端通过调用connect函数进行主动打开(active open)。客户tcp发送一个SYN报文,告诉服务器端客户将在连接中发送的数据的初始化序列号,一般SYN报文不携带数据。(调用connect函数实现主动打开并阻塞connect等待握手确认)
2.服务器必须确认客户的SYN,同时服务器也得发送一个SYN报文,它含有服务器将在同一连接中发送的数据的初始化序列号,服务器以单个报文向客户发送SYN和对客户SYN的ACK;(Server端原本阻塞在listen函数,因为connect函数使listen函数返回,第一次握手成立,接着Server继续执行,阻塞在accept函数)3.客户必须发送确认服务器的SYN的ACK;(connect函数成功返回,表示客户端已确认3次握手成立(此时Server在没收到客户端确认之前还不知道),客户端发出信号使得服务器accept函数得以返回,此时3次握手成功)
四次分手
1.某个应用程序首先调用close函数,称为执行主动关闭(active close),这一端的tcp于是发送一个FIN报文,表示数据发送完毕;
2.接受到FIN的另一端执行被动关闭(passive close),这个FIN由tcp确认。它的应用程序作为文件结束符传递给接收方应用程序(放在已排到等候该应用进程接收的任何数据之后);
3.一段时间后,接收到文件结束符的应用进程将调用close函数关闭它的套接口,也发送一个FIN报文;
4.接收到这个FIN报文的原发送方tcp对它进行确认;
本文由Cout_Sev 搜集整理
转载注明出处
http://blog.csdn.net/cout_sev
谢谢!
原文地址:http://blog.csdn.net/cout_sev/article/details/39029941