Window网络编程 TCP状态

TCP连接有多个状态,包括CLOSED、SYN_SENT、ESTABLISHED、LISTEN、FIN_WAIT_1、FIN_WAIT_2等。主动关闭时,应用发送FIN包进入FIN_WAIT_1,对方ACK后进入FIN_WAIT_2,对方FIN包后进入TIME_WAIT状态。TIME_WAIT状态持续2MSL以确保数据包被正确接收。被动关闭时,收到FIN包进入CLOSE_WAIT,发出ACK,等待应用关闭。
摘要由CSDN通过智能技术生成

 TCP状态

       作为一个Winsock程序员,通常没必要了解实际的TCP状态。但了解TCP状态,就能更好地理解Winsock API调用如何对基层协议中的改变产生影响。此外,许多程序员在关闭套接字时,会碰到一个常见的问题;围绕套接字关闭的TCP状态是我们目前最感兴趣的问题。

       对每一个套接字来说,它的初始状态都是CLOSED。若客户机初始化一个连接,就会向服务器发送一个SYN包,同时将客户机套接字状态设置为SYN_SENT.服务器收到SYN包后,会发出一个'SYN-ACK"包。作为客户机,需要用一个ACK包对它做出反映。此时,客户机的套接字会变成ESTABLISHED状态。如果服务器一直不发送“SYN-ACK”,客户机就会超时,并返回CLOSED状态。

       若一个服务器的套接字同一个本地接口和端口绑定起来,并在它生面进行监听,那么套接字的状态便是LISTEN.客户机试图与之连接时,服务器就会收到一个SYN包,并用一个SYN_ACK包做出相应。服务器套接字的状态就变成SYN-RCVD。最后,客户机发出一个ACK包,令服务器套接字的状态编程ESTABLISHED。

       一旦应用处于ESTABLISHED状态,可通过两种方法来关闭它。如果由应用程序来关闭,便叫作“主动套接字关闭”;否则 ,套接字的关闭便是被动的。图 7-2对两种关闭方法进行了解释。如主动关闭,应用程序便会发出一个FIN包。应用程序调用closesocket或shutdown时(把SD_SENT当做第二个参数),会向对方发出一个FIN包,而且套接字的状态则变成

FIN_WAIT_1.正常情况下࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值