您的位置:首页 > 理论基础 > 计算机网络

Windows Socket网络编程——第二章 Windows Socket概念

2015-08-04 21:02 239 查看
第二章 Windows Sockets的概念

2.1 OSI网络模型

OSI(Open SystemInterconnect)网络模型,即开放系统互连网络模型,其组成结构如下图所示。

7
应用层

提供用户接口、实现应用所需的服务(例如,文件传输、电子邮件、终端仿真等)。

6
表示层

阁书画数据(例如,加密或解密、压缩或解压,或者在不同的表示系统之间进行转换)。

5
会话层

在两台网络主机之间打开一个会话(一个“虚拟连接”),对两个端点之间的会话进行控制,然后关闭会话。

4
传输层

进行可靠或非可靠的数据传输。可靠传输需要创建连接(一个“虚拟连接”),然后在传输完成后拆除该链接。

3
网络层

为分组寻址和建立路由,通过中间结点,为两个网络主机之间建立起端到端的通信功能。

2
数据链路层

创建和管理两个端点之间的物理通信链路,对共享接口上的竞争链路进行复用,将比特流组织成帧。

1
物理层

提供到传输媒介上的电气连接,是发送端的一个比特能够被接收端正确识别为一个比特。

上层:5、6、7。下层:1、2、3、4。而Windows Sockets API就位于上层与下层之间。

在Windows Sockets 模型中,我们将下层成为网络系统,把上层称为WinSock应用程序。

服务和接口

OSI网络参考模型明确了一个7层的架构,每一层承担一种功能(即一组相关的服务)。每一层通过相邻下层的接口来访问其提供的服务。接口提供一组定义良好的功能调用,从而使其服务可被访问。

在OSI网络参考模型中,工作流是从上倒下执行的,上层依赖于下层来对付那些琐事,实现其构想。各层通过下层接口依次向下递交其工作,上层并不关心下层是怎样完成其服务的,它们只关心任务是否完成。也就是说,下层的活动及其实现细节对于上层来说是透明的。只有在发生故障时,下层对上层才是不透明的,,故障在OSI的层次之间就像“冒泡”一样从下往上呈现。因为当一个服务请求失败是,随之会带来上层的失效,由此形成一个连锁反应。

2.2 WinSock网络模型

将OSI网络模型的高层称作Winsock应用程序,低层则构成网络系统,WinSock的应用编程接口(API)位于两者之间。这样就构成了WinSock网络模型。

WinSock应用程序:提供高层的工程(OSI的5~7层)

网络系统:提供低层的功能(OSI的1~4层)

Winsock API:允许高层访问低层的服务。

下图是一个典型的网络系统具有的模块化结构。



2.2.1 信息与数据

信息是“加工过的”,或者承载了耨中含义,兵器总是完整的。数据则与此想法,数据时“原始的”,布局有什么含义,并且通常是不完整的。数据包含信息,但不是所有数据都具有信息价值。信息具有结构和意义,数据则两者都不具备,数据时8为比特(字节)的任意组合。

2.2.2 应用协议

应用协议定义了网络应用程序之间通信所要遵循的规则。这些规则描述了应用程序的信息,以及应用程序在发送和接收信息是应该怎样使用中。两个应用程序之间要进行与通信,必须有一个应用协议,因为协议定义了应用程序彼此之间应传递什么消息。

Windows SocketsAPI 向应用程序屏蔽了“下层”的协议,如此一来程序员只管做自己的事就好,不需要去担心“下层”是如何完成工作的。

2.3 WinSock中的OSI层次

2.3.1 应用层

应用层负责与用户的交互。它提供接收用户命令和显示信息的用户界面。

Windows Sockets应用程序的应用层处理用户的输入(命令)和应用程序的输出(响应),应用层的服务定义了应用程序的目的。例如,电子邮件程序,用户利用应用层阅读和撰写电子邮件。

除了提供用户界面和辅助功能外,应用层还承担主要的信息处理任务,实现与具体应用相关的信息处理机制。例如,在电子邮件中,应用层创建要发送的邮件消息的首部,积习所接受的邮件消息的首部。邮件消息就是用用层的信息单元。

2.3.2 表示层

表示层负责该层接受来自应用层的信息,并对其进行格式化。如果这个应用程序需要进行任何形式的数据转换,那么都会在表示层进行。常见的表示层功能的例子有:压索、加密、屏幕格式化以及代码转换(例如,ASCII到EBCDIC)。表示层不是必需的,如果应用程序不需要任何数据格式化服务的话,那么应用程序中可以没有表示层。

2.3.3 会话层

会话层负责建立、控制和关闭一个被称为会话的“高级别的"链接。一个会话与一个”低级别的“传输层连接不同。会话是一个”虚连接“,这意味着它可以存在于无连接的传输层协议之上,甚至当网络通信已经停止时。应用程序在绘画成上维持其通信的状态,即使不存在连接,会话层也可以通过该状态模拟一个连接。

会话层的服务对于传输大文件的应用层很有用,尤其是在一个不可靠的网络系统中,会话层与远程主机建立起一个会话,然后开始传输文件,按照预先设定的间隔,接收方发挥一个”同步消息“,向发送方表明已经成功接受了多少数据。发送方和接收方均保存这个消息。如果传输失败,虚连接依然存在,一旦会话层获得一个新的传输连接,则文件可以从上一个同步点重新开始传输,从而不必从头传输该文件。当文件传输完成时,会话层结束该会话(虚连接)。

会话层利用传输层的服务来建立、控制和关闭会话。

2.3.4 传输层

传输层提供那些通常与网络互联相关的服务,即数据的”端到端“(从源到目的)的传输。这个传输可以是可靠的,也可以是不可靠的,可靠传输要求一个链接,不可靠传输则无连接的要求。

传输层通过与网络层的接口实现数据包的封装、寻址和发送从会话层传递过来的数据。对于可靠的数据传输,传输层要负责所接收数据的确认、数据序号分配、缓存、流量控制和重传。

传输层使用网络层的接口,很多情况下,网络层的接口对应用程序来说是不可见的,因为它被隐藏在协议栈软件的内部。在Windows Sockets规范中没有定义这个API,而在Berkeley Sockets的4.3版本中SOCK_RAW API却是事实上的标准。

SOCK_RAW功能对某些特殊的应用程序来说是很有用的,但是我们应该避免使用它,应为大多数程序并不需要SOCK_RAW,它会大大降低应用程序的可移植性。

2.3.5 网络层

网络层负责数据包的路由、分片和重组。它的主要目的是寻址,这包括路由服务,即能够为数据包在网桥和路由器互联起来的网络中建立起传输路径。

2.3.6 数据链路层

数据链路层也被称为网络驱动层。它控制网络接口硬件,当有两个或多个网络层需要同时使用网络接口时,它负责管理竞争的请求。再把数据包发送到物理层之前,数据链路层创建媒体访问控制(Medium Access Control,MAC)首部。将其作为从网络层接收的数据包的前缀。相反地,接收时,再把数据包上传给网络层之前,数据链路层要把MAC首部剥离下来,再上传。

2.3.7 物理层

物理层是硬件,即网卡本身。该层直接与物理网络介质的”对话“。它采用规定的方法(例如电压电平,无线信号或者光脉冲)产生(和检测)介质上传输的消息。物理层的主要目的是以比特流的形式发送数据并确保其正常接收。

2.4 模块化的层次框

每一层都隐藏了其实现细节,所以每一层的内容都是可以改变的,但是它所提供的服务和接口保持不变。Windows Sockets支持多种协议AppleTalk、DECnet以及Novell公司的IPX/SPX协议。

2.5 服务和协议

两个网络主机的对等层之间的对话,使用相同的协议进行彼此间“交谈”,协议是对等层之间进行通信所遵循的一组明确的规定。这些规定描述了当前状态下应有的请求和相应。换言之,协议定义了每一层信息的前后相关联的语法和语义。

两个对等层之间的“对话”在楼继上独立于其他对等层的对话,协议实现该层的服务,并且对上层的请求作出相应。

2.6 协议和API

Windows SocketsAPI是独立于协议的,访问不同协议栈的API间的差异,带来了各种协议簇间不同的寻址需求。此外,在可用的传输服务上也有一些细微的差异,但是这些差异对应用程序而言大多是透明的。

API和协议簇不能混为一谈。API提供对西医战中服务的访问,但是协议簇并不能决定API的标识和结构。不同的协议提供相同的服务,相反地,一个协议簇能够通过任何API提供服务。

两个程序能够进行通信,只要两边的应用程序都采用同样的协议簇,并且在同一网络中,API的不同不会有任何影响,只要上层的协议也是兼容的,两边的应用程序就能够通信。与此不同的,两边的应用程序采用了不同的协议簇,尽管都采用同样的API,两边的程序还是不能够通信。总的来说,API 不需要相同,但是协议栈必须相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络编程 socket