windows网络编程技术笔记
layper
写这个笔记是促使我理解网络编程技术。
第一 传统网络API
既然这部分讲述的是传统网络API,传统的网络API接口包括:
1、NetBios:与Winsock都是与协议无关的网络API。提供异步调用,注意这里是异步,网络通信调用可分为异步、同步。同时他兼容了OS/2和Dos,这意味着它与网络编程的低层关系密切。
O/2解释:它是IBM的一个操作系统,已停止开发。
2、重定向器:还不太理解它的意思,从字面理解应该是重新定向的意思,书中简述部分说它是提供与传输无关的文件输入/输出方式,我现在这样理解,重定向器是是一种文件输入/输出方式,它与网络传输无关。后面说它是邮槽和命名管道的基础。
与重定向器有关的邮槽和命名管道的概念,首先从字面理解他们应该是象生活中的通道的意思差不多。只不过邮槽相当于邮局的通道,而命名管道相当于网络信件的通道,呵呵,不知对不对,邮槽提供了一种接口,实现windows机器上的广播与单向数据通信。也就是广播与单向数据通信的接口,先有它才能进行广播与数据通信。而命名管道是提供一种双向信道,通过信道提供对windows安全通信的支持,邮槽与命名管道一个是单向数据通信,属于广播的的接口,一个是双向信道,主要为了支持windows安全的。
重定向器与邮槽、命名管道的关系,重定向器与网络传输无关,而邮槽、命名管道都是与传输有关系,这个说明传统的传输需要重定向,是一种间接的通信。
3、通过重定向器进行的网络通信。
通过这三个方面我们可以对传统的网络有了一个初步的认识,传统的网络提供了一些与协议无关的API,它是一种基于间接的需要重定向的一种网络通信方式。
三个关键词:NetBios-API,与协议无关。
重定向器。
基于重定向器的网络通信-邮槽(广播、单向数据通信)、命名管道(双向基于安全的信道)。
第一章 NetBios
开始的这部分呢,叙述了NetBios的一些知识,NetBios就是“网络基本输入/输出”的简称,如上所述是标准的应用程序编程接口,NetBios与NetBios扩展用户接口(简称为NetBEUI)构成了一种完整的协议,在重要的协议TCP/IP协议和IPX/SPX都应用了它,大多数操作系统都对它进行支持,除windows ce只是用TCP/IP协议做它的传送协议和支持名字、名字解析,不支持NetBios API(也就是仅仅传送它和认可它告诉其他人名字的意思),在这章中我们要从NetBios的名字和LANA开始,也就是先弄明白什么是NetBios的基础知识,LANA的含义以及LANA编号的含义,这章的重点讲述NetBios提供的服务,范例中的客户机和服务器示例,我们必须掌握三个方面的知识,一、NetBios提供的服务;二、每种服务客户机的流程,如何理解它的原理。三、服务器的流程,理解它的原理。最后,是留意常见错误、陷阱。
在OSI网络模型当中NetBios主要应用在会话和传输层,而传输层提供的是数据传输服务(可靠或不可靠),会话层是控制两个主机的通信链路(开放、操作、关闭),这说明NetBios主要有三个功能,第一提供检测数据传输是否可靠函数,第二是提供通信链路的开关函数,第三是提供通信链路的控制函数。
1.1 Micrsoft NetBios
在应用NetBios或NetBios API时,我们首先要注意两点:
一、 NetBios必须建立在一种两个机器都必须安装有同一种协议基础上的,这与前面所说的与“与协议无关”不矛盾,我们可以这样理解,哪种协议都支持NetBios API,但两机之间的NetBios API是有协议支持的,示意如下:
服务器中的Netbios API
服务器的协议
网络传输
客户机的协议
客户机的NetBios API
从这个图中我们就可了解为什么还是需要安装同一类型协议了。
二、 NetBios应用时要充分考虑路由器问题,因为路由器会把NetBios过滤掉,所以在应用NetBios API时注意是否会给路由过滤掉,假如希望通过路由器,就应该在可通过路由的协议上编程。
1.1.1 LANA编号
这一节讲得不是很明白,说了半天我还是不明白LANA到底是什么,我上网找一下资料,有这样的解释:
LANA,既是lan adapter,中文意思就是“局域网适配器”,是用来区分网络协议和接口的,那LANNA编号就是“局域网适配器编号”,每个LANA编号对应着网卡和传输协议的唯一组合,呵呵,从LANA编号我们就可以看出机子所安装的协议和网卡数。
在LANA编号中我们要了解这几个方面的知识,首先LANA编号0就是默认的LANA,我们可以在机器上自行设定默认的协定。其二要注意的是我们设计程序时一定要对任何LANA进行监控。
1.1.2 NetBios名字
一、 NetBios名字长度为16个字符。其中第16个是为特殊用途。对于每个LANA编号,每个进程(注意是每个进程)NetBios都会维护一张NetBios名字表(注意是名字表),这就意味着同一的所有个协议每个进程都会有一个NetBios名字表。对于每个LANA能够添加的名字最多是254个,编号从1到254(0和255系统保留)。在名字表中添加名字是,应当将名字缓冲区初始成空白。
二、 唯一名字。
1、 网络中的唯一名字。假如有重复就会报错。
2、 微软的机器名就是NetBios名字。机器启动时,把名字注册到”windows互连网命名服务器”,也就是WINDS,WINDS维护着一个名字列表和协议的一些特有信息。假如未为其分配一个WINDS,就要向网络发出一条特定的“广播消息”,如果无回应就表示可以用这个名字注册。
三、 组名。
1、 组名不是唯一名字,从字面上理解就是一个组的名字,也就是说,组名不是唯一的名字,他与唯一名字是相对的。
组名主要应用于一组多播技术,将数据同时发给多个接收者,我的理解就是同组间接收或异组间接收。
四、 深入理解NetBios名字
1、 Nbtstat命令查看本地或远程计算机已注册的NetBios名字有关的信息。
2、 名字第16个字节标识符。
在《windows网络编程技术》中,列出列以下几个字节,
00,03,06,1B,1C,1D,1E,1F,20,21,BE,BF,_MSBROWSE_这几个字节。
经过观察唯一名字标识符,我们可以发现它提供了我们上网时一些经常可以看到或用到的服务,我们可以把它看做标识我们名字的功能一样(这个只是大概的看作)。
再观察组名标识符,它好象我们标识组名的规则一样。这个是我们初学者教少接触的。它们主要与WINS和浏览器有联系的。
1C的关键此有四个:刷新、静态、联合、25。
1D是为客户机指定主控浏览器名字,让客户机访问主控浏览器。WINS在此也发挥作用,WINS发挥作用。用“正”“负”来表示是注册域名还是查询域名。注册时做“正”响应,但不保存域名到数据库;查询时做“负”的响应。在查询中,假如查询的计算机被配置为h节点或m节点,在广播那个查询之后,根据节点的类型解析出正确的名字。
1E跟浏览器有关,浏览器可向它发送广播数据,对它监听来挑选一个主控浏览器。注意,它是面向本地子网,而不是路由器。
20是关于Internet组名,是管理特定的计算机组用的。
_MSBROWSE_增加在域名后面,WINS在本地子网广播,向其他主控浏览器通告这个新增的域。
1.1.3 NetBios特性
NetBios同时提供“面向连接”和“无连接”服务。
这节主要理解什么是面向连接和无连接。
1面向连接或面向会话: