TCP连接建立与关闭
2017-12-14 16:05
288 查看
TCP连接建立与关闭
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议.连接建立(三次握手)
TCP是传输层协议,使用三次握手建立连接,当主动方发出 SYN 连接请求时,接收方接受请求后,发出 SYN+ACK 作为响应,接收到响应后,对响应的 SYN 执行 ACK 确认。这种连接建立方式可以避免错误连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。TCP三次握手过程如下:
客户端发送连接请求(SYN=1,seq=x)报文给服务端,进入SYN状态
服务端收到请求,回应一个SYN+ACK(SYN=1,ACK=x+1,seq=y)报文,此时服务器进入SYN_RECV状态
客户端收到服务端的SYN报文,回应一个ACK(ACK=y+1),进入Established状态
三次握手”的目的:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。例如:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。
连接关闭(四次挥手)
由于TCP是全双工的,每个方向都必须单独关闭。当一方完成数据发送任务就能发送一个FIN终止这个方向的连接。收到一个FIN只是意味着这一方向上没有数据流动,TCP收到FIN后任然能发送数据。建立一个连接需要三次握手,而关闭一个连接需要四次握手,这是由于连接半关闭(half-close)造成的。具体过程如下:
主动方发A发送一个FIN(FIN=1,seq=x),用来关闭A到被动方B的数据发送
被动方B收到FIN,响应一个ACK(ACK=x+1)给A
B关闭与A的连接,并发送一个FIN(FIN=1,seq=y)给A
A向B发送ACK(ACK=y+1)
每个方向都需要一个FIN和一个ACK,因此通常需要挥手四次。
“通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,第二步和第三步发送的分节都出自执行被动关闭那一端,有可能被合并成一个步骤。
在第二步与第三步之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
相关文章推荐
- TCP连接建立与关闭
- TCP连接建立与关闭
- TCP连接建立和关闭中的疑难点
- TCP连接的建立和关闭
- TCP连接建立与关闭
- libjingle源码解析(3)-【PseudoTcp】建立UDP之上的TCP(1):连接和关闭
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP连接建立和关闭中的疑难点
- TCP三次握手(建立连接)/四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- 看段有趣的故事,理解TCP/IP的TCP连接建立与关闭
- TCP的三次握手(建立连接)和四次挥手(关闭连接)