官方淘宝店 易迪拓培训 旧站入口
首页 > 无线通信 > 通信技术学习讨论 >  关于TCP类型的协议的FSM及实现

 关于TCP类型的协议的FSM及实现

12-16
RFC 793给出了TCP的有限状态机。对一个服务器来说是
Listen --> Syn_Received --> ...
在一般的实现里,tcp都支持多连接,每个连接用(src_addr, src_port, dest_addr, dest_port)的4元组来区分。对于每个连接都有一套rfc 793的fsm。
在tcp的一个实现,如linux v2.6上看一个ftp server的例子。
用#netstat -antp可以得出如下列表:
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      7757/vsftpd      
tcp        0      0 192.168.1.83:21         192.168.1.77:1317       ESTABLISHED 7825/vsftpd    
tcp        0      0 192.168.1.83:21         192.168.1.77:1325       ESTABLISHED 7864/vsftpd    
负责监听的进程的tcp连接状态一直是listen状态,而每个具体的连接则有各自的状态。而且凭我的理解,这些具体的连接不需要listen状态。需要看linux tcp的文档或源码来确认这一点。*********如果有大虾知道真相,也烦请指教了*********
简而言之,在实现tcp的时候,rfc 793的fsm被拆成两部分,一部分只到listen状态(针对监听的进程),另一部分则包含之后的所有状态(针对每个具体的连接)。
从另一个角度来看,rfc 793的fsm只描述了单个连接,在实现支持多连接的时候还需要一个专门负责listen的进程。
(顺便补充一下,俺也看了win32上的serv-u,它只有一个进程,支持多连接,各连接自有状态)。

process和thread是不一样的

上一篇:我对负频率的理解
下一篇:dhcp配置文件
Top