Tcp连接中的三次握手与四次挥手

1、报文格式

想要连接了解  Tcp连接中的三次握手与四次挥手,必须先要了解报文的格式,不一定非要知道每部分具体是干什么的,至少对下文中加了注解的名词有个大概的印象。以便后文说明。

小知识:一个TCP报文段的数据部分最大长度为多少字节?

一个TCP报文段的数据部分最大长度为65495字节.

原因:TCP封装在IP内,IP数据报最大长度65535字节 ,头部最小20字节。

由上图可知,tcp包括报头和数据,报头包括了固定的20字节以及选项位,选项位长度范围为 0~40 字节,因此TCP头部长度最小20,所以最大封装数据长度为65535-20-20=65495

 2、三次握手原理图

 

 3、常问问题

1、三次握手的目的是什么?

三次握手  的机制是为了保证客户端与服务端能够建立安全可靠的连接。分别让客户端与服务端确认自身收、发报文的能力及对方收、发报文的能力。

2、为什么是三次握手,为什么不是2次握手?不是4次握手?

这就要从三次握手的目的出发了,三次握手的目的是为了确认 客户端与服务端收发消息的能力,从能保证安全可靠的连接。

从上面的原理图可知:

第一次握手完成后。客户端什么都不能确认,服务端确认对方发送正常,确认自己接收正常

第二次握手完成后,客户端可以确认

                        1、 自己发报文1成功了。   (客户端发报文能力)

                        2、服务端 接报文1成功。    (服务端收报文能力)

                        3、服务端 发报文2成功了。(服务端发报文能力)

                        4、自己接报文2成功了。    (客户端发报文能力)

                               服务端 什么都确认不了。

第三次握手完成后,服务端可以确认

                      1、  自己接报文1成功了。   (服务端接报文能力)

                      2、  自己发报文2成功了。   (服务端接报文能力)

                      3、  客户端接报文2成功了。(客户端接报文能力)

                      4、  客户端发报文3成功了。(客户端发报文能力)

即:最少经过三次握手,客户端与服务端 才能确认自身收发报文能力及对方收发报文能力。

2次握手不够,4次握手没有意义,所以是3次握手。

3、三次握手时可以携带数据吗?

第一次、第二次握手不可以。第三次可以。

由原理图可知,第二次握手完成以后,客户端已经可以确认自身与对方收发报文的能力了,所以再发报文3时,就可以携带数据了。当服务端收到报文3时,一旦确认了,就可以直接读取数据。

 4、四次挥手原理图

 第一次挥手完成后,服务端 确认    客户端要断开连接了。

 第二次挥手完成后,客户端 确认    服务端已知晓客户端要断开连接了。

 第三次挥手完成后,客户端 确认    服务端要断开连接了。

 第四次挥手完成后,服务端 确认    客户端已知服务端要断开连接了。

5、为什么连接的时候是三次握手,关闭的时候却是四次握手?


答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

进阶:

        三次握手与四次过程中客户端与服务端 状态的改变 相关问题

6、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:

1)为了保证客户端发送的最后一个ACK报文段能够达到服务器。  这个ACK报文段可能丢失,因而使处在LAST-ACK状态的服务器收不到确认。服务器会超时重传FIN+ACK报文段,客户端就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重启计时器。最好,客户端和服务器都正常进入到CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,而是再发送完ACK报文后立即释放连接,那么就无法收到服务器重传的FIN+ACK报文段,因而也不会再发送一次确认报文。这样,服务器就无法按照正常步骤进入CLOSED状态 。
2)防止已失效的连接请求报文段出现在本连接中。客户端在发送完最后一个ACK确认报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值