Chinaunix首页 | 论坛 | 博客
  • 博客访问: 333729
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 321
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-04 16:09
文章分类

全部博文(124)

文章存档

2014年(124)

分类: 嵌入式

2014-08-13 16:24:46

1、 Select()函数实现I/O多路复用的步骤

 答:

1. 清空描述符集合;

2. 建立需要监视的描述符与描述符集合的联系;

3. 调用select()函数;

4. 检查所有需要监视的描述符,利用FD_ISSET宏判断是否已准备好;

5. 对已准备好的描述符进行I/O操作。

2、I/O复用的应用场合

? 答:“一应两客三服”

? 当客户处理多个描述字(一般是交互式输入和网络套接字),必须使用i/o复用;

? 一个客户同时处理多个套接字是可能的(例如FTP客户程序),但很少出现;

? 如果一个tcp服务器既要处理监听套接字,又要处理连接套接字,一般也可以用i/o复用;(当然可以使用并发技术)

? 如果一个服务器既要处理tcp,又要处理udp,一般也要使用i/o复用;

? 如果一个服务器要处理多个服务或者多个协议,一般要使用i/o复用;

? i/o复用并非只限于网络编程,许多正式应用程序也需要使用这项技术。

3、常用Linux网络命令

1、ping:检测主机连接状况

2、ifconfig:显示当前有效网络接口的状态

3、netstat :显示网络状态。如显示网络连接、路由表和网络接口信息。

4、route:对内核的IP路由表进行操作

5、tcpdump:用于分析网络上的数据流

4、TCP连接的建立

n TCP连接的过程:

n 服务器必须准备好接受外来的连接。通过调用socket, bind, listen函数完成。称为被动打开。

n 客户通过调用connect进行主动打开。这引起客户TCP发送一个SYN分节,告诉服务器客户将在连接中发送的数据的初始序列号。

n 服务器必须确认客户的SYN,同时自己也得发送一个SYN分节。服务器以单个分节向客户发送SYN和对客户的SYN的ACK。

n 客户必须确认服务器的SYN。

TCP连接终止

n TCP一般用四个分节终止一个连接:

n 某个进程首先调用close, 这一端的TCP于是发送一个FIN分节,表示数据发送完毕。主动关闭。

n 另一端称为被动关闭。TCP对接收的FIN分节进行确认,并以文件结束标志传递给应用程序。

n 一段时间后,接收到文件结束标志的应用程序调用close,这也导致向对方发送一个FIN分节。

n 接收到这个FIN分节的原发送方TCP对它进行确认。

 

n  还有一种关闭称为“半关闭”(half-close)

 

 

5、服务器分类

n 按连接类型分类

n 面向连接的服务器(如tcp)

n 面向无连接的服务器(如udp)

n 按处理方式分类

n 迭代服务器

n 并发服务器

6、进程的状态

n 就绪:进程准备运行,但还没有得到CPU。根据调度算法决定将CPU分配给某个进程。

n 运行:进程正在运行(即占用CPU)

n 等待:进程正在等待某个事件的发生,如:输入\输出的完成、子进程的退出、进程睡眠期的结束。

n 被交换:进程准备运行,但可能由于需要更多的内存而当前却没有足够的可用内存,因此被暂时存放在硬盘(交换空间)上。

n 僵死:一个已经终止,但是其父进程尚未对其进行善后处理的进程。

7、互斥锁

        在linux系统中,提供一种基本的进程同步机制—互斥锁,可以用来保护线程代码中共享数据的完整性。

n 操作系统将保证同时只有一个线程能成功完成对一个互斥锁的加锁操作。

n 如果一个线程已经对某一互斥锁进行了加锁,其他线程只有等待该线程完成对这一互斥锁解锁后,才能完成加锁操作。

8、给新线程传递参数

n 由于同一个进程内的所有线程共享内存和变量,因此在传递参数时需作特殊处理,下面参考如下几种方法:

n 传递参数的普通方法

n 通过指针传递参数

n 通过分配arg的空间来传递参数

n 还可以通过加锁等同步设施来实现传递参数;

9调用wait或waitpid函数时,正常情况下,可能会有以下几种情况:

n 阻塞(如果其所有子进程都还在运行);

n 获得子进程的终止状态并立即返回(如果一个子进程已终止,正等待父进程存取其终止状态);

n 出错立即返回(如果它没有任何子进程)

10、Libpcap的工作流程。Page205

1、 查找网络设备(pcap_lookupdev);

2、 获取网络地址及网络掩码(pcap_lookupnet);

3、 打开网络设备(pcap_open_live);

4、 将过滤字符串编译到过滤程序中(pcap_compile);

5、 设置过滤器(pcap_setfilter);

6、 开始捕获包(pcap_dispatch);

 

11、原始套接口创建的步骤。

答:

1、 将Socket函数的第二个参数设置成SOCK_RAW来创建一个原始套接口。

2、 设置IP_HDRINCL套接口选项。

3、 对原始套接口调用bind()和connect()函数。Bind()设置本地地址;connect()设置目的地址。

阅读(1307) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~