TCP三次握手/四次挥手

一.基本概念

1.TCP全名传输控制协议,是一种面向连接,确保数据在端到端之间进行可靠传输的协议。

2.面向连接:在连接前端与端之间建立一条虚拟的链路通道。

3.可靠传输:对数据的每一个字节进行编号,检验数据包的有效性,超时进行重传。

4.避免因网络恶化影响数据传输的手段:滑动窗口拥塞控制。

二.TCP报头中的几个重要标志位

1.序列号(32位,即seq = ?):本报文段第一个字节的序号。

2.确认序号(32位,即ack = ?):期望收到的下一个报文段的第一个字节的序号。

3.SYN(Synchronize Sequence Numbers):用来建立连接时同步信号。(发送同步信号时将SYN置1)

4.ACK(Acknowledgement):用来对收到的数据进行确认,所确认的数据由确认序列号表示。(确认后将ACK置1)

5.FIN(Finish):用来表示后面已经没有数据了要发送了,所建立的连接需要关闭了。(要断开连接时将FIN置1)

三.三次握手(A机器与B机器建立连接时)

1.图解

2.步骤分析

(1)当A机器想要和B机器建立连接时,A机器首先要想B机器发送一个数据包,并将数据包中的SYN标志位置为1(建立连接时同步信号),假设SYN的值为x,即本报文段数据的第一个字节的序列号是x。

(2)B机器收到了A机器发来的数据包后,发现SYN标志位是1,就得知了这是一个建立连接的请求,于是向A机器发送了一个数据包,并且将SYN和ACK都置为1,表明向A机器发送同步信号,并且确认收到了A机器的数据包,最后假设这个数据包中seq为y,即本报文段数据的第一个字节序列号为y,ack(确认序号)为x+1,因为已经收到了A发来的x,x+1是下一个数据序号。注意:在TCP中,SYN被当作数据部分的一个字节

(3)A机器收到了B机器发来的数据包后,需要再次向B机器发送响应包,并将ACK置为1,表示收到了B机器的数据包,并将ack(确认序号)设置为y+1,上一次B机器发来的为y,因此此次希望收到y+1。

3.为什么需要第三次握手?(重点)

两个目的:1.信息对等  2.防止超时

(1)信息对等:只有在第三次握手之后,B机器才能确定自己的发报能力对方的收报能力是正常的。

(2)防止超时:防止超时就是为了防止出现请求超时导致脏连接。

解释:如果两次握手就能创建连接,那么释放连接后,有一个超时的连接请求可能才到达B机器,而B机器误以为又有机器来连接,然后B机器就会向A机器再次发送确认连接的数据包,而A机器此时的状态是Listening,不是SYN_SENT,因此A会将B的数据包丢弃,以至于B机器单方面创建连接。

四.四次挥手

1.图解

2.为什么最后A机器要等待2MSL?(重点)

(1)确认被动关闭方能够顺利进入CLOSED状态。

解释:加入最后A机器向B机器发送的数据包因网络超时B机器没有收到,那么B机器以为 A机器没有收到B机器发送的上一个FIN数据包,于是B机器向A机器重新发送FIN数据包,可是如果A机器不等待2MSL,A机器发送完最后的数据包就直接关闭了,有可能导致B机器无法正常关闭。

(2)防止失效请求

解释:防止已经失效的连接请求数据包与正常请求数据包混淆发生异常。

注意:TIME_WAIT = 2MSL是因为2MSL是报文在网络上生存的最长时间,超过就会被丢弃。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值