- 论坛徽章:
- 0
|
TCP协议的状态机为:
-
- +---------+ ---------\ active OPEN
- | CLOSED | \ -----------
- +---------+<---------\ \ create TCB
- | ^ \ \ snd SYN
- passive OPEN | | CLOSE \ \
- ------------ | | ---------- \ \
- create TCB | | delete TCB \ \
- V | \ \
- +---------+ CLOSE | \
- | LISTEN | ---------- | |
- +---------+ delete TCB | |
- rcv SYN | | SEND | |
- ----------- | | ------- | V
- +---------+ snd SYN,ACK / \ snd SYN +---------+
- | |<----------------- ------------------>;| |
- | SYN | rcv SYN | SYN |
- | RCVD |<-----------------------------------------------| SENT |
- | | snd ACK | |
- | |------------------ -------------------| |
- +---------+ rcv ACK of SYN \ / rcv SYN,ACK +---------+
- | -------------- | | -----------
- | x | | snd ACK
- | V V
- | CLOSE +---------+
- | ------- | ESTAB |
- | snd FIN +---------+
- | CLOSE | | rcv FIN
- V ------- | | -------
- +---------+ snd FIN / \ snd ACK +---------+
- | FIN |<----------------- ------------------>;| CLOSE |
- | WAIT-1 |------------------ | WAIT |
- +---------+ rcv FIN \ +---------+
- | rcv ACK of FIN ------- | CLOSE |
- | -------------- snd ACK | ------- |
- V x V snd FIN V
- +---------+ +---------+ +---------+
- |FINWAIT-2| | CLOSING | | LAST-ACK|
- +---------+ +---------+ +---------+
- | rcv ACK of FIN | rcv ACK of FIN |
- | rcv FIN -------------- | Timeout=2MSL -------------- |
- | ------- x V ------------ x V
- \ snd ACK +---------+delete TCB +---------+
- ------------------------>;|TIME WAIT|------------------>;| CLOSED |
- +---------+ +---------+
- TCP Connection State Diagram
复制代码
我现在要做服务器端的程序,我也不管客户端的情况,不过客户端肯定也是根据TCP状态机来实现的,这一点已经足够了。
现在有一个问题,就是当我把所有数据发送给客户端后,怎样告诉客户端所有数据已经发送完,状态图上好象只有服务器端的被动关闭与双方同时关闭,能不能让服务器端发起主动关闭?那么服务器ESTABLISHED的下一个状态该是什么?谢谢!
由于马上要下机,可能我问的不是很清楚。 |
|