|
网络协议
OSI 与 UNIX系统中协议的对应关系图,及不同网络在OSI中的位置
| 应用层(Application) |
------〉
------〉
------〉
------〉
------〉 |
Network 网络文件系统(NFS) |
|
| 表示层(Presentation) |
| 会话层 (Session) |
SNMP |
FTP |
SMTP |
Telnet.. |
| 传输层(Transport) |
TCP |
UDP |
| 网络层(Network) |
IP
|
| 数据链路层(Data Link) |
LAN驱动器 LLC -----------------------介质访问控制 MAC CSMA/CD(载波侦听/多路访问) |
在多个网卡驱动程序间交换 |
| WinNT(NDIS) |
IEEE802.3 Ethernet MAC |
IEEE802.5 Token ring MAC |
FDDI DMAC |
网络接口卡驱动器 |
| 物理层(Physical) |
物理层 |
|
|
|
〈========〉 |
|
〈====〉 |
|
译码器/解码器(Encoder/decoder) & PLL | |
〈========〉 |
|
|
|
|| |
|
|
|
|
|
|
收包过程
MAC从译码/解码器接收到来的数据包,首先检查SFD,检查完毕后,MAC认为SFD后面所有的位为帧数据位.读目的地址DA,把它和已变成的地址过滤中地址比较,如果DA通过了地址过滤层,这个帧会被放入网卡的存储空间.在整个整接收完成后,MAC检查FCS的有效性.
- 以太帧格式(Ethernet Frame Format)
| 101010... |
SFD |
目的地址DA |
源地址SA |
Length Field |
LLC Data |
Pad |
FCS |
| 可多达7字节 |
1字节 |
6字节 |
6字节 |
2字节 |
|
|
4字节 |
| 帧引导头(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 |
GetRequest |
Server---〉Target |
用来从Target上获得一个或多个SNMP的对象(OID)值 |
| 1 |
GetNextRequest |
Server---〉Target |
在Target上的MIB中获得下一个SNMP的对象(OID)值 |
| 2 |
GetResponse |
Target----〉Server |
Target响应ServerSNMP对象请求 |
| 3 |
SetRequest |
Server---〉Target |
Server上程序为TargetMIB中的OID赋值 |
| 4 |
Trap |
Target----〉Server |
Target用它来通知Server有一个特定时间发生 |
目前好的SNMP网络管理软件是惠普公司的 OpenView.
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等.
| 创建一个Socket
sFd =socket (AF_INET, SOCK_STREAM, 0) |
| 把Socket和本机的IP,TCP口绑定
bind (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) |
| 为客户连接创建等待队列
listen (sFd, SERVER_MAX_CONNECTIONS) |
| 这里循环等待,如有客户连接请求,则接受客户机连接要求
accept (sFd, (struct sockaddr *) &clientAddr, &sockAddrSize)) |
| 接受客户机发来的信息
fioRead (sFd, (char *) &clientRequest, sizeof (clientRequest))) |
| 给客户机发信息
write (sFd, replyMsg, sizeof (replyMsg)) |
| 关闭Socket,通信终止
close (sFd)
| |
两个浅蓝色的函数是两个Sockets的握手函数,即在这里建立连接 |
| 创建一个Socket
sFd =socket (AF_INET, SOCK_STREAM, 0) |
| 注意:客户端不需要绑定,因为TCP口是动态的. |
| 向服务器端发送连接请求,并在这里等待回应,如收到回应则向下执行
connect (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) |
| 服务器接受连接请求后,读服务器发过来的信息
read(sFd,buffer,20) |
| 向服务器发信息
write(sFd, buffer, 20); |
| 关闭Sockets
close (sFd) | |
| 创建一个Socket
sFd =socket (AF_INET, SOCK_DGRAM, 0) |
| 把Socket和本机的IP,TCP口绑定
bind (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) |
| 不需要创建等待队列
|
| 这里循环等待,如有客户连接则接受,并读取客户发来的信息
recvfrom (sFd, (char *) &clientRequest, sizeof (clientRequest), 0, (struct sockaddr *) &clientAddr, &sockAddrSize) |
| 关闭Socket,通信终止
close (sFd)
| |
这里不建立连接,只是数据收发
〈----------
|
| 创建一个Socket
sFd =socket (AF_INET, SOCK_DGRAM, 0) |
| 注意:客户端不需要绑定,因为UCP口是动态的. |
| 向服务器端发送连接请求和信息,这里不等待服务器的响应
sendto (sFd, (caddr_t) &myRequest, sizeof (myRequest), 0, (struct sockaddr *) &serverAddr, sockAddrSize) |
| 关闭Sockets
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查询包内容 { '0','&','','','

文章页数:[1] |