TCP 传输协议

TCP 传输协议

 

TCP 连接建立协议

 

名词解释:序号用来标识 从TCP发端向TCP接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。

 

主要字段解释:

① 32 位序列号:该序列号有自己随机产生 , 用于ACK的确认 ,这个字段一致存在

② 32 位确认序列号:等于上次已成功接收到数据字节序号加1,并且只有ACK标志为1时确认序列号才有效,我们可以看到,在client第一个发送command时,该字段被设为, ACK也是 

③ U R G 紧急指针(u rgent pointer)有效(见2 0 . 8节)。

④ A C K  确认序号有效。

⑤ P S H 接收方应该尽快将这个报文段交给应用层。

⑥ R S T 重建连接。

⑦ S Y N同步序号用来发起一个连接。这个标志和下一个标志将在第 1 8章介绍。

⑧ F I N 发端完成发送任务。

 

下面看一下三次握手的过程:

Client ----》 Server

 

第一个报文段

此时 Sequence number (32 位序列号) = 1609666383  , 发送方 自己

ACK number = 0

ACK =0

SYN = 1

Serve---Client

 

第二个报文段

此时:

Sequence Number: 1200338241 ,发送方 自己

Ack Number: 1609666384

ACK : 1

SYN : 1

 

Client--->Server

 

第三个报文段

Sequence Number: 1609666384

Ack Number: 1200338242

Ack : 1

SYN : 0

 

 

下面进行总结:

Client 

Sequence number (32 位序列号) = 1609666383  ----------------Sequence Number: 1609666384

 

ACK number = 0  ---Ack Number: 1200338242

 

Server 

Sequence Number: 1200338241 ,发送方 自己

Ack Number: 1609666384

 

 

 

TCP连接终止协议

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

收到一个F I N只意味着在这一方向上没有数据流动。一个 T C P连接在收到一个F I N后仍能发送数据。而这对利用半关闭的应用来说是可能的,尽管在实际应用中只有很少的T C P应用程序这样做。正常关闭过程如图1 8 - 3所示。我们将在1 8 . 5节中详细介绍半关闭。

首先进行关闭的一方(即发送第一个 F I N)将执行主动关闭,而另一方(收到这个 F I N)执行被动关闭。通常一方完成主动关闭而另一方完成被动关闭,但我们将在 1 8 . 9节看到双方如何都执行主动关闭。

1 8 - 3中的报文段4发起终止连接,它由Te l n e t客户端关闭连接时发出。这在我们键入 q u i t命令后发生。它将导致T C P客户端发送一个F I N,用来关闭从客户到服务器的数据传送。

当服务器收到这个 F I N,它发回一个A C K,确认序号为收到的序号加 1(报文段5)。和S Y N一样,一个F I N将占用一个序号。同时T C P服务器还向应用程序(即丢弃服务器)传送一个文件结束符。接着这个服务器程序就关闭它的连接,导致它的 T C P端发送一个F I N(报文段6),客户必须发回一个确认,并将确认序号设置为收到序号加1(报文段7)。图1 8 - 4显示了终止一个连接的典型握手顺序。我们省略了序号。在这个图中,发送F I N将导致应用程序关闭它们的连接,这些F I NA C K是由T C P软件自动产生的。

连接通常是由客户端发起的,这样第一个 S Y N从客户传到服务器。每一端都能主动关闭这个连接(即首先发送 F I N)。然而,一般由客户端决定何时终止连接,因为客户进程通常由用户交互控制,用户会键入诸如“ q u i t”一样的命令来终止进程。在图 1 8 - 4中,我们能改变上边的标识,将左方定为服务器,右方定为客户,一切仍将像显示的一样工作(例如在1 4 . 4节中的第一个例子中就是由d a y t i m e服务器关闭连接的)。

18.2.5 正常的t c p d u m p输出对所有的数值很大的序号进行排序是很麻烦的,因此默认情况下 t c p d u m p只在显示S Y N报文段时显示完整的序号,而对其后的序号则显示它们与初始序号的相对偏移值(为了得到图1 8 - 1的输出显示必须加上- S选项)。对应于图1 8 - 1的正常t c p d u m p显示如图1 8 - 5所示:除非我们需要显示完整的序号,否则将在以下的例子中使用这种形式的输出显示。

 

下面是抓包情况:

Server ip  192.168.137.1

Client ip: 192.168.137.128

第一个报文段:

Server ----Client

 

第二个报文段:

Client---Server

第三个报文段:

Client---Server

 

第四个报文段:

Server--Client

 

 

 TCP的半关闭

T C P提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓的半关闭。正如我们早些时候提到的只有很少的应用程序使用它。

半关闭一般是由接收方先发送FIN 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值