TCP连接的建立与终止

1.连接建立与终止的过程

2.过程解析 

(1)符号说明

我们看到了 S、F和句点“.”标志符。我们将在以后看到其他的两个标志(R和P)。TCP首部中的其他两个标志比特—ACK 和URG—tcpdump将作特殊显示。

字段1415531521:14155315221(0)表示分组的序号是1415531521,而报文段中数据字节数为 0。

字段ack 1415531522表示确认序号。它只有在首部中的 ACK标志比特被设置1时才显示。

每行显示的字段 win 4096表示发端通告的窗口大小。在这些例子中,我们没有交换任何数据,窗口大小就维持默认情况下的4096。

最后一个字段 <mss 1024>表示由发端指明的最大报文段长度选项。发端将不接收超过这个长度的 TCP报文段。这通常是为了避免分段

3.建立连接协议

为了建立一条 TCP连接:

(1)请求端(通常称为客户)发送一个 SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN,在这个例子中为141553 1521)。这个SYN段为报文段1。
(2)服务器发回包含服务器的初始序号的 SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。
(3)客户必须将确认序号设置为服务器的 ISN加1以对服务器的 SYN报文段进行确认(报文段3)。

这三个报文段完成连接的建立。这个过程也称为三次握手(three-way handshake)。

发送第一个SYN的一端将执行主动打开(active open)。接收这个SYN并发回下一个 SYN的另一端执行被动打开(passive open)。

当一端为建立连接而发送它的 SYN时,它为连接选择一个初始序号。 ISN随时间而变化,因此每个连接都将具有不同的 ISN。 RFC 793 [Postel 1981c]指出ISN可看作是一个3 2比特的计数器,每 4 ms加1。这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它作错误的解释。

4.连接终止协议

建立一个连接需要三次握手,而终止一个连接要经过 4次握手。这由 TCP的半关闭(half -close)造成的。既然一个 TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个 FIN来终止这个方向连接。当一端收到一个 FIN,它必须通知应用层另一端已经终止了那个方向的数据传送。发送FIN通常是应用层进行关闭的结果。

收到一个FIN只意味着在这一方向上没有数据流动。一个 TCP连接在收到一个 FIN后仍能发送数据。而这对利用半关闭的应用来说是可能的,尽管在实际应用中只有很少的 TCP应用程序这样做。

首先进行关闭的一方(即发送第一个 FIN)将执行主动关闭,而另一方(收到这个 FIN)执行被动关闭。通常一方完成主动关闭而另一方完成被动关闭,但也存在双方如何都执行主动关闭。

 当服务器收到这个 FIN,它发回一个ACK,确认序号为收到的序号加 1(报文段5)。和SYN一样,一个FIN将占用一个序号。同时 TCP服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个服务器程序就关闭它的连接,导致它的 TCP端发送一个FIN(报文段6),客户必须发回一个确认,并将确认序号设置为收到序号加1(报文段7)。

发送FIN将导致应用程序关闭它们的连接,这些FIN的ACK是由TCP软件自动产生的。

连接通常是由客户端发起的,这样第一个 SYN从客户传到服务器。每一端都能主动关闭这个连接(即首先发送 FIN)。然而,一般由客户端决定何时终止连接,因为客户进程通常由用户交互控制,用户会键入诸如“quit”一样的命令来终止进程。我们能改变上边的标识,将左方定为服务器,右方定为客户,一切仍将像显示的一样工作。






 

 










 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值