失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > TCP三次握手(建立连接)

TCP三次握手(建立连接)

时间:2019-09-23 12:21:14

相关推荐

TCP三次握手(建立连接)

TCP FLAG 位由6个bit 组成,分别代表 ACK、SYN、 FIN、 URG、PSH 、RST ,都以置1表示有效。我们重点关注 SYN, ACK FIN SYN ( Synchronize Sequence Numbers )用作建立连接时的同步信号 ACK ( Acknowledgement )用于对 收到的数据进行确认,所确认的数据由确认序列号表示; FIN ( Finish )表示后面没有 数据需要发送,通常意昧着所建立的连接需要关闭了。 如下图,B机器是服务端角色, A机器是客户端角色,前者需要在后者发起连接建立请求时先打开某个端口等待数据传输,否则将无法正常建立连接。三次握手指的是建立连接的三个步骤: 1、A 机器发出一个数据包并将 SYN 置1,表示希望建立连接。这个包中的序列号假设是 x; 2、B 机器收到 机器发过来的数据包后,通过 SYN 得知这是一个建立连接的请求,于是发送一个响应包并将 SYN和ACK 标记都置1 。假设这个包中的序列号是y ,而确认序列号必须是 x+l ,表示收到了 发过来的 SYN TCP 中, SYN 被当作数据部分的一个字节。 3、A 收到 的响应包后需进行确认,确认包中将 ACK 置1,并将确认序列号设置为 y+1,表示收到了来自 B的SYN。这里为什么需要第3次握手?它有两个主要目的 :信息对等和防止超时。先从信息对等角度来看,如表 所示,双方只有确定4类信息 ,才能建立连接。在第2次握手后 ,从B机器视角看还有两个红色的NO信息无法确认。在第3次握手后,B机器才能确认自己的发报能力和对方的收报能力是正常的。 三次握手确认的信息:

连接三次握手也是防止出现请求超时导致脏连接。TTL网络报文的生存时间往往都会超过TCP请求超时时间,如果两次握手就可以创建连接,传输数据并释放连接后,第一个超时的连接请求才到达B机器的话,B机器会以为是A创建新连接的请求,然后确认同意创建连接。因为A机器的状态不是SYN_SENT,所以直接丢弃了B的确认数据,以致最后只是B机器单方面创建连接完毕,简要示意图如图所示:

如果是三次握手,则B机器收到连接请求后,同样会向A机器确认同意创建连接,但因为A机器不是SYN_SENT状态,所以会直接丢弃,B机器由于长时间没有收到确认信息,最终超时导致连接创建失败,因而不会出现脏连接。

如果觉得《TCP三次握手(建立连接)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。