TCP三次握手其实,网络上的传输是没有连接的, TCP 是一样的 TCP 所谓的 “连接”,其实只不过是在通信的双方维护一个“连接状态”,让它看上去好像有连接一样 所以, TCP 的状态变换是非常重要的 。
TCP 连接的建立可以简单地称为三次握手,而连接的中止则可以称为四次挥手。
建立连接 TCP/IP 协议中, TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送 SYN 包到服务器,并进入 SYN_SEND 状态,等待服务器确认。
第二次握手:服务器收到 SYN 包,必须确认客户的 SYN ,同时自己也发送一个 SYN 包,即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态。
第三次握手 :客户端收到服务器的 SYN + ACK 包,向服务器发送确认包 ACK,此包发送完毕,客户端和服务器进入 ESTABLISHE 态。
完成 三次握手,客户端与服务器开始传送数据,也就是 ESTABLISHED 状态。
TCP四次挥手
TCP的连接断开
TCP 一个特别的概念叫作半关闭,这个概念是说, TCP 的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。
客户机给服务器 FIN 的 TCP 报文,然后服务器返回给客户端一个确认 ACK 报文,并且发送一个FIN 报文,当客户机回复 ACK 报文后( 四次握手),连接就结束了。
在建立连接的时候,通信的双方要互相确认对方的最大报文长度( MSS ),以便通信。
一般这个 SYN 长度是 MTU 减去固定 IP 首部和 TCP 首部长度。对于一个以太网,一般可以达 1460 Byte 。当然如果对于非本地的 IP ,这个 MSS 可能就只有 536 Byte ,而且,如果中间的传输网络的 MSS 更加的小的话,这个值还会变得更小。
为什么建连接要三次握手,断连接需要四次挥手?
对于建连接的三次握手,主要是要初始化 Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的 Sequence Numbe,所以叫 SYN 。
这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输问题而乱序( TCP 会用这个序号来拼接数据)。
对于四次挥手,其实仔细看则是两次,因为 TCP 是全双工的,所以,发送方和接收方都需要 FIN 和 ACK。
只不过,有一方是被动的,所以看上去就成了所谓的四次挥手 。如果两边同时断连接,那就会就进入到 CLOSING 状态,接着就是TIME_WAIT 状态。
-
服务器
+关注
关注
12文章
9017浏览量
85182 -
网络
+关注
关注
14文章
7514浏览量
88625 -
TCP
+关注
关注
8文章
1349浏览量
78985 -
客户端
+关注
关注
1文章
290浏览量
16661
发布评论请先 登录
相关推荐
评论