众所周知,TCP是可靠传输,那么什么叫可靠呢?简单的讲就是二者通信,只有当彼此都知道自己以及对方收发消息都正常时候,然后再进行数据传输。 而三次握手的目的就是为了确认双方收发消息都没问题。
首先需要了解的是:
1.TCP规定SYN=1时不能携带数据,也就是SYN置1就表示这是一个连接请求或连接接受报文
2.连接建立后所有发送的报文的ACK必须为1
3.当FIN=1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接
三次握手:
step1:客户端发送链接请求报文SYN=1 ACK=0到服务端,进入SYN_SEND状态,等待服务端确认
step2:服务端收到请求,向客户端发送SYN=1 ACK=1,服务端进入SYN_RECV状态
step3:客户端收到消息,向服务端发送确认包,客户端和服务器进入ESTABLISHED状态
那么问题来了,为啥需要三次握手确认?两次为啥不行?
其实这就好比这样的一个场景:
周末,小明想约小红出去浪,于是小明发微信消息给小红
显然,小明发出第一条消息问小红在不在,这时候小明无法确定自己信息是否真的发出去了?小红会不会收不到信息?亦或小红收到信息了但是她回的消息自己没收到?.........这时候其实还是两眼一抹黑
小明收到小红回复的消息,这时候小明知道,自己收发信息都是没问题的,而且小红的收发也是没问题。但是对小红来说,她只知道自己的收信没问题,但是自己发的信息有没有发出去并不知道.....
小红这时候收到小明的回复,证明自己上一条回复小明的消息发送成功,此时也说明自己跟小明的收发消息都正常。。。。可以进一步深聊
至此,TCP三次握手完成,是不是很简单?
时间: 2024-11-04 12:19:47