TCP连接建立:三次握手过程?为什么是三次?是否可以携带数据----收藏版

TCP三次握手

总说:确认双方的发送能力接受能力
在这里插入图片描述

储备知识:TCP报文段的首部格式(讲下面提到的):
1. 确认ACK(acknowledgment):当ACK = 1 时确认号字段才有效。ACK = 0时确认号字段无效。
TCP规定,在连接建立后所有的报文段都必须把ACK置1
2.同步SYN(synchronization):在连接建立时用来同步序号。
当SYN = 1而ACK=0时,表示这是一个连接请求报文段。对方若同意建立连接,则回SYN=1,ACK=1.
因此SYN置1就表示这是一个连接请求或者连接接受报文。
3.确认号:是期待收到对方下一个报文段的第一个数据字节的序号,占四字节。

细说:

  • 第一次握手: 最开始双方都处于CLOSED状态。然后服务端B开始监听某个端口,进入了LISTEN状态。A发送SYN =1,初始序列seq=x。同时A进入SYN-SEN(同步已发送)状态。
  • 第二次握手:B收到连接请求报文段后,如同意建立连接,则向A发送SYN=1,ACK=1,确认号ack=x+1,同时也为自己选择一个初始序号seq=y。B同时进入SYN-RCVD(同步收到)状态。
  • 第三次握手:A收到B确认后,还要向B发送确认。确认报文ACK=1,自己序号seq = x+1,确认号ack=y+1,这时TCP已经建立连接。A进入ESTABLISHED(已经建立连接)状态。
  • B收到A确认后,也进入ESTABLISHED(已经建立连接)状态。

回答三次握手:

  • 从最开始双方都处于CLOSED状态。然后服务端开始监听某个端口,进入了LISTEN状态。

  • 然后客户端主动发起连接,发送 SYN , 自己变成了SYN-SENT状态。

  • 服务端接收到,返回SYN和ACK(对应客户端发来的SYN),自己变成了SYN-REVD。

  • 之后客户端再发送ACK给服务端,自己变成了ESTABLISHED状态;服务端收到ACK之后,也变成了ESTABLISHED状态。

细节:
前两次握手SYN报文不能携带数据,但要消耗掉一个序号。
第三次 握手 ACK报文段可以携带数据,但如果不携带数据则不消耗序号。
凡是需要对端确认的,一定消耗TCP报文的序列号。

为什么不是两次?

根本原因: 无法确认客户端的接收能力。
三次为了实现可靠数据传输:在收到服务器端的确认报文后,客户端知道了自己的发送能力正常(因为服务器收到了自己的请求报文并返回了确认报文了)和服务器的发送接受能力正常。而服务器知道客户端的发送能力没有问题,但是服务器不知道客户端的接收能力和自己的发送能力是否正常。

为什么不是四次?

三次握手的目的是确认双方发送和接收的能力,那四次握手可以嘛?可以,但是三次够了。

三次握手过程中可以携带数据么?

三次握手中是可以携带数据的,但是不能再第一次和第二次握手中携带,第三次握手中可以携带数据,

首先,如果第一次握手可以携带数据,要是有人恶意攻击服务器,他每次都在第一次握手中的SYN报文中放入大量的数据,因为攻击者根本就不理服务器的接收发送功能是否正常,然后疯狂重复发送SYN报文的话,服务器就会花费很长时间、内存空间来接收这些报文。

所以第一次是不可以放数据的,说简单点就是第一次握手会让服务器更容易受到攻击。而第三次的话,此时的客户端已经处于ECTABLISHED状态,对于客户端来说,他已经建立起了连接,并且也已经知道服务器的接收、发送功能是正常的了,所以ACK包就能携带数据也是可行的。

为什么在三次握手的过程中要初始化序列号,为什么要使用随机序号,而不能使用固定的序号?

ISN可以看做是一个32比特的计数器,每4ms加1,这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它做错误的解释。

​ 三次握手的其中一个重要功能是客户端和服务端交换ISN,以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果ISN是固定的,攻击者很容易猜出后续的确认号,因此ISN是动态生成的。

同时打开会怎样?

在这里插入图片描述

同时发完SYN,两者的状态都变为SYN-SENT。
在各自收到对方的SYN后,两者状态都变为SYN-REVD。
接着会回复对应的ACK + SYN,这个报文在对方接收之后,两者状态一起变为ESTABLISHED。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值