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
NetBIOS与Winsock编程接口的更多相关文章
- Winsock编程基础介绍 .
相信很多人都对网络编程感兴趣,下面我们就来介绍,在网络编程中应用最广泛的编程接口Winsock API. 使用Winsock API的编程,应该了解一些TCP/IP的基础知识.虽然你可以直接使用Win ...
- Winsock 编程流程
近期看了<Window程序设计>感觉在网络方面讲的不错,讲的非常通俗易懂.与大家一同交流 转载请注明出处:http://blog.csdn.net/u010484477谢谢^_^ 使用 W ...
- Delphi下的WinSock编程
一.定址 要通过Winsock建立通信,必须了解如何利用指定的协议为工作站定址.Winsock 2引入了几个新的.与协议无关的函数,它们可和任何一个地址家族一起使用:但是大多数情况下,各 ...
- 关于WinSock编程的多线程控制
1引言Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Microsoft Windows下网络编程接口.它不仅包含了人们所熟悉 ...
- Winsock 编程详解
转载请注明出处!本文地址:https://www.cnblogs.com/teternity/p/WinSock.html Winsock 编程 目录 通用函数讲解 WSAStartup WSACle ...
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- 基于VC的ACM音频编程接口压缩Wave音频(一)
(一)概述 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要 ...
- Java链式编程接口
在android开发中显示一个AlertDialog时,常采用下列的写法: new AlertDialog.Builder(getApplicationContext()) .setTitle(&qu ...
- (转载)Linux系统调用及用户编程接口(API)
(转载)http://www.farsight.com.cn/news/emb167.htm 1 Linux系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组 ...
随机推荐
- Java实现文件压缩与解压
Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...
- array_filter,匿名函数
static function get_categoryII() { return array( array('id' => 1, 'c1id' => 1, 'name' => '1 ...
- js学习随笔
prompt 提示; parse解析;slice划分,切片;sort排序: 移除样式,removeAttribute("style") document.getElementByI ...
- Git相关知识
一些有用的链接: https://www.git-scm.com/ http://nvie.com/posts/a-successful-git-branching-model/ Git开发模式: 建 ...
- The Zero
TOday is just a alpha, but there isnot 欧米伽. 编程,是你选的,是你学的,也是你喜欢的,更是你追求的.为什么要放弃塔!. 加油! 为自己. #include&l ...
- code project 上的内存管理的示例代码
/******************************************************************** created: 2014/03/17 18:53 file ...
- python学习之——django环境搭建
Django是一个基于MVC构造的框架,用于web开发,主要目的是简便.快速的开发数据库驱动的网站. 前提:已经安装python 搭建步骤: 1.https://www.djangoproject.c ...
- python出输出字符串方式:
python出输出字符串方式: >>> who='knights' >>> what='NI' >>> print ('we are the',w ...
- odoo模块
odoo模块包括 业务对象,web控制器,数据文件,前面2个是Python模块,而数据文件则是odoo特有的文件,例如,odoo数据文件,web数据.这些数据文件在 __odoo__.py 进行定义, ...
- EF for Firebird
今天用了Firebird,记录下怎么用,不然下次给忘记了 1.官网下载包 1.DDEXProvider-3.0.1.0.msi 2.FirebirdSql.Data.FirebirdClient-4. ...