NetBIOS与Winsock编程接口

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

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

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

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

  Winsock编程接口的开发是用于起源于ARPRANET网络系统的TCP/IP协议,Winsock编程接口规范并定义了如何使用API与Internet协议簇,同时支持“面向连接”的会话服务以及“无连接”的数据报服务。提供了很多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

时间: 2024-07-29 13:21:15

NetBIOS与Winsock编程接口的相关文章

Winsock 编程流程

最近看了<Window程序设计>感觉在网络方面讲的不错,讲的很通俗易懂,与大家一同交流 转载请注明出处:http://blog.csdn.net/u010484477谢谢^_^ 使用 Winsock 编程的一般步骤是比较固定的. 1.Winsock 库的装入.初始化和释放 所有的 WinSock 函数都是从 WS2_32.DLL 库导出的,VC++在默认情况下并没有连接到该库,如果想使用 Winsock API,就必须包含相应的库文件. #pragma commment(lib, "

操作系统知识点_用户编程接口

3.用户编程接口 函数调用和系统调用 函数调用运行在用户空间,为程序员提供调用真正的幕后完成实际事务的是系统调用接口.系统函数是内核提供给应用程序的接口,属于系统的一部分. 函数调用:调用函数库中的一段程序或函数:与用户程序联系:在用户地址空间执行:运行时间属于"用户时间":属于过程调用,系统开销小: 系统调用:各个系统的系统调用是不同的:调用系统的内核服务:是操作系统的入口点:在内核地址空间执行:"系统"时间:在用户和内核空间切换开销大:unix中有大约90个.如

网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. UDP全称为用户数据报协议,它可以提供非连接的不可靠的点到多点的通信. 使用TCP还是UDP,那要看你的程序注重哪一个方面,可靠(tcp)还是快速(udp). TCP/IP 建立连接的过程 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.   

Linux系统调用及用户编程接口(API)

系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务.例如用户可以通过进程控制相关的系统调用来创建进程.实现进程调度.进程管理等. 为什么用户程序不能直接访问系统内核提供的服务呢?这是由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的.因此,用户进程在通常情况下不允许访问内核数

基于UDP的Winsock编程(C++版)

基于UDP的Winsock编程与基于TCP的Winsock编程相比,只是缺少了一个步骤而已.对于Server,缺少了接受连接的过程(accept()函数调用):对于Client,缺少了请求连接的过程(connect()函数调用). 另外与TCP区别的还有,在UDP中,数据收发函数是:sendto(),和recvfrom()函数. 函数原型为: int sendto(SOCKET s,const char FAR *buf,int len,int flags,const struct sockad

了解一下Android常见的编程接口

手机开发的编程模型是什么,了解一下 下面是android的编程接口,看来一下和swing差不多,尤其是异步处理模型. ================================================ UI组件TextViewEditTextTab+TabHostActionBar+FragmentViewPagerSlidingMenu 异步执行AsyncTask 布局LinearLayoutRelativeLayoutFrameLayoutTableLayout 组件Activ

winsock编程WSAEventSelect模型

winsock编程WSAEventSelect模型 WSAEventSelect模型和WSAAsyncSelec模型类似,都是用调用WSAXXXXXSelec函数将socket和事件关联并注册到系统,并将socket设置成非阻塞模式.二者不同之处在于socket事件的通知方法:WSAAsyncSelec模型利用窗口句柄和消息映射函数通知网络事件,而WSAEventSelect模型利用WSAEVENT通知网络事件.完成WSAEventSelect模型需要涉及以下函数或结构: 1:WSAEventS

CUDA C编程入门-编程接口

CUDA C给熟悉C编程语言的人提供一个简单的途径去编写在设备(GPU)上执行的代码. 由一个最小的C语言的扩展集和运行时库组成. 核心的语言扩展在编程模型这一章节已经介绍过了.允许程序员定义核函数并且使用一些新的语法指定核函数每次运行时的grid和block的维数.可以在C语言扩展这个章节里找到扩展的完整描述.所有的含有这些扩展的源代码都需要使用nvcc编译,nvcc的概述可以查看使用nvcc编译这一小节. 在CUDA C运行这一小节介绍运行时.运行时提供在主机执行的用于分配和回收设备内存.设

api (应用程序编程接口)

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. 原文:http://baike.baidu.com/link?url=Jk71oJNRj5OjUpr6Lf38NF74-EI85FtwXiyye6_Da_cD9-o_9w_TMOpuoFwPf-tIug26_GSMUEGZrUgfpbqN3K