您的位置:首页 > 理论基础 > 计算机网络

三次握手 来源知乎用户Storm

2017-08-19 15:40 239 查看
一.概念

SYN(synchronous/同步)是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

ACK(Acknowledgement/确认),即确认字符,在数据通信中,接受站发给发送站的一种传输类控制字符,表示发来的数据已接受无误。

SEQ(Sequence/序列)是发送数据包中的序列号。

Established(Established/已建立),含义TCP连接成功。

SYN_SENT表示请求连接,当你要访问其他的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。

SYN_RECV是指服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入到ESTABLISHED状态。

二.流程

第一次握手:建立连接时,client发送syn(syn=j)包到server,并进入SYN_SENT状态,等待服务端确认。

第二次握手:server接收到syn包,必须确认client的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时server进入SYN_RECV状态;

第三次握手:client收到server的SYN+ACK包,向server发送确认包(ack = k+1),此包发送完毕

client和server进入ESTABLISHED(TCP连接成功,完成三次握手)

完成三次握手,client与server开始传送数据

三. 通俗来说

AB两军协同作战, A军想要与B军同时发起总攻, 于是A军派出通讯员前往B军通讯, B军收到消息, 但是A军并不知道B军已经收到消息, B军司令很担心这个问题, 于是, 派出通讯员前往A军, A军收到了通讯员的消息, 知道B军知道了要发起总共的消息, 但是A军司令担心B军不知道自己收到了消息, 如果到时候没有发起总共怎么办? 于是A军再次派出通讯员前往B军告诉B军, A军已经收到了B军已经收到了消息的消息.

这就是三次握手的基本原理, 在确保消息准备不丢失的情况下, 进行高效安全的通讯!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TCP 三次握手