TCP建立连接
1.请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1
2.服务器发会包含服务器初始序号SYN报文段(报文段2)作为应答。同时将确认设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号
3.客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段确认(报文段3)
这三个报文段完成连接的建立,这个过程称为三次握手
TCP连接终止
建立一个连接需要3次握手,而终止一个连接需要经过4次握手.这是由于TCP的半关闭造成的。既然是一个TCP连接是全双工(数据在两个方向上能同时传递),因此每个方向必须单独的进行关闭。这原则就是当一方完成他的数据发送任务就能发送一个FIN来终止这个方向的连接。当一端收到一个FIN,他必须通知应用层另一端终止了那个方向的数据传送。发送FIN通常是应用层进行关闭的结果。
收到一个FIN只是意味着在这一方向上没有数据流动。一个TCP链接收到一个FIN后仍能发送数据。而这对利用半关闭的应用来说是可能的,尽管在实际应用中只有很少的TCP应用程序这样做。
正常的关闭过程:
首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。通常一方主动关闭而另一方完成被动关闭。
图18-3中的报文段4发起终止连接,它由Te lnet客户端关闭连接时发出。这在我们键入quit命令后发生。它将导致TCP客户端发送一个FIN,用来关闭从客户到服务器的数据传送。
当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。同时TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个服务器程序就关闭它的连接,导致它的TCP端发送一个FIN(报文段6),客户必须发回一个确认,并将确认序号设置为收到序号加1(报文段7)。