【网络】(六)TCP的十一种状态

1、TCP 十种状态

这里写图片描述

过程描述:

  • 0.1 服务器B和客户端A中的套接字都处于CLOSE状态(图中未标出)
  • 0.2 服务器B调用socket/bind/listen函数创建了一个套接字后,处于LISTEN状态,该套接字属于被动套接字,被动套接字不能用来发起连接,只能接受连接
  • 0.3 客户端A调用socket/connect函数创建一个套接字后,处于SYN_SENT状态,该套接字属于主动套接字,用来发起连接,这会向服务器B发送一个用于发起连接的TCP段SYN,假定编号为a,并且此时connect函数处于阻塞状态
  • 0.4 服务器B由于调用accept而处于阻塞状态,在接收到客户端A发来的SYN a段后,服务器B的套接字就处于SYN_RCVD状态,此时accept函数并不返回,还是处于阻塞状态;同时,它对SYN a段进行确认,并发送SYN b段和一个确认段ACK a+1给对方
  • 0.5客户端A接收到服务器B发送的SYN b 和 SYN a+1段后,然后处于ESTABLISHED状态,connect函数返回,并发送ACK b+1 确认段给服务器B
  • 0.6 服务器B收到ACK b+1 段后,TCP状态也就处于ESTABLISHED状态,accept函数返回,连接的三次握手完成,accept将未连接队列中的一个条目移至以连接队列中,并返回队头连接

 

  • 0.7 连接建立后,双方可通信,通信过程中,双方都可发起关闭请求

 

  • 0.8 假设客户端A发起关闭请求close,向服务器B发送一个FIN x段,此时客户端A TCP状态变为:FIN_WAIT_1
  • 0.9 服务器B收到FIN x段后,会导致read函数返回0,同时服务器B会对FIN x段进行确认,发送确认段 ACK x+1,导致服务器B的TCP状态变为:CLOSE_WAIT
  • 1.0 客户端A接收到ACK x+1确认段后,TCP状态变为:FIN_WAIT_2,从而等待服务器B发起close请求
  • 1.1 服务器B在收到0.9中的FIN x段后,也可发起close关闭请求,发送FIN y段给客户端A,TCP状态变为:LAST_ACK
  • 1.2 客户端A收到FIN y段后,确认关闭,并发送ACK y+1给服务器B,TCP状态变为:TIME_WAIT,此时客户端A的连接并不马上关闭,而是保留2MSL时间(报文最大生存时间),目的是保证ACK y+1发送后,如果对方没有收到,及时重发它
  • 1.3 服务器B收到ACK y+1段后,表示客户端确认关闭,TCP状态变为:CLOSED;TCP 四次挥手完成,TCP连接关闭!

 
2、TCP 第十一种状态–CLOSING

该状态发生于:如果客户端和服务器同时发起了关闭请求,那么此时它们的TCP状态就都为FIN_WAIT_1,并发送FIN段给对方,对方收到FIN段后,又发送确认段ACK段给对方,此时彼此的TCP状态就为CLOSING,当接收到对方的ACK段后,彼此状态变为:TIME_WAIT,该状态是发起close的一方才会有的状态。

 
3、SIGPIPE信号的产生

在TCP通信中,往一个已经接收到FIN段的套接字中再发送数据是合法的,接收到FIN段仅仅代表对方不再发送数据,即不再往套接字中写入数据,不代表我们不能给它发送数据!
如果此时发送了数据给对方,而对方的进程已经不存在了,会导致TCP的重置,并发送一个RST段给我们,如果我们再次发送数据给对方,在调用write函数时就会产生SIGPIPE信号,对于这个信号,可以直接捕获然后忽略它,如果不捕获,默认的操作会立即结束当前进程!

TCP(传输控制协议)是互联网中非常重要的一个协议,它是面向连接的、可靠的、基于字节流的传输层通信协议。当我们谈论“网络状态tcp in”的时候,通常是在指代TCP连接进入的情况,即TCP连接的状态变化中,某个TCP连接被建立或者新的数据包被接收到的状态TCP连接的建立、维护和终止都是通过一系列的状态变化来完成的。在TCP/IP协议的实现中,一个典型的TCP连接会经历如下主要状态(在TCP/IP RFC 793中有详细描述): 1. LISTEN(监听状态):服务端处于监听状态,等待客户端的连接请求。 2. SYN-SENT(同步已发送):客户端发出连接请求(SYN)之后,等待服务端确认。 3. SYN-RECEIVED(同步已接收):服务端收到客户端的连接请求后,发回一个同步确认(SYN+ACK),等待客户端确认。 4. ESTABLISHED(已建立连接):双方成功交换同步确认信息后,TCP连接就建立了,可以进行数据传输。 5. FIN-WAIT-1(结束等待1):数据发送完毕后,一方发出结束连接的请求(FIN),等待对方确认。 6. FIN-WAIT-2(结束等待2):一方收到对方结束连接的请求确认后,进入这个状态,等待对方发送结束请求。 7. TIME-WAIT(时间等待):一方收到结束请求的确认后,会发送一个结束确认(ACK),然后等待足够长的时间以确保对方收到了这个确认。 8. CLOSED(关闭状态):当连接双方都发送并接收到了结束确认,连接就完全关闭了。 在网络通信中,我们可以通过命令行工具如netstat来查看当前的TCP连接状态,其中“tcp in”可能是指对网络中流入的TCP数据包进行的状态监控。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值