zoukankan      html  css  js  c++  java
  • NetBIOS与Winsock编程接口

      最近在看网络编程方面的书,由于不是通信专业出身的,以前理解的网络体系感觉就是tcp/ip,最近工作上接触到了一些光环网等乱七八糟的东西,有些基本的LCSC连接器都不认识。花时间看了下计算机网络体系结构的知识,从ARPRANET开始计算机网络的实现方式可以分为资源子网和通信子网。如下图:

       资源子网主要由网络的服务器、工作站、共享的打印机和其他设备及相关软件所组成。通信子网:是指网络中实现网络通信功能的设备及其软件的集合,包括原始的信号中继器、集线器,网桥、交换机、路由器网关等设备。ARPNET出来之后,网络体系飞速发展,后来国际标准化组织为了防止各家公司单位各自成体系,征询了多家公司的意见之后,制定了一个网络参考模型(OSI/RMOpen System Interconnection Reference Model,注意是个model,而非标准)用来作为网络体系的参考。之后的大部分网络体系包括IEEE802.1局域网体系,TCP/IP协议体系,以及WLAN标准的IEEE802.11均参考OSI体系架构设计。

       说白了,网络体系中的很多协议,其实就是围绕着这个网络设备之间通信,举个简单的例子,计算机跟计算机之间(表现为网卡跟网卡等设备)怎么通信,计算机跟集线器之间怎么通信,集线器跟网桥之前怎么通信等等,这里面的网络既包括集线器同计算机之间的这种1对多的网络通信方式,也包括不同局域子网之间的网关之间这种11通信的方式。最关键的是还要“一统江山”,实现端对端通信。对应着硬件上的物理连接去看网络协议会更好理解。不扯了,网络结构的知识后面再说,这里先回归到正途,总结下window下网络编程的一些事情。

      编程接口肯定是为程序员服务的,考虑到大部分程序员都工作在应用层,所以大部分的网络编程接口都是基于操作系统上应用空间实现的。不同操作系统之前编程接口不同(由于体系架构是一样的,虽然编程接口有所不同,但是大概的操作思想是一致的),表现在windows平台下,有最常见的WinSock编程接口、NetBIOS编程接口。这两个接口之间的关系,可以说是由于历史发展来的,没啥关系,这要从TCP/IPNetBEUI以及IPX/SPX网络协议开始说起。

      Winsock编程接口的开发是用于起源于ARPRANET网络系统的TCP/IP协议,Winsock编程接口规范并定义了如何使用APIInternet协议簇,同时支持“面向连接”的会话服务以及“无连接”的数据报服务。提供了很多API函数,尤其是基于Windows系统的扩展库函数,遵循Windows消息驱动机制,在windows平台上获得了广泛应用。后来在Window 2000~2003之间的操作系统之间,Winsocket 2加入了对IPX/SPX以及NetBEUI协议的支持,但后来从vista之后又取消了(具体的,可以参考socket 函数的int AF参数)。TCP/IP尽管是目前最流行的网络协议,但TCP/IP协议在局域网中的通信效率并不高,使用它在浏览“网上邻居”中的计算机时,经常会出现不能正常浏览的现象。此时安装NetBEUI协议就会解决这个问题。

      NetBIOS接口最初是IBM公司为其自己开发的局域网实时网络通信协议——NetBEUI协议,所作的网络编程接口。由于其具有极高的通信效率,且支持广播,后来各个网络厂商均开始在TCP/IP协议以及IPX/SPX协议上拓展了NetBIOS接口,也就是说NetBIOS适用于这三种协议。值得注意的是,它也是支持支持“面向连接”的会话服务以及“无连接”的数据报服务,但却是一种不可路由的协议。因而无法跨越路由器的网络上进行通信。NetBEUI曾被许多操作系统采用,例如Win 9x系列、Windows NT等,在许多情形下很有用,是WINDOWS98之前的操作系统的缺省协议,安装后不需要进行设置,特别适合于在“网络邻居”传送数据。所以建议除了TCP/IP协议之外,小型局域网的计算机也可以安上NetBEUI协议。另外还有一点要注意,如果一台只装了TCP/IP协议的WINDOWS98机器要想加入到WINNT域,也必须安装NetBEUI协议。

      IPX/SPX协议本来就是Novell开发的专用于NetWare网络中的协议,可路由,通信效率高,但是现在也非常常用--大部分可以联机的游戏都支持IPX/SPX协议,比如星际争霸,反恐精英等等。虽然这些游戏通过TCP/IP协议也能联机,但显然还是通过IPX/SPX协议更省事,因为根本不需要任何设置。除此之外,IPX/SPX协议在局域网络中的用途似乎并不是很大,如果确定不在局域网中联机玩游戏,那么这个协议可有可无。目前这个协议的编程接口一般采用的就是NetBIOS。在目前的vista之后的系统中,这个协议已经不受官方支持。如果一些游戏需要IPX协议的支持而且用的又是Vista以上的系统,可以去XP下将对应的动态链接库及驱动文件拷贝到win7相应目录下也可实现协议的支持。

      找资料的时候,无意间发现了月光博客的一篇老文,他那时候本科毕业论文竟然就是网络编程。回头看看,这些乱起八糟的东西还真是随着时代来的,对于他们那一代见证过的人理解起来相对比我们年轻人要轻松。毕竟没见过。Internet是他们的发展时代,我们的时代又是什么呢?

    参考:

    http://network.51cto.com/art/200701/38792.htm

    https://msdn.microsoft.com/en-us/library/ms739935(v=vs.85).aspx

    http://www.williamlong.info/archives/455.html 

    -------------------------------------------------------------------------------------------------------------------------- 生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
  • 相关阅读:
    学习增删查改
    学习MVC
    Milkyway 用的不规则LEF
    innovus 自学之 摆放数模接口port
    innovus 自学之 一些小命令
    innovus 自学小技巧之 gui小配置
    innovus 自学小技巧之floorplan
    第二周 第四节pyc是什么
    第二周 第三节初识模块2
    第二周第二节模块初识
  • 原文地址:https://www.cnblogs.com/zurphy/p/4899685.html
Copyright © 2011-2022 走看看