Windows Socket网络编程——第二章 Windows Socket概念
2015-08-04 21:02
239 查看
第二章 Windows Sockets的概念
上层:5、6、7。下层:1、2、3、4。而Windows Sockets API就位于上层与下层之间。
在Windows Sockets 模型中,我们将下层成为网络系统,把上层称为WinSock应用程序。
服务和接口
OSI网络参考模型明确了一个7层的架构,每一层承担一种功能(即一组相关的服务)。每一层通过相邻下层的接口来访问其提供的服务。接口提供一组定义良好的功能调用,从而使其服务可被访问。
在OSI网络参考模型中,工作流是从上倒下执行的,上层依赖于下层来对付那些琐事,实现其构想。各层通过下层接口依次向下递交其工作,上层并不关心下层是怎样完成其服务的,它们只关心任务是否完成。也就是说,下层的活动及其实现细节对于上层来说是透明的。只有在发生故障时,下层对上层才是不透明的,,故障在OSI的层次之间就像“冒泡”一样从下往上呈现。因为当一个服务请求失败是,随之会带来上层的失效,由此形成一个连锁反应。
WinSock应用程序:提供高层的工程(OSI的5~7层)
网络系统:提供低层的功能(OSI的1~4层)
Winsock API:允许高层访问低层的服务。
下图是一个典型的网络系统具有的模块化结构。
Windows SocketsAPI 向应用程序屏蔽了“下层”的协议,如此一来程序员只管做自己的事就好,不需要去担心“下层”是如何完成工作的。
Windows Sockets应用程序的应用层处理用户的输入(命令)和应用程序的输出(响应),应用层的服务定义了应用程序的目的。例如,电子邮件程序,用户利用应用层阅读和撰写电子邮件。
除了提供用户界面和辅助功能外,应用层还承担主要的信息处理任务,实现与具体应用相关的信息处理机制。例如,在电子邮件中,应用层创建要发送的邮件消息的首部,积习所接受的邮件消息的首部。邮件消息就是用用层的信息单元。
会话层的服务对于传输大文件的应用层很有用,尤其是在一个不可靠的网络系统中,会话层与远程主机建立起一个会话,然后开始传输文件,按照预先设定的间隔,接收方发挥一个”同步消息“,向发送方表明已经成功接受了多少数据。发送方和接收方均保存这个消息。如果传输失败,虚连接依然存在,一旦会话层获得一个新的传输连接,则文件可以从上一个同步点重新开始传输,从而不必从头传输该文件。当文件传输完成时,会话层结束该会话(虚连接)。
会话层利用传输层的服务来建立、控制和关闭会话。
传输层通过与网络层的接口实现数据包的封装、寻址和发送从会话层传递过来的数据。对于可靠的数据传输,传输层要负责所接收数据的确认、数据序号分配、缓存、流量控制和重传。
传输层使用网络层的接口,很多情况下,网络层的接口对应用程序来说是不可见的,因为它被隐藏在协议栈软件的内部。在Windows Sockets规范中没有定义这个API,而在Berkeley Sockets的4.3版本中SOCK_RAW API却是事实上的标准。
SOCK_RAW功能对某些特殊的应用程序来说是很有用的,但是我们应该避免使用它,应为大多数程序并不需要SOCK_RAW,它会大大降低应用程序的可移植性。
两个对等层之间的“对话”在楼继上独立于其他对等层的对话,协议实现该层的服务,并且对上层的请求作出相应。
API和协议簇不能混为一谈。API提供对西医战中服务的访问,但是协议簇并不能决定API的标识和结构。不同的协议提供相同的服务,相反地,一个协议簇能够通过任何API提供服务。
两个程序能够进行通信,只要两边的应用程序都采用同样的协议簇,并且在同一网络中,API的不同不会有任何影响,只要上层的协议也是兼容的,两边的应用程序就能够通信。与此不同的,两边的应用程序采用了不同的协议簇,尽管都采用同样的API,两边的程序还是不能够通信。总的来说,API 不需要相同,但是协议栈必须相同。
2.1 OSI网络模型
OSI(Open SystemInterconnect)网络模型,即开放系统互连网络模型,其组成结构如下图所示。 7 | 应用层 | 提供用户接口、实现应用所需的服务(例如,文件传输、电子邮件、终端仿真等)。 |
6 | 表示层 | 阁书画数据(例如,加密或解密、压缩或解压,或者在不同的表示系统之间进行转换)。 |
5 | 会话层 | 在两台网络主机之间打开一个会话(一个“虚拟连接”),对两个端点之间的会话进行控制,然后关闭会话。 |
4 | 传输层 | 进行可靠或非可靠的数据传输。可靠传输需要创建连接(一个“虚拟连接”),然后在传输完成后拆除该链接。 |
3 | 网络层 | 为分组寻址和建立路由,通过中间结点,为两个网络主机之间建立起端到端的通信功能。 |
2 | 数据链路层 | 创建和管理两个端点之间的物理通信链路,对共享接口上的竞争链路进行复用,将比特流组织成帧。 |
1 | 物理层 | 提供到传输媒介上的电气连接,是发送端的一个比特能够被接收端正确识别为一个比特。 |
在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 不需要相同,但是协议栈必须相同。
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- C#基于socket模拟http请求的方法
- Lua下基本的网络编程示例
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- linux网络编程用到的网络函数详解用和使用示例
- php与flash as3 socket通信传送文件实现代码
- 解决time_wait强制关闭socket
- C#网络编程基础之进程和线程详解
- C++ 网络编程 总结
- C#使用Socket上传并保存图片的方法
- 深入php socket的讲解与实例分析
- Linux网络编程之UDP Socket程序示例
- Linux网络编程之socket文件传输示例