网络协议
TCP/IP (网络控制协议和网际协议)
OSI 与 UNIX系统中协议的对应关系图,及不同网络在OSI中的位置 OSI 开放式系统互联参考
模型 应表用示层层Network 网络文件系统(NFS) UNIX系统
(Application) (Presentation) 会话层 (Session) SNMP FTP SMTP Telnet.. UDP ------> 传输层(Transport) ------> TCP ------> 网络层(Network) ------> ------> 数据链路层(Data Link) IP ARP ICMP,IGMP,RIP LAN驱动器 在多个网卡驱动程序间交换 LLC -----------------------IEEE802.3 IEEE802.5 FDDI介质访问控制 MAC WinNT(NDIS) Ethernet Token ring DMACSMA/CD(载波侦听/多路访问) MAC MAC 物理层 物理层(Physical)
链接 TCP/IP基础
普通网卡的MAC层接口
802.3 MAC引擎(Engine) 网卡内部总线
译码器/解码器10/100 Base-T网络 &
<========> <====> (Encoder/decoder) <========> AUI
& PLL ||
LED逻辑显示
收包过程
MAC从译码/解码器接收到来的数据包,首先检查SFD,检查完毕后,MAC认为SFD后面所有的位为帧数据位.读目的地址DA,把它和已变成的地址过滤中地址比较,如果DA通过了地址过滤层,这个帧会被放入网卡的存储空间.在整个整接收完成后,MAC检查FCS的有效性.
以太帧格式(Ethernet Frame Format)
SFD 目的地址DA 源地址SA Length Field 6字节 2字节 LLC Data Pad FCS 4字节 101010... 可多达7字节 1字节 6字节 帧引导头(preamble) <========传输方向 帧的长度约64字节-----1500字节 SFD=Start of Frame Delimite DA=Destination Address SA=Source Address LLC=Logical Link Control
FCS=Frame Check Sequence or Cyclic Redundancy Check(CRC)
SNMP (简单网络管理协议 Simple Network Management Protocol)
SNMP
用来管理网络设备和获得外围设备信息,属于TCP/IP的一部分,具有协议独立性.利用SNMP,
一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。
管理信息库(MIB):
两种类型 MIB-1, MIB-2.MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点(OID)来访问网络中的设备.
MIB 树的每个节点被指定为一个数字(非负数),同一层的节点用不同的数字区分.这些节点数字由标准组织指定.MIB树中的任何一个节点由其所处的位置来命名.因为同一层的节点数字皆不同,到达某个节点的路由可以由从树根到此节点所经过的节点的数字串来表示.这个数字串称为相应MIB对象的对象标识符(OID).
例如, ODI,1.3.6.1.2.1.1 代表的对象是从 命名为“1”的根节点开始,后续的下级节点“3”,再下一级是“6”,依此类推.
管理信息结构标识(SMI): 定义MIB中行的技术规范. SNMP目前有两种版本 SNMP v1 和 SNMP v2.
SNMP协议单元(PDU)实现代理和管理站间的通信,及Server 和 Target的通信. 通信类型
类型 PDU类型 0 1 2 3 4 GetRequest 传输方向 Server--->Target 说明 用来从Target上获得一个或多个SNMP的对象(OID)值 在Target上的MIB中获得下一个SNMP的对象(OID)值 Target响应ServerSNMP对象请求 Server上程序为TargetMIB中的OID赋值 Target用它来通知Server有一个特定时间发生 GetNextRequest Server--->Target GetResponse SetRequest Trap
Target---->Server Server--->Target Target---->Server 目前好的SNMP网络管理软件是惠普公司的 OpenView. BSD套接字(BSD Sockets)
BSD Sockets 使用的最广泛的网络程序编程方法,主要用于应用程序的编写,用于网络上主机与主机之间的相互通信.
UNIX,Linux,VxWorks均支持BSD Sockets,Windows的Winsock基本上是来自BSD Sockets Socket分为Stream Sockets和Data Sockets.
Stream Sockets是可靠性的双向数据传输用TCP,如HTTP,FTP等 Data Sockets是不可靠连接用UDP,如多点广播,DHCP,SNMP,RIP等.
TCP服务器端和一个TCP客户端通信的程序过程
客户机 创建一个Socket sFd (AF_INET, =socket (AF_INET, SOCK_STREAM, 0) 服务器 创建一个Socket sFd =socket SOCK_STREAM, 0) 把Socket和本机的IP,TCP口绑定 bind (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) 为客户连接创建等待队列 listen 注意:客户端不需要绑定,因为TCP口是动态的. (sFd, SERVER_MAX_CONNECTIONS) 向服务器端发送连接请求,并在这里等两个浅蓝色的函待回应,如收到回应则向下执行 这里循环等待,如有客户连接请求,数是两个Socketsconnect (sFd, (struct sockaddr *) 则接受客户机连接要求 的握手函数,即在&serverAddr, sockAddrSize) accept (sFd, (struct sockaddr *) 这里建立连接
&clientAddr, &sockAddrSize)) 接受客户机发来的信息 fioRead (sFd, (char &clientRequest, (clientRequest))) 给客户机发信息 write (sFd, (replyMsg)) close (sFd) *) sizeof 服务器接受连接请求后,读服务器发过来的信息 read(sFd,buffer,20) replyMsg, sizeof 向服务器发信息 write(sFd, buffer, 20); 关闭Sockets close (sFd) 关闭Socket,通信终止
UDP服务器端和一个UDP客户端通信的程序过程
客户机
服务器
创建一个Socket sFd =socket SOCK_DGRAM, 0) (AF_INET, 创建一个Socket sFd =socket SOCK_DGRAM, 0)
注意:客户端不需要绑定,因为UCP口是动态的. (AF_INET, 把Socket和本机的IP,TCP口绑定 bind (sFd, (struct sockaddr *)
&serverAddr, sockAddrSize)
不需要创建等待队列
这里不建立连接,向服务器端发送连接请求和信息,这里这里循环等待,如有客户连接则接只是数据收发 不等待服务器的响应 受,并读取客户发来的信息 sendto (sFd, (caddr_t) &myRequest, recvfrom (sFd, (char *) <----------
sizeof (myRequest), 0, (struct sockaddr *) &clientRequest, sizeof
&serverAddr, sockAddrSize) (clientRequest), 0, (struct sockaddr *) &clientAddr, &sockAddrSize) 关闭Socket,通信终止 关闭Sockets close (sFd) close (sFd) UDP广播包程序示例
发送UDP广播包,查找本地网络中所有运行SNMP服务设备的IP信息。 winsock, win32控制台程序。 #define SNMP_PORT 161 void SearchIP_In_LAN() {
WSADATA wsaData; SOCKET sockListener;
SOCKADDR_IN saUdpCli,saUdpServ; BOOL fBroadcast = TRUE;
char sendBuff[40]= //SNMP查询包内容 {
'\\x30','\\x26','\\x02','\\x01','\\x00', '\\x04','\\x06','\\x70','\\x75','\\x62', '\\x6c','\\x69','\\x63','\\xa0','\\x19', '\\x02','\\x01','\\x03','\\x02','\\x01', '\\x00','\\x02','\\x01','\\x00','\\x30', '\\x0e','\\x30','\\x0c','\\x06','\\x08', '\\x2b','\\x06','\\x01','\\x02','\\x01', '\\x01','\\x01','\\x00','\\x05','\\x00' };
char recvBuff[600]; int nSize,err,timeoutnum = 1;; ULONG HostIpAddr; int rv;
int ncount=0;
if(WSAStartup(MAKEWORD( 2, 2),&wsaData)!=0) {
printf(\"Winsocket start error!\\n\"); return; }
sockListener=socket(AF_INET,SOCK_DGRAM,0); err = setsockopt ( sockListener, SOL_SOCKET, SO_BROADCAST,
(CHAR *)&fBroadcast, sizeof ( BOOL ));
if ( SOCKET_ERROR == err ) return ;
int TimeOut=10000;
err = setsockopt ( sockListener, SOL_SOCKET, SO_RCVTIMEO, (CHAR *) &TimeOut, sizeof (TimeOut)
);
if ( SOCKET_ERROR == err ) return ;
saUdpCli.sin_family = AF_INET; saUdpCli.sin_port = htons(0);
saUdpCli.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind( sockListener, (SOCKADDR *)&saUdpCli, sizeof(SOCKADDR_IN))!=0) {
printf(\"Can't bind socket to local port!Program stop.\\n\"); return; }
err = gethostname(recvBuff,sizeof(recvBuff)); if ( SOCKET_ERROR == err )
return ;
struct hostent *hp = gethostbyname(recvBuff);
if (!hp) return ;
saUdpServ.sin_family = AF_INET;
memcpy(&(saUdpServ.sin_addr),hp->h_addr,hp->h_length); HostIpAddr=ntohl(saUdpServ.sin_addr.s_addr);
saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST ); saUdpServ.sin_port = htons (SNMP_PORT); nSize = sizeof ( SOCKADDR_IN ); if((rv = sendto ( sockListener, sendBuff,
sizeof(sendBuff),0,
(SOCKADDR *) &saUdpServ,
sizeof ( SOCKADDR_IN )))==SOCKET_ERROR) {
printf(\"Send error!\\n\");
closesocket(*((SOCKET*)sockListener)); return; }
printf(\"Send successful!\\n\"); do // waiting to receive {
if((rv=recvfrom ( sockListener, recvBuff,sizeof(recvBuff),0,
(SOCKADDR *) &saUdpCli,&nSize))==SOCKET_ERROR) {
if(WSAGetLastError()==WSAETIMEDOUT) {
if (timeoutnum > 6 ) //Wait for 1 minute. break; else
timeoutnum++; } } else {
CString Ip(inet_ntoa ( saUdpCli.sin_addr )); printf(\"\ IP Adress-> %s \}
}while(TRUE);
closesocket(*((SOCKET*)sockListener)); return ;
}
网络软件设计框图(个人理解,仅供参考)
设备管理服务软件架构
PC端(Windows NT,UNIX,Novell...平台) 管理服务器(HTTP,FTP...Server) 服务器程序 送 | | | v
户 ^ | | |
通信方式:Socket, Namedpipe等 || || || 后台核心程序 处理请求,接收发送数据 SNMP客户 <=============> Internet(HTTP,..协议) 如用户PC缺少相应驱动,服务器会动态为用户PC加载安装 Internet (SNMP协议) <=============>
程序接收用户请求,向下发从下接收处理结果,发送给用
终端PC用户 (IE浏览器...) 网络设备 (嵌入式操作系统) SNMP服务器
信息家电(IA)的架构
网络设备(嵌入式操作系统平台) 嵌入式服务器(Embedded Web Server, HTTP, FTP... ) 服务器程序 <===========> Internet(HTTP,..协议)
终端PC用户 (IE浏览器...)
程序接收用户请求,向下从下接收处理结果,发送给 发送 用户 | ^ | | v | | | 通信方式: Socket, Namedpipe等 || || || 后台核心程序 处理请求,接收发送数据 || 嵌入式系统SNMP接口 || 设备SNMP(MIB)
无线移动通信的架构
基站无线发送接收装置(无线通信协议) 接收端处理软件 <============> 无线通信协议
(Mobitex或DataTAC,..协议)
移动通信设备 (嵌入式操作系统)
程序接收处理数据包头,实从下接收数据包,加上自自己质符合Internet传输的某种无线通信协议的包头,无线发
协议(如X.25),放到Internet 出给用户终端 上
||
||
通信方式:Internet(双向)
X.25,ATM....等协议 || || 网关(GATEWAY) 处理数据包的内容,相关内容读取存放数据库 ||
|| 数据库 || || HTTP协议 对数据库操作,添加,删除,打印... 终端PC(IE浏览器)
因篇幅问题不能全部显示,请点此查看更多更全内容