为帮助自己了解connect,accept和close这三个函数,就必须了解TCP连接如何建立和终止,并掌握TCP的状态转换图!

三路握手

建立一个TCP连接时会发生下述情形。

(1)首先server需要做随时接受来自cli的连接,这就需要用到socket,bind和listen函数,做出一个被动打开的状态。

(2)此时cli会通过connect函数发起主动打开,cli会发送一个SYN,告诉服务器这是将在连接中发送的数据的初始序列号。

(3)server必须确认(ACK)客户的SYN,同时自己也需要发送一个SYN,它含有服务器在同一连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和对cli的SYN的ACK(确认)。

(4)客户必须确认服务器的SYN。

此过程中至少需要三个分节,所以被叫做三次握手。

TCP连接终止

TCP建立连接需要3个分节,终止一个连接则需要4个分节。

(1)应用进程先调用close,执行主动关闭,此端会发送一个FIN分节,便是数据发送完毕。

(2)接收到FIN的对端执行被动关闭,这个FIN放在已排队等候该应用进程接受的任何其他数据之后,FIN意味着不会再去接受任何额外数据。

(3)一段时间后,接受这个FIN的应用进程将调用close关闭他的套接字。

(4)最终执行主动关闭的那一端会确认被动关闭端的发送来的FIN。

 

 

 TCP状态转换图

 

posted on 2022-03-06 22:36  atoi  阅读(134)  评论(0)    收藏  举报