网络协议及网络软件框架设计
来源:互联网 发布:热水器 类型 知乎 编辑:程序博客网 时间:2024/04/19 18:10
网络协议
- TCP/IP (网络控制协议和网际协议)
OSI 与 UNIX系统中协议的对应关系图,及不同网络在OSI中的位置
------>
------>
------>
------>
Network 网络文件系统(NFS)
表示层(Presentation) 会话层 (Session) SNMP FTP SMTP Telnet.. 传输层(Transport)TCP
UDP
网络层(Network) ICMP,IGMP,RIPIP
ARP
数据链路层(Data Link)LAN驱动器 LLC -----------------------介质访问控制 MAC CSMA/CD(载波侦听/多路访问)
在多个网卡驱动程序间交换 WinNT(NDIS) IEEE802.3 Ethernet MAC IEEE802.5 Token ring MAC FDDI DMAC 网络接口卡驱动器 物理层(Physical) 物理层
链接 TCP/IP基础
- 普通网卡的MAC层接口
802.3 MAC引擎(Engine)
译码器/解码器(Encoder/decoder) & PLL
10/100 Base-T网络 & AUI
||
LED逻辑显示
收包过程
MAC从译码/解码器接收到来的数据包,首先检查SFD,检查完毕后,MAC认为SFD后面所有的位为帧数据位.读目的地址DA,把它和已变成的地址过滤中地址比较,如果DA通过了地址过滤层,这个帧会被放入网卡的存储空间.在整个整接收完成后,MAC检查FCS的有效性.
- 以太帧格式(Ethernet Frame Format)
<========传输方向
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套接字(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客户端通信的程序过程
服务器
客户机
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);
关闭Socketsclose (sFd)
- UDP服务器端和一个UDP客户端通信的程序过程
服务器
客户机
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)
关闭Socketsclose (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("/t IP Adress-> %s ",Ip);
}
}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... )
服务器程序
程序接收用户请求,向下发送
从下接收处理结果,发送给用户
|
|
|
v
^
|
|
|
通信方式: Socket, Namedpipe等
||
||
||
后台核心程序
处理请求,接收发送数据
||
嵌入式系统SNMP接口
||
设备SNMP(MIB)
<===========>
Internet(HTTP,..协议)
终端PC用户
(IE浏览器...)
- 无线移动通信的架构
基站无线发送接收装置(无线通信协议)
接收端处理软件
程序接收处理数据包头,实质符合Internet传输的某种协议(如X.25),放到Internet上 从下接收数据包,加上自自己无线通信协议的包头,无线发出给用户终端||
||
通信方式:Internet(双向)
X.25,ATM....等协议
||
||
网关(GATEWAY)
处理数据包的内容,相关内容读取存放数据库||
||
数据库
||
||
HTTP协议
对数据库操作,添加,删除,打印...
终端PC(IE浏览器)
<============>
无线通信协议
(Mobitex或DataTAC,..协议)
移动通信设备
(嵌入式操作系统)
- 网络协议及网络软件框架设计
- 网络协议及网络软件框架设计
- 网络协议及网络软件框架设计
- 网络协议及网络软件框架设计
- 网络协议及网络软件框架设计网络协议
- swift 面向协议的网络框架设计
- 网络及网络协议
- 网络协议的设计
- 优雅设计封装基于Okhttp3的网络框架(一):Http网络协议与Okhttp3解析
- 网络基础知识及协议
- 网络通信及协议
- 网络及协议篇
- 一起学习ACE及其服务器端网络软件设计
- 一起学习ACE及其服务器端网络软件设计
- 学习笔记之网络软件设计(一)
- 学习笔记之网络软件设计(二)
- 学习笔记之网络软件设计(三)
- iOS网络框架设计
- ASP程序应用之模板采用
- 忘记XP登陆密码怎样登陆?
- 生活有了目标,终于也能看进去书了,happy啊~
- 经典实用的基础asp程序整理
- 新的Google中文输入法 pk Microsoft中文输入法
- 网络协议及网络软件框架设计
- 牛人的好文章
- 项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第一部分
- final在java中的应用
- 项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第二部分
- 项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第三部分
- 如何提高自己的编程水平
- 女人与男人
- Struts的文件下载