范文一:C语言多路复用技术
[C语言]post by 陈俊生 / 2012-1-4 9:25 Wednesday
要实现I/O多路复用有很多的方式,其中可以用进程或者是线程等来实现,也可以用select/poll /epoll/port等来实现。在相比两者之间,利用select/poll /epoll/port等来实现复用效率更快,实现更容易,在底层的需要的资源更少,效率更快。 下面就介绍一下select/poll /epoll/port等的具体用法。
Select 的用法。
select 原型:
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
其中参数n 表示监控的所有fd 中最大值+1。
和select 模型紧密结合的四个宏,含义不解释了:
FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);
理解select 模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set中的每一bit 可以对应一个文件描述符fd 。则 1字节长的fd_set最大可以对应8个fd 。
(1)执行fd_set set; FD_ZERO(&set);则set 用位表示是0000,0000。
(2)若fd =5, 执行FD_SET(fd,&set);后set 变为0001,0000(第5位置为1)
(3)若再加入fd =2,fd=1,则set 变为0001,0011
(4)执行select(6,&set,0,0,0)阻塞等待
(5)若fd=1,fd=2上都发生可读事件,则select 返回,此时set 变为0000,0011。注意:没有事件发生的fd=5被清空。
基于上面的讨论,可以轻松得出select 模型的特点:
(1) 可监控的文件描述符个数取决与sizeof(fd_set)的值。我这边服务器上sizeof(fd_set)=512,每bit 表示一个文件描述 符,则我服务器上支持的最大文件描述符是512*8=4096。据说可调,另有说虽然可调,但调整上限受于编译内核时的变量值。
(2)将fd 加入select 监控集的同时,还要再使用一个数据结构array 保存放到select 监控集中的fd ,一是用于再select 返回 后,array 作为源数据和fd_set进行FD_ISSET判断。二是select 返回后会把以前加入的但并无事件发生的fd 清空,则每次开始 select 前都要重新从array 取得fd 逐一加入(FD_ZERO最先),扫描array 的同时取得fd 最大值maxfd ,用于select 的第一个 参数。
(3)可见select 模型必须在select 前循环array (加fd ,取maxfd ),select 返回后循环array (FD_ISSET判断是否 有时间发生)。
下面给一个伪码说明基本select 模型的服务器模型:
array[slect_len];
nSock=0;
array[nSock++]=listen_fd;(之前listen port已绑定并listen)
maxfd=listen_fd;
while {
FD_ZERO(&set);
foreach (fd in array)
{
fd 大于maxfd ,则maxfd=fd
FD_SET(fd,&set)
}
res=select(maxfd+1,&set,0,0,0);
if(FD_ISSET(listen_fd,&set))
{
newfd=accept(listen_fd);
array[nsock++]=newfd;
if(--res<=0)>=0)>
}
foreach 下标1开始 (fd in array)
{
if(FD_ISSET(fd,&set))
执行读等相关操作
如果错误或者关闭,则要删 除该fd ,将array 中相应位置和最后一个元素互换就好,nsock 减一
if(--res<=0)>=0)>
}
}
poll 模型
poll()系统调用是System V 的多元I/O解决方案。它解决了select()的几个不足,尽管select()仍然经常使用(多数还是出于习惯,或者打着可移植的名义):
poll 的原型
#include int poll (struct pollfd *fds, unsigned int nfds, int timeout); 和select()不一样,poll()没有使用低效的三个基于位的文件描述符set ,而是采用了一个单独的结构体pollfd 数组,由fds 指针指向这个组。pollfd 结构体定义如下: #include struct pollfd { int fd; short events; short revents; }; 每一个pollfd 结构体指定了一个被监视的文件描述符,可以传递多个结构体,指示poll()监视多个文件描述符。每个结构体的events 域是监视该文件描述符的事件掩码,由用户来设置这个域。revents 域是文件描述符的操作结果事件掩码。内核在调用返回时设置这个域。events 域中请求的任何事件都可能在revents 域中返回。合法的事件如下: POLLIN 有数据可读。 POLLRDNORM 有普通数据可读。 POLLRDBAND 有优先数据可读。 POLLPRI 有紧迫数据可读。 POLLOUT 写数据不会导致阻塞。 POLLWRNORM 写普通数据不会导致阻塞。 POLLWRBAND 写优先数据不会导致阻塞。 POLLMSG SIGPOLL 消息可用。 此外,revents 域中还可能返回下列事件: POLLER 指定的文件描述符发生错误。 POLLHUP 指定的文件描述符挂起事件。 POLLNVAL 指定的文件描述符非法。 这些事件在events 域中无意义,因为它们在合适的时候总是会从revents 中返回。使用poll()和select()不一样,你不需要显式地请求异常情况报告。 POLLIN | POLLPRI等价于select()的读事件,POLLOUT | POLLWRBAND等价于select()的写事件。POLLIN 等价于POLLRDNORM | POLLRDBAND ,而POLLOUT 则等价于POLLWRNORM 。 例如,要同时监视一个文件描述符是否可读和可写,我们可以设置events 为POLLIN | POLLOUT。在poll 返回时,我们可以检查revents 中的标志,对应于文件描述符请求的events 结构体。如果POLLIN 事件被设置,则文件描述符可以被读取而不阻塞。如果POLLOUT 被设置,则文件描述符可以写入而不导致阻塞。这些标志并不是互斥的:它们可能被同时设置,表示这个文件描述符的读取和写入操作都会正常返回而不阻塞。 timeout 参数指定等待的毫秒数,无论I/O是否准备好,poll 都会返回。timeout 指定为负数值表示无限超时;timeout 为0指示poll 调用立即返回并列出准备好I/O的文件描述符,但并不等待其它的事件。这种情况下,poll()就像它的名字那样,一旦选举出来,立即返回。 返回值和错误代码 成功时,poll()返回结构体中revents 域不为0的文件描述符个数;如果在超时前没有任何事件发生,poll()返回0;失败时,poll()返回-1,并设置errno 为下列值之一: EBADF 一个或多个结构体中指定的文件描述符无效。 EFAULT fds 指针指向的地址超出进程的地址空间。 EINTR 请求的事件之前产生一个信号,调用可以重新发起。 EINVAL nfds 参数超出PLIMIT_NOFILE值。 ENOMEM 可用内存不足,无法完成请求。 poll 的服务器模型伪码: struct pollfd fds[POLL_LEN]; unsigned int nfds=0; fds[0].fd=server_sockfd; fds[0].events =POLLIN|POLLPRI; nfds++; while { res=poll(fds,nfds,-1); if(fds[0].revents&(POLLIN|POLLPRI)) {执行accept 并加入fds 中,if(--res<=0)continue} 循环之后的fds="" ,if(fds[i].revents&(pollin|pollerr="" ))="">=0)continue}><=0)continue}>=0)continue}> 注意select 和poll 中res 的检测,可有效减少循环的次数,这也是大量死连接存在时,select 和poll 性能下降厉害的原因。 epoll 模型 epoll 是什么?2.6内核中提高I/O性能的新方法。按照man 手册的说法:是为处理大批量句柄而作了改进的poll 。 要使用epoll 只需要这三个系统调用:epoll_create(2), epoll_ctl(2), epoll_wait(2)。唯一有点麻烦是epoll 有2种工作方式:LT和ET 。 LT(level triggered)是缺省的工作方式,并且同时支持block 和no-block socket. 在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd 进行IO 操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表. ET (edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll 告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致了一个EWOULDBLOCK 错误)。但是请注意,如果一直不对这个fd 作IO 操作(从而导致它再次变成未就绪) ,内核不会发送更多的通知(only once), 不过在TCP 协议中,ET 模式的加速效用仍需要更多的benchmark 确认。 (1)功能介绍 epoll 与select/poll不同的一点是,它是由一组系统调用组成。 int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); epoll 相关系统调用是在Linux 2.5.44开始引入的。该系统调用针对传统的select/poll系统调用的不足,设计上作了很大的改动。select/poll的缺点在于: 1. 每次调用时要重复地从用户态读入参数。 2. 每次调用时要重复地扫描文件描述符。 3. 每次在调用开始时,要把当前进程放入各个文件描述符的等待队列。在调用结束后,又把进程从各个等待队列中删除。 在实际应用中,select/poll监视的文件描述符可能会非常多,如果每次只是返回一小部分,那么,这种情况下select/poll显得不够高效。epoll 的设计思路,是把select/poll单个的操作拆分为1个epoll_create+多个epoll_ctl+一个epoll_wait。此外,内核针对epoll 操作添加了一个文件系统”eventpollfs”,每一个或者多个要监视的文件描述符都有一个对应的eventpollfs 文件系统的inode 节点,主要信息保存在eventpoll 结构体中。而被监视的文件的重要信息则保存在epitem 结构体中。所以他们是一对多的关系。由于在执行epoll_create和epoll_ctrl时,已经把用户态的信息保存到内核态了,所以之后即使反复地调用epoll_wait,也不会重复地拷贝参数,扫描文件描述符,反复地把当前进程放入/放出等待队列。这样就避免了以上的三个缺点。接下去看看它们的实现: struct ep_pqueue { poll_table pt; struct epitem *epi; }; (2) 关键结构体 这个结构体类似于select/poll中的struct poll_wqueues。由于epoll 需要在内核态保存大量信息,所以光光一个回调函数指针已经不能满足要求,所以在这里引入了一个新的结构体struct epitem。 struct epitem { struct rb_node rbn; // 红黑树,用来保存eventpoll struct list_head rdllink; // 双向链表,用来保存已经完成的eventpoll struct epoll_filefd ffd; // 这个结构体对应的被监听的文件描述符信息 int nwait; // poll操作中事件的个数 // 双向链表,保存着被监视文件的等待队列,功能类似于select/poll中的poll_table struct list_head pwqlist; struct eventpoll *ep; // 指向eventpoll ,多个epitem 对应一个eventpoll struct epoll_event event; // 记录发生的事件和对应的fd atomic_t usecnt; // 引用计数 // 双向链表,用来链接被监视的文件描述符对应的struct file 。因为file 里有f_ep_link, // 用来保存所有监视这个文件的epoll 节点 struct list_head fllink; struct list_head txlink; // 双向链表,用来保存传输队列 unsigned int revents; // 文件描述符的状态,在收集和传输时用来锁住空的事件集合 }; 该结构体用来保存与epoll 节点关联的多个文件描述符,保存的方式是使用红黑树实现的hash 表。至于为什么要保存,下文有详细解释。它与被监听的文件描述符一一对应。 view plain struct eventpoll { rwlock_t lock; // 读写锁 struct rw_semaphore sem; // 读写信号量 wait_queue_head_t wq; // Wait queue used by sys_epoll_wait() wait_queue_head_t poll_wait; // Wait queue used by file->poll() struct list_head rdllist; // 已经完成的操作事件的队列。 struct rb_root rbr; // 保存epoll 监视的文件描述符 }; 这个结构体保存了epoll 文件描述符的扩展信息,它被保存在file 结构体的private_data中。它与epoll 文件节点一一对应。通常一个epoll 文件节点对应多个被监视的文件描述符。所以一个eventpoll 结构体会对应多个epitem 结构体。那么,epoll 中的等待事件放在哪里呢?见下面 // Wait structure used by the poll hooks struct eppoll_entry { struct list_head llink; // List header used to link this structure to the "struct epitem" void *base; // The "base" pointer is set to the container "struct epitem" wait_queue_t wait; // Wait queue item that will be linked to the target file wait queue head. wait_queue_head_t *whead; // The wait queue head that linked the "wait" wait queue item }; 与select/poll的struct poll_table_entry相比,epoll 的表示等待队列节点的结构体只是稍有不同,与struct poll_table_entry比较一下。 struct poll_table_entry { struct file * filp; wait_queue_t wait; wait_queue_head_t * wait_address; }; 由于epitem 对应一个被监视的文件,所以通过base 可以方便地得到被监视的文件信息。又因为一个文件可能有多个事件发生,所以用llink 链接这些事件。 (3)epoll_create的实现 epoll_create()的功能是创建一个eventpollfs 文件系统的inode 节点。具体由ep_getfd()完成。ep_getfd()先调用ep_eventpoll_inode()创建一个inode 节 点,然后调用d_alloc()为inode 分配一个dentry 。最后把file,dentry,inode 三者关联起来。在执行了ep_getfd()之后,它又调用了ep_file_init(),分配了eventpoll 结构体,并把eventpoll 的指针赋给file 结构体,这样eventpoll 就与file 结构体关联起来了。 需要注意的是epoll_create()的参数size 实际上只是起参考作用,只要它不小于等于0,就并不限制这个epoll inode关联的文件描述符数量。 (4)epoll_ctl的实现 epoll_ctl的功能是实现一系列操作,如把文件与eventpollfs 文件系统的inode 节点关联起来。这里要介绍一下eventpoll 结构体,它保存在file->f_private中,记录了eventpollfs 文件系统的inode 节点的重要信息,其中成员rbr 保存了该epoll 文件节点监视的所有文件描述符。组织的方式是一棵红黑树,这种结构体在查找节点时非常高效。首先它调用ep_find()从eventpoll 中的红黑树获得epitem 结构体。然后根据op 参数的不同而选择不同的操作。如果op 为 EPOLL_CTL_ADD,那么正常情况下epitem 是不可能在eventpoll 的红黑树中找到的,所以调用ep_insert创建一个epitem 结构体并插入到对应的红黑树中。 ep_insert()首先分配一个epitem 对象,对它初始化后,把它放入对应的红黑树。此外,这个函数还要作一个操作,就是把当前进程放入对应文件操作的等待队列。这一步是由下面的代码完成的。 init_poll_funcptr(&epq.pt, ep_ptable_queue_proc); 。。。 revents = tfile->f_op->poll(tfile, &epq.pt); 函数先调用init_poll_funcptr注册了一个回调函数 ep_ptable_queue_proc,这个函数会在调用f_op->poll时被执行。该函数分配一个epoll 等待队列结点eppoll_entry:一方面把它挂到文件操作的等待队列中,另一方面把它挂到 epitem 的队列中。此外,它还注册了一个等待队列的回调函数ep_poll_callback。当文件操作完成,唤醒当前进程之前,会调用ep_poll_callback(),把eventpoll 放到epitem 的完成队列中,并唤醒等待进程。 如果在执行f_op->poll以后,发现被监视的文件操作已经完成了,那么把它放在完成队列中了,并立即把等待操作的那些进程唤醒。 (5)epoll_wait的实现 epoll_wait的工作是等待文件操作完成并返回。 它的主体是ep_poll(),该函数在for 循环中检查epitem 中有没有已经完成的事件,有的话就把结果返回。没有的话调用schedule_timeout()进入休眠,直到进程被再度唤醒或者超时。 (6)性能分析 epoll 机制是针对select/poll的缺陷设计的。通过新引入的eventpollfs 文件系统,epoll 把参数拷贝到内核态,在每次轮询时不会重复拷贝。通过把操作拆分为epoll_create,epoll_ctl,epoll_wait,避免了重复地遍历要监视的文件描述符。此外,由于调用epoll 的进程被唤醒后,只要直接从epitem 的完成队列中找出完成的事件,找出完成事件的复杂度由O(N)降到了O(1)。但是epoll 的性能提高是有前提的,那就是监视的文件描述符非常多,而且每次完成操作的文件非常少。所以,epoll 能否显著提高效率,取决于实际的应用场景。这方面需要进一步测试。 (7)epoll 的例子 以下代码由chinaunix.net 上BBS 用户 safedead(http://bbs.chinaunix.net/viewpro.php?uid=407631)提供: static int s_epfd;//epoll描述字 { //初始化epoll struct epoll_event ev; //设置epoll s_epfd = epoll_create(65535); {//这个过程可以循环以便加入多个LISTEN 套接字进入epoll 事件集合 //服务器监听创建 rc = listen();//listen参数这里省略 //加入epoll 事件集合 ev.events = EPOLLIN; ev.data.fd = rc; if (epoll_ctl(s_epfd, EPOLL_CTL_ADD, rc, &ev) < 0)=""> fprintf(stderr, "epoll set insertion error: fd=%d", rc); return(-1); } } } {//epoll事件处理 int i, nfds, sock_new; struct epoll_event events[16384]; for( ; ; ) { //等待epoll 事件 nfds = epoll_wait(s_epfd, events, 16384, -1); //处理epoll 事件 for(i = 0; i < nfds;="" i++)=""> //events[i].data.fd是epoll 事件中弹出的套接字 //接收连接 sock_new = accept(events[i].data.fd);//accept其它参数这里省略了 if(0 > sock_new) { fprintf(stderr, "接收客户端连接失败\n"); continue; } } } } epoll 的优点: 1. 支持一个进程打开大数目的socket 描述符(FD) select 最不能忍受的是一个进程所打开的FD 是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM 服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的 Apache 方案) ,不过虽然linux 上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。不过 epoll则没有这个限制,它所支持的FD 上限是最大可以打开文件的数目,这个数字一般远大于2048, 举个例子, 在1GB 内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看, 一般来说这个数目和系统内存关系很大。 2.IO 效率不随FD 数目增加而线性下降 传统的select/poll另一个致命弱点就是当你拥有一个很大的socket 集合,不过由于网络延时,任一时间只有部分的socket 是" 活跃" 的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll 不存在这个问题,它只会对" 活跃" 的socket 进行操作---这是因为在内核实现中epoll 是根据每个fd 上面的callback 函数实现的。那么,只有" 活跃" 的socket 才会主动的去调用 callback函数,其他idle 状态socket 则不会,在这点上,epoll 实现了一个" 伪"AIO ,因为这时候推动力在os 内核。在一些 benchmark中,如 果所有的socket 基本上都是活跃的---比如一个高速LAN 环境,epoll 并不比select/poll有什么效率,相反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idle connections模拟WAN 环境,epoll 的效率就远在select/poll之上了。 3. 使用mmap 加速内核与用户空间的消息传递。 这点实际上涉及到epoll 的具体实现了。无论是select,poll 还是epoll 都需要内核把FD 消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll 是通过内核于用户空间mmap 同一块内存实现的。而如果你想我一样从2.5内核就关注epoll 的话,一定不会忘记手工 mmap这一步的。 port 模型 port 则和epoll 非常接近,不需要前后的两次扫描,直接返回有事件的结果,可以象epoll 一样绑定指针,不同点是 (1)epoll 可以返回多个事件,而port 一次只返回一个(port_getn可以返回多个,但是在不到指定的n 值时,等待直到达到n 个) (2)port 返回的结果会自动port_dissociate,如果要再次监控,需要重新port_associate 这个就不多说了。 可以看出select-->poll-->epoll/port的演化路线: (1)从readset 、writeset 等分离到 将读写事件集中到统一的结构 (2)从阻塞操作前后的两次循环 到 之后的一次循环 到精确返回有事件发生的fd (3)从只能绑定fd 信息,到可以绑定指针结构信息 在以前我没有接触过多路复用这些东西,只是有这个概念,也没有具体的理解和学习过,上面的一些东西也是看一些书和网上找的。通过这次的学习,对复用和复用在socket 中的应用有了更新的认识和理解。也为以后进一步的应用与开发打开了一定的思路,也提供了又一种途径。 还有很多其他的复用技术,我就没有具体去了解了。在这里就介绍如上的几种,以供我们今后应用 E1时分复用设备在组网中的应用 摘要:文章主要对时分多路复用器、交叉连接复用设备组成及功能做简单介绍,并对时分多路复用器及交叉连接复用设备在组网中的典型应用举例说明。 关键词:时分多路复用技术 时分多路复用器 交叉连接复用设备 路由器 时隙 一、 E1信道时分多路复用技术 在我国,不论是准同步数字体系(PDH)还是同步数字体系(SDH),都是以2.048Mb/s(E1)为基础群,随着我国国家信息基础设施建设的发展,我国已经拥有了丰富的E1信道资源。随着各种通信业务的迅猛发展,对传输不同速率特别是高速数据的需求日益增多;同时,不同的网络用户又需要在同一条广域网络链路上同时传输数据、会议电视、语音、传真等业务。 )具有节约现有通信资源的意识,提高E1信道的利用这些需求要求我们考虑一下因素:(1 率;(2)采用先进的网络技术,使集数据、会议电视、语音、传真和远程局域网通信于一体的集成业务数据网,在相对廉价的广域网数据链路上实现;(3)在PCM传输电路上方便、经济地实现N×64kbps如768kbps、384kbps或128、64kbps等高速数据的传输;(4)在现有网络建设基础上,发展低速数据用户(多个低速数据用户共用一个64kbps时隙)时,使用高性能/价格比的专用设备,将节约大量资金。多业务时分多路复用技术(TDM)是您解决这类应用的解决方案。 在E1信道中,8bit组成一个时隙(TS),由32个时隙组成了一个帧(F),16个帧组成一个复帧(MF)。在一个帧中,TS0主要用于传送帧定位信号(FAS)、CRC-4(循环冗余校验)和对端告警指示,TS16主要传送随路信令(CAS)、复帧定位信号和复帧对端告警指示,TS1至TS15和TS17至TS31共30个时隙传送话音或数据等信息。我们称TS1至TS15和TS17至TS31为“净荷”,TS0和TS16为“开销”。如果采用带外公共信道信令(CCS),TS16就失去了传送信令的用途,该时隙也可用来传送信息信号,这时帧结构的净荷为TS1至TS31,开销只有TS0了。 数据复用技术可分为三种:(1)N×64kbps高速数据的复用,对于常用的N×64kbps(CAS时N=1至30;CCS时N=1至31),如64、128、192、256、384、512、768、1024kbps等的高速数据,可以使其占用E1电路中的N个时隙,很方便地复用到E1线路上去。(2)低速同步数据的复用,对于19.2kbps、9.6kbps、4.8kbps和2.4kbps同步数据,广泛采用 ITU X.50建议将它们复用到64kbps时隙上。为了与PCM时隙一致,采用(6+2)的包封格式,每一包封中含有1个帧比特、6个数据比特和1个状态比特,总共8比特(见图一)。可见,在这 1 8bit包封中净荷为6比特,开销占2比特。由于数据通信中一个字节含有8比特,为了有效的传输8比特字节,X.50中又规定了由4个(6+2)包封结合成的包封组,这样一个包封组就可以完整地传输3个字节(见图二)(3)异步低速数据的复用,最简单的方法是取样法,将起止式异步数据或其他字符结构的数据复用到更高速率的同步信道上去。将它们变换为与复用信道相同步的等时信号。我们可以用9600bps定时对2400bps的异步数据进行取样,变成9600bps的等时信号,然后再经X.50复用器复用到64kbps时隙上去。也可以将19.2kbps的异步数据用64kbps定时取样,形成64kbps的等时信号,再复用到E1信道上去。 F D D D D D D S F:帧比特 D:数据比特 S:状态比特 图 一 (6+2)包封格式 8bit包封B 8bit包封A F P1 P2 P3 P4 P5 P6 SA 8bit包封B F P7 P8 Q1 Q2 Q3 Q4 SB 8 bit包封C F Q5 Q6 Q7 Q8 R1 R2 SC 8bit包封D F R3 R4 R5 R6 R7 R8 SD , 包封组内含P、Q、R三个字节 SA、SB、SC传送呼叫控制信息 SD提供包封组的成帧信息 图 二 8bit包封组 二、几种常用的时分复用设备 时分复用设备有台式设备和模块化设备之分,以CTC公司设备为例,常用的台式设备有ETU-01、ETU02-MUX、ETU03-MUX、ETU-DXC,常用的模块化设备有ERM-MUX/PLUS(时分多路交叉复用器)、ERM-MUX/D(交叉连接复用设备)、ERM-MUX(模块化时分多路复用器)。台式设备的接口数是固定的,一般用在复接设备数量较少的情况下,其应用灵活配置方便,通过DIP拨动开关或液晶菜单及可完成设备的配置,而模块化设备可以根据用户的需求来确定模块的种类、数量以及是否需要扩充机框。 下面对常用的几种设备做简单描述: ETU01是单端口接入设备,用于E1(非成帧)或FE1(成帧)线路的接入转换, 支持用户的数据速率为N×56或N×64Kbps,最高达2.048Mbps,在铜轴电缆或双绞线上的传输时允许最高43dB的衰减,传输距离达2km/22AWG。ETU01可在用户数据和E1信道的任意时 2 隙间做转换,不用的时隙可插入空闲码或接收到的相同时隙数据(用于级连模式)。ETU01有多种用户可更换的数据接口模块,包括:V.35,X.21,RS-530,RS-449,RS-232等。 ETU02-MUX系列是将1至4个64,2048kb/s用户信道和1个子E1信道复用到E1电路上去的高速多业务、多速率、多功能、可灵活组网的时分多路复用器。主E1和子E1(SUB E1)两种E1链路。可方便地分出和插入时隙,灵活地组网或与PBX等E1设备连接,利用PBX之间E1的空闲时隙传输网管、计费、监控等数据。 ETU03-MUX时分多路复用器是一款体积小、密度高、多端口、多速率、多功能的时分 2路多路复用设备,将E1复用和X.50复用技术结合在一起,最多将2路N×64kb/s、64/128kb/s同步数据和10路2.4,19.2kb/s同/异步数据复用到E1(2.048Mb/s)信道上, /异步数据复用到一条或两条64K(或一条128kb/s)信道上。是或将多路2.4,19.2Kb/s同 一种经济、高效和便利的综合数据接入产品。 ERM-MUX时分多路复用器是将N×64kb/s、64/128kb/s、2.4,19.2kb/s同步/异步数据,?19.2kb/s非等时数据等信号复用到2.048Mb/s E1信道上去的多业务、多速率时分多路复用器。它最大限度地利用现有E1信道带宽, 可以综合数据、话音、传真、图像、局域网等不同类型的业务 ,综合低、中、高各种速率。其具有18个槽位,可插入两块热备电源模块、一块中心CPU模块、两块E1模块、10块I/0模块。用户可以根据需要选取不同的E1模块及I/O模块,如果需要更多的数据端口,可选用扩展机箱。 ERM-MUX/D是一种中小型的数字交叉连接设备,它可以在64路或少于64路的E1电路之间实现N×64K的无阻塞全透明交叉连接,也可以直接接入用户设备进行数据复用,它可以独立灵活的实现DDN网的主要功能,可以实现本地数据用户之间的交叉连接,不占用E1电路资源 ,可向用户提供最多10个槽位进行各种方式的数据复用。 ERM-MUX/PLUS时分多路交叉复用器将复用及交叉功能集与一体,使用时会具有更多的灵活性及适应性。ERM-MUX/PLU最多可以配备四个独立的E1信道,全面符合ITU的有关建议。同时具有数据/话音/随路信令的复用功能和交叉功能。多业务多速率时分多路复用功能可以将N×64kb/s、64/128kb/s、9.6kb/s同步数据、?38.4kb/s异步数据、以太网数据、G703-64K数据和话音/信令业务等信号复用到2.048Mb/s E1信道上去。本设备的交叉功能可以实现四路E1电路之间的任一时隙的交叉连接,以及电话随路信令的交叉功能。用户数据和话音/信令接口卡的种类和数量可根据用户需要灵活选用,对于各种话音/信令线路复用的容量可以达到60路。 3 三 组网中的典型应用 应用一:接口转换及成帧。 现场一端设备为北电多业务平台,提供V.35接口,带宽为512Kbit/s, 另一端设备为华为Quidway 2620路由器,接口卡为可拆分时隙的一端口CE1/PRI模块(1E1,使用其CE1功能),两设备需要连接。对于这种情况,可使用ETU-01,将北电多业务平台上的信号转换成 北 V.35接口 G.703接口 电 ETU-01 华为2620 多 业 V.35电缆 同轴电缆 务 平 台 图 三 成帧信号,通过ETU-01内的拨动开关将TS1-TS8设为可用时隙,除TS0做为同步外,余下时隙传送空闲码,同时将华为2620路由器上的1E1模块配置为CE1方式,将TS1-TS8捆绑成为一条子通道,完成相应的配置后通线缆将所有设备连接。组网见图三。 应用二:多个高速数据共用一条E1信道 E1信道可以是PCM的一次群,也可以是市话专线。在市话专线上大约可传输1.5,2.0km(0.5mm)。ETU02-MUX系列设备最适于这样的应用,如果需要接入小型电话交换机(PBX),可使用其E1子链路功能完成接入。在E1电路中分出384kbps或768kbps传输会议电视;分出所需的N×64kbps高速通道将局域网或高速数据终端远距离与主机通信,还可以在局域网间通信(局域网接入采用10BaseT接口);也可以通过子E1(时隙0和16,加上部分载荷时隙)将电话小交换机连接起来。ETU02-MUX支持RS-232、V.35、X.21、RS-530、RS-449/V.36、G.703同向64K、10/100BaseT接口用户可以根据需要选取合适的接口。组网见图四。 应用三:各种速率数据和话音共用一条E1信道 时分多路复用器ERM-MUX最适于这种应用。被复用的除了上面所述的各种高速业务外,还可以是中速(64/128kbps)和低速(9.6/19.2kbps)低速数据。使E1信道得到充分利用,实现多业务多速率通信。ERM-MUX为模块化结构,除电源、CPU板等基本配置外用户可以根据需要配置相应的模块。组网图见图五 4 E1信道 ETU02-MUX ETU02-MUX E1子信道 E1子信道 会议 局主高速 局会议 P P 电视 域机 数据 域电视 B B Video Video 网 Host 终端 网 X X A A 图 四 E1信道 ERM-MUX ERM-MUX E1子信道 E1子信道 H 路由器A P 监 路由器B P 视 电 B 视 O C 频 话 X 器 S 终终局域网A 局域网B T 端 端 图 五 应用四:时隙交叉连接复用设备的应用,ERM-MUX/D可以作为一个中心局的交叉连接设备,实现64个E1时隙间的任意交叉连接。组网见图六。 E1(1) E1(33) E1(2) E1(34) ERM-MUX/D E1(32) E1(64) SNMP 网管终端 图 六 5 应用五:综合应用。 下面的应用组网图将时分复用设备以及交叉连接设备在实际应用中的连接方案反映出来,读者可以作为参考。 甲 地 数据端口 数据端口 …... …... SNMP ERM-MUX PBX Router ETU03-MUX 网管终端 E1 E1 E1 N × 64 K ERM-MUX/D …... E1网络 乙 地 ERM-MUX PBX Router ETU03-MUX …... …... 数据端口 数据端口 图 七 四 小结 以上对E1时分复用技术、E1时分复用设备以及E1时分设备在组网中的应用做了简单介绍,时分复用设备在实际应用中十分广泛,加强对其的了解可使我们的组网更加灵活实用。本人对这方面的技术了解粗浅,文中不足希望读者指正。 6 在通信系统中,降低传输设备的造价和充分利用频率资源是很重要的问题。多路复用技术和多址技术正是针对上述问题而提出的。 一、多路复用技术 多路复用技术是使各路信息共用一个传输信道的技术。它使两个通信站之间利用一个信道同时传送多路信息而互不干扰,充分利用了信道容量,使单路信息传输成本大大降低。常用的多路复用技术是频分多路复用(FDM)和时分多路复用(TDM)。多路复用技术既可用于有线通信,又 吴树祥可用于无线通信。 1.频分多路复用 频分多路复用是各路信号分别占用信道的不同频率范围,图1是频分多路复用系统原理示意图。在发送端,每路信号mi(t)选一个副载波fi,用mi(t)对fi进行调制,可用任何一种调制方式,产生的信号再综合成一个复合信号mc(t),见图1(a)。应适当选择fi,使各路信号频谱互不重叠。只要复合信号总带宽小于 信道带宽,则复合信号就可在 该信道传送。复合信号还可进一步调制而迁移到其他频段,也可以复合信号为基群,与其他类似的复合信号再次进行多路组合,实行多次复用。在接收端,复合信号经过n个带通滤波器,每个带通滤波器中心频率为fi。这样,信号被分解、解调,恢复为原调制信号,见图1(b)所示。 频分多路复用技术是比较传统的技术,在载波电话、微波接力及卫星通信中已得到了广泛的应用。 2.时分多路复用 在时分多路传输系统中, 图1(b) 图1(a) 各路信号在不同的时刻传输,传输的是每一路信号的抽样值(或其抽样的编码),传输系统原理图如图2所示。在发送端,扫描开关轮流接通各路信号,形成脉冲数据流mc(t),只要开关的转换频率高于信号中最高频率的两倍,就能无失真地传输各路信号。在接收端,同样有一个扫描开关将收到的脉冲数据流依次分配叫,然后保持的呼叫可以恢复或进入三方通话状态。 6.多方通话该项业务仅适用于电话。它最多可使六个移动用户同时通话。 7.计费通知系统可向主叫或被叫用户提供实时计费信息。在呼叫建立时向移动台提供有关费率使其显示出来。也可在通信结束时提供给用户一个简要的费用帐单。 8.呼叫线路识别显示或限制该项业务能使用户移动台显示出呼入的来话号码或移动机号码。而限制功能则使系统所连的用户不能显示出对方电话号码或移动机号。 9.闭合用户群此时,将系统内的一组用户的通信限制在组内用户之间。如一个公司内的若干台移动机彼此间可互相通信,而他们与外界的通信则被限制。 总之,数字移动设备比起模拟网设备来讲,将向用户提供越来越多、越完善的通信业务。 另一个电话号码之上。这种转移又可有下列几种情 况:移动台遇忙时转移;在一定时间内移动台无应答转移;移动台没有在网络中登记转移以及无条件转移。 2.呼出限制用户可以从移动台(手机或车台)上启用或关闭此项业务。有以下3种限制情况:限制所有的呼出;限制国际呼出;限制所有的长途呼出,但除了母局所在的公共移动网。 3.呼入限制此项功能使用户阻止呼入信号,以节省不必要的话费(移动电话是双向计费的)。它可分为两种情况:阻止所有的呼入;当漫游到归属局以外的地区时阻止呼入信号。 4.呼叫等待当用户已经建立呼叫时,对于新进入的呼叫给用户一个提示,用户可以接受、拒绝或不理睬等待的呼叫。 5.呼叫保持当用户已接受并建立了一个呼叫时,可使其暂时中断去做其他工作,如接受后一个呼 给相应的各个通路。很明显,收、发端的扫描开关必须保持同步,因此还需发送同步信号。 典型的时分多路复用设备是电话自动交换网数字中继线中采用的脉冲编码调制(PCM)系统。我国采用的是30燉32路PCM系统,每帧有32个时隙,其中第0时隙传送同步信息;第16时隙传送标志信号;第1-15和第17-31共30个时隙传送30路话音信号。 上海等少数城市开通了TDMA电路。 频分多址和时分多址技术与频分多路和时分多路很相似。但多址技术是多个通信站的射频信号在射频信道中的复用,以达到多个通信站间多边通信的目的,而多路复用是一个通信站的多路群信号在中频信道上的复用,以达到两个站间的双边多路通信的目的。 3.码分多址 码分多址是不同地址的用户占用相同频率和同一时间段,但各带有不同的伪随机码(PN码),即以伪随码来区分不同的信道。码分多址是以扩频通信为基础的,扩频通信系统基本结构如图3所示。数字信息经信息调制(PSK或FSK等),形成已调数字信号,然后由PN码发生器产生的PN码去调制数字信号,使其频谱展宽后再发送。接收端收到信号后,首先通过同步电路捕捉发送来的PN码准确相位,由此产生与发 图2(b) 二、多址技术 多址技术是指在通信网内处于不同位置的多对用户同时进行通信的技术。多址技术要研究的问题是如何区分多个信道,使各信道间互不干扰。目前已实用的多址技术主要有频分多址(FDMA)、时分多址(TDMA)和码分多址(CDMA)。1.频分多址 在频分多址中,不同地址用户占用不同的频率,即采用不同的载波频率,通过滤波器选取信号并抑制无用干扰,各信道在时间上可同时使用。频分多址技术比较成熟,第一代蜂窝式移动电话系统采用的就是FDMA技术。目前我国运行的模拟蜂窝式移动电话系统均使用频分多址技术。 2.时分多址 时分多址是不同地址的用户占用同一频带和同一载波,但占用的时间不同,即从时间上区分各个信道。同一载频可供若干用户
范文二:时分多路复用技术
范文三:多路复用技术与多址技术