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高新技术第一篇:类加载器详解
本文转载自: http://blog.csdn.net/jiangwei0910410003/article/details/17733153 首先来了解一下字节码和class文件的区别: 我们知道, ...
- 用css伪类制作三角形的三种方法
在手机上写三角形的时候,我一般都用伪类,刚开始的时候用的图片,但是在现在的手机高清屏幕上,图片容易失真,还是用伪类吧! 第一种:一个90度的“ > ”, 只有线条.(可以做下拉框的箭头之类的) ...
- HTML5离线篇收藏--- cache manifest
自从翻译了<解读 HTML5:建议.技巧和技术>,就一直没有时间去看 HTML5 相关的东西.上周一次偶然的工作间隙折腾了下 Cache Manifest .当时直接拿博客当测试环境,虽然 ...
- slim框架中防止crsf攻击时,用到的函数hash_equals
1.防止crsf攻击的最多解决方案就是 为每个请求生成一个唯一 token ,验证来源于客户端 HTML 表单产生的 POST等请求 . 2.这个token默认放在session中. slim框架源码 ...
- [刘阳Java]_MyBatis_动态SQL标签用法_第7讲
1.MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 2.MyBatis中用于实现动态SQL的元素主要有 if choose(when,otherwi ...
- Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统
最近正在学习Vue2.0相关知识,正好近期饿了么桌面端组件Element-UI发布,便动手做了一款简易个人记账系统,以达到实践及巩固目的. 1.开发环境 Win10 + VS2015 + Sqlser ...
- LSD-SLAM深入学习(3)-代码解析
前言 在LSD-SLAM深入学习(2)中我们已经对算法进行分析,此处假设读者对于ros的基本操作都已经很熟悉,而且已经编写了一定量的的代码,我们直接上干货.此处分析的程序如下 main_live_od ...
- KVC
KVC可以修改私有的属性,估计也是底层 操作的.
- 怎么用sublime text 3搭建python 的ide
安装目录的Packages目录下的python文件夹下的Python.sublime-build复制以下内容,保存 {"cmd": ["python", &qu ...
- SQL关于limit的用法
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时 ...