关于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,它只有一个进程,支持多连接,各连接自有状态)。
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是不一样的
相关文章:
- 请问哪里有DMB-T的协议下载?(05-08)
- 请问哪里能够下载TD-SCDMA的协议?(05-08)
- 大家能否讨论一下网络协议栈的设计、实现?(05-08)
- 求教关于wimax协议(05-08)
- 弱弱地问一下几个协议名的英文读法(05-08)
- 哪里能下到最新的WAp协议?(05-08)
射频专业培训教程推荐