从Wireshark看TCP连接的建立与关闭

TCP是一种面向连接、可靠的协议。TCP连接的建立与断开,都是需要经过通信双方的协商。用一句话概括就是:三次握手say hello(建立连接);四次握手say goodbye(断开连接)。要了解TCP连接的建立与断开,就不得不需要了解TCP头的内容。然而,TCP头及其复杂,概括而言,我们需要了解以下内容:

Sequence Number(Seq):序号。表示一个TCP片段,用于保证数据没有丢失

Acknowledgment Number(Ack):确认号。用于表示希望从对方得到的下一个数据包的序号。举例来说A发送了一个数据包给B,Ack = 1000;那么就表示A希望从B那接收到的下一个数据包的序号为1000。也就是说,B应该发送一个数据包给A,Seq = 1000。后面会有更详细的例子

Flags:标志。用于标记TCP数据包的类型。TCP连接的建立与断开,会用到以下标记:SYN,ACK,FIN

  • SYN = Synchronize sequence numbers
  • ACK = Acknowledgment
  • FIN = Finish

三次握手的示意图如下:

使用Wireshark捕获TCP三次握手的过程,从下图我们也能很清楚的知道Seq以及Ack变化的过程:

  • Client -> Server: Seq = 3691127924(X) (Flags = SYN)
  • Server -> Client: Seq = 233779340(Y), Ack = 3691127925(X+1) (Flags = SYN&ACK)
  • Client -> Server: Seq = 3691127925(X+1), 233779341(Y+1) (Flags = SYN&ACK)

四次握手的示意图如下:

使用Wireshark捕获TCP四次次握手的过程,从下图我们也能很清楚的知道Seq以及Ack变化的过程:

  • Client -> Server: Seq = 822643295(X), Ack = 2079380537(Y) (Flags = FIN&ACK)
  • Server -> Client: Seq = 2079380537(Y), Ack = 822643296(X+1) (Flags = ACK)
  • Server -> Client: Seq = 2079380537(Y), Ack = 822643296(X+1) (Flags = FIN&ACK)
  • Client -> Server: Seq = 822643296(X+1), Ack = 2079380537(Y+1) (Flags = ACK)

上述的Wireshark并不是我在实践中捕获的数据包,而是《Wireshark数据包分析实战》这本书中附带的数据包文件。在我实际的抓包分析中,捕获的四次握手的过程似乎有些不一样(只有三次握手就断开连接了,希望通过后续学习能解开这个疑惑)

三次握手:

四次握手:

转载于:https://www.cnblogs.com/jonathanlin/p/4282582.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值