- 论坛徽章:
- 0
|
*******网络编程基础( 讨论版V1 )*******
4、TCP的三路握手和四分组连接终止序列的过程分别是什么
三路握手:
下述步骤建立一个tcp连结:
1)服务器必须准备好接受外来的连接。这通过调用socket,bind,listen函数来完成,成为被动打开(passive open).
2)客户通过调用connect进行主动打开(active open).这引起客户tcp发送一个SYN分节(表示同步),它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。一般情况下syn分节不携带数据,它只含有一个ip头部、一个tcp 头部以及可能有的tcp选项。
3)服务器必须确认客户的syn,同时自己也得发送一个syn分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器以单个分节向客户发送syn和对客户syn的ack.
4)客户必须确认服务器的syn.
l连接建立过程至少需要交换三个分组,因此称之为tcp的三路握手(three-way hand shake).
TCP连接终止:
1)某个应用进程首先调用close,我们称这一端主动关闭(active close).这一端的tcp于是发送一个FIN分节,表示数据发送完毕。
2)接收到FIN的另一端执行被动关闭(PASSIVE CLOSE).这个FIN由TCP确定。它的接收也作为文件结束符传递给接收方应用进程(放在已经排队等候该应用进程接收的任何其他数据之后),因为FIN的接收意味着应用进程在相应连接上再也接受不到额外数据。
3)一段时间后,接收到文件结束符的应用进程将调用CLOSE关闭它的套接口。这导致它的TCP也发送一个 FIN
4)接收到这个FIN的原发送方TCP(即执行主动关闭的那一端)对它进行确认。
因为每个方向都需要有一个FIN和一个ACK,所以一般需要四个分节。
大家可以监视一个FTP连接来察看,WIN2K下用网络监视器,LINUX和UNIX下可以用TCPDUMP等。 |
|