TCP连接建立

第一次握手
客户端向服务器发送一个数据包,目的是为了与对方建立TCP连接。为了说明这个意图,这个数据包会在头部字段中说明以下几点。
我希望和你建立TCP连接(将头部的SYN标记设臵为1)。
我把我的初始序列号提供给你(将序列号字段的值设臵为自己的初始序列号值x。注意,我们之前曾经说过序列号表示数据的第一个字节,但TCP规定,TCP连接建立的第一个SYN数据包不能携带数据部分,但它也会占用一个序列号)。
注意,这个数据包头部的ACK字段的值就是0,因为这是两边的第一次交流,没什么先前的信息可以确认。
第二次握手
服务器收到了客户端发送的数据包,同意与客户端建立连接。这时,服务器也会向客户端发送一个数据包。这个数据包旨在说明下面几点。
同意和你建立TCP连接(将头部的SYN标记设臵为1)。
你发来的请求信息已阅,期待收到你的下一个数据包(将ACK标记设臵为1,确认号的值设臵为x+1)。
我也把我的初始序列号提供给你(将序列号字段的值设臵为自己的初始序列号值y,注意,TCP又规定了,这也是个TSYN数据包,所以这个数据包也不能携带数据部分,但它也会占用一个序列号)。
第三次握手
客户端在收到服务器发送的数据包后,知道服务器同意与自己建立TCP连接,并与自己交换了初始序列号,此时它会向服务器发送三次握手过程中的最后一个数据包,这是为了告诉对方下述信息。
你发来的答复信息已阅,期待收到你的下一个数据包(将头部的ACK标记设臵为1,确认号的值设臵为y+1)。
这是根据你的要求发给你的下一个数据包(将序列号值设臵为 x+1。注意,这个数据包不再是SYN数据包了,因此它如果不携带数据,就不会占用序列号,这里我们姑且假设它携带了数据)。
显然,三次握手是通过TCP传输数据的前戏。连接建立之后,双方就可以开始在这个连接的基础之上传输数据了。那么,数据传输完成之后呢?
在完成数据传输后,需要通过一个更加复杂的“四次握手”流程来断开TCP连接。下面我们趁热打铁,介绍一下TCP连接断开的过程。
TCP连接断开的整个过程如图2-6所示。我们假设当客户端希望断开与服务器之间的连接时,客户端将要发送的TCP数据包序列号为k,用于确认服务器之前传输的数据包的确认号为l,那么此时TCP连接断开的过程就可以描述为下面的四次握手。
在这里插入图片描述
第一次握手
客户端向服务器发送一个数据包,这个数据包的目的是告诉服务器,自己希望与它断开连接。为了说明这个意图,这个数据包会在头部字段中说明以下几点。
我收到了你刚才发来的消息,期待你的下一条消息(将ACK标记设臵为1,确认号的值设臵为l)。
我现在希望和你断开TCP连接(将头部的FIN标记设臵为1)。
我把这个消息序列号提供给你(将序列号字段的值设臵为k。注意,TCP再次作出规定,FIN数据包可以携带数据,且无论是否携带数据,均占用一个序列号。我们在这里假设,TCP连接断开阶段的四次握手数据包均不携带数据)。
第二次握手
服务器收到客户端发来的断开连接请求之后,断开了客户端到服务器的连接,并向客户端回复一个TCP数据包,这个数据包的目的是告诉客户端下述信息。
我收到了你发来的连接断开请求,期待你的下一条消息(将ACK标记设臵为1,确认号的值设臵为k+1)。
告诉你这个消息的序列号(将序列号设臵为l)。
第三次握手
这一次还是服务器发送给客户端的消息,这个消息的作用是为了请求客户端断开客户端到服务器的连接,在这个消息中,服务器表示:
我收到了你之前发来的连接断开请求,期待你的下一条消息(将ACK标记设臵为1、确认号的值设臵为k+1,因为第一次握手之后,客户端不会再向服务器发送数据了);
我现在希望和你断开TCP连接(将头部的FIN标记设臵为1);
我把这个消息序列号提供给你(将序列号字段的值设臵为ll。因为虽然第一次握手之后,客户端就不会再向服务器发送其他数据了,但第二次握手之后,服务器只断开了客户端到服务器的连接,服务器与客户端的连接依然存在,因此在与第三次握手之前,服务器可能还会给客户端发送一些其他占用序列号的消息)。
第四次握手
客户端收到服务器发来的断开连接请求之后,也断开了服务器到客户端的连接,并向客户端回复一个TCP数据包,这个最后的数据包对服务器说:
我收到了你发来的连接断开请求(将ACK标记设臵为1,确认号的值设臵为ll+1。注意,即使在这条消息中,客户端仍会向服务器提供确认号);
告诉你这个消息的序列号(将序列号设臵为k+1)。
上述过程就是TCP连接建立与断开的完整步骤,这个步骤对于此后的学习至关重要,无论路由交换方向、安全方向还是 SP 方向。不过,这个过程倒是不用在这里就开始死记硬背,我们推荐读者在这里先把上面的两张连接建立示意图看个“眼熟”,以此来熟悉TCP连接建立与断开的过程。
在本节最后,我们通过表2-1向读者介绍几个常用的基于TCP的应用层协议。在我们平常使用这些协议时,数据都会在经过传输层处理时封装上那样的TCP头部,也都会与对端的设备按照上面的过程建立和断开TCP连接。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值