网络编程一:OSI模型,Scoket

目的:直接或间接地通过网络协议与其他计算机进行通讯。 

需要知道的几个概念:

套接字:(socket),用于描述ip地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。有两种不同的类型:流套接字和数据报套接字。套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。它的原理:要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个
步骤:服务器监听,客户端请求,连接确认。所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他
客户端套接字的连接请求。

用模型来思考,而模型的核心思想就是层层封装,工作独立化,即做应用层不必关于下面是如何工作的。
发送数据包从顶层一步步封装,依次加入传输层的报头(TCP,UDP),再加入IP报头,只到物
理层,接收方再依次从物理层开始相反方向解开数据包,直到分析出应用层数据。

统一资源定位器,又叫URL(Uniform Resource Locator),是专为标识Internet网上资源位置而设的一种编址方式,我们平时所说的网页地址指的即是URL,它一般由三部分组成:传输协议://主机IP地址或域名地址/资源所在路径和文件名,如今日上海联线的URL为:http://china-window.com/shanghai/news/wnw.html,这里http指超文本传输协议,china-window.com是其Web服务器域名地址,shanghai/news是网页所在路径,wnw.html才是相应的网页文件。

Internet的工作原理

当一个用户想给其他用户发送一个文件时,TCP先把该文件分成一个个小数据包,并加上一些特定的信息(可以看成是装箱单),以便接收方的机器确认传输是正确无误的,然后IP再在数据包上标上地址信息,形成可在Internet上传输的TCP/IP数据包。 使用TCP/IP传送数据 ,当 TCP/IP数据包到达目的地后,计算机首先去掉地址标志,利用TCP的装箱单检查数据在传输中是否有损失,如果接收方发现有损坏的数据包,就要求发送端重新发送被损坏的数据包,确认无误后再将各个数据包重新组合成原文件。 就这样,Internet通过TCP/IP协议这一网上的"世界语"和IP地址实现了它的全球通信的功能。

下面是网上看的一篇文章,很详细:http://blog.csdn.net/xinyueyuli/archive/2005/11/10/527128.aspx,做个记录

1. OSI网络模型的发展和目的
1.1. OSI网络模型的发展
    局域网,城域网和广域网的早期发展在许多方面都是混乱的。在20世纪80年代早期,网络开始迅猛发展。随着各大公司认识到通过使用网络技术可以节省大量资金和获得巨大效益,新的网络和现有网络的扩展几乎和新网络技术,产品出现的速度同样在迅猛发展着。
    20世纪80年代中期,各大公司逐渐感受到了盲目地大规模扩展网络带来的后果。使用不同标准的网络之间很难相互通信,于是他们意识到必须掘弃先前的专用网络系统(proprietary networking systems)。
    专用网络系统是个别公司自己研制,拥有并且控制的网络。在计算机工业中,专用是开放(open)的反义词。专用意味着一个或者一些小公司控制对技术的使用和改进,而开放意味着技术的使用是公开的。“开放”用在这里的意思就是表示这个标准允许网络间的互连,只要求使用的通信软件遵循这个标准,而无须考虑低层的硬件。
    为了解决不同网络系统之间互不兼容和相互通信的问题,国际标准化组织ISO(International Organization for Standardization)研究了例如DECnet, SNA 和 TCP/IP 等网络方案。作为研究的结果,ISO提出了一种网络模型,这种模型为投资商们提供了一套标准来确保全世界各公司提出的不同类型网络技术之间具有良好的兼容性和互操作性,这就是ISO网络模型。

2. OSI网络模型的七层
    在计算机间传递数据的问题可以在OSI参考模型中简化为7个较小而且更容易解决的问题每一个对应模型中的一层。这7层分别是:
                第七层:应用层 The application layer
                第六层:表示层 The presentation layer
                第五层:会话层 The session layer
                第四层:传输层 The transport layer
                第三层:网络层 The network layer
                第二层:数据链路层 The data link layer
                第一层:物理层 The physical layer

    OSI模型有七层,逻辑上分为两个部分:低层的1至4层关心的是原始数据的传输,高层的5至7层关心的是电脑上的应用程序。

2.1. 较高层
    第七层:应用层
    应用层是OSI模型中最靠近用户的一层,它为用户的应用程序提供网络服务。与OSI其他层不同的是,它不为任何其他OSI层提供服务,而只是为OSI模型以外的应用程序提供服务。应用层为想要进行通信的实体建立连接。它包含了一些应用程序,通过激活这些网络程序和服务来实现有实际意义的功能。这些程序可由程序员专门针对单个网络规范来编制。应用程序也可以是基于一个更普遍一般的工具,如Web站点开发工具等已被程序员改编用于特定目的的工具。网络用户有一些普遍的应用需求。例如,大多数用户需要每天使用到Email与同事联系,或者需要用到字处理程序来制作电子文档。应用层进程将信息从本层传递到相邻层--表示层,对信息本身不作修改和封装操作。
    应用举例:浏览器,Telnet,HTTP,E-mail,文件传输和访问。

    第六层:表示层
    表示层确保一个系统应用层发送的信息可以被另一种系统的应用层读取。为不同终端的上层用户提供数据和信息的语法表示变换方法。换句话说,表示层处理计算机存储信息的格式问题。在必要时,表示层需要把各种不同的数据格式转换成一种通用的格式。它解决了连接到网络的不同计算机之间数据表示的差异。例如,可以处理使用EBCDIC字符编码的IBM大型机和一台使用ASCII字符编码的IBM或兼容个人计算机之间的通信。此外它还负责连接管理,数据处理。(数据加密--表示层通过对数据进行加密与解密使任何人,即使窃取了通信信道的人也无法得到机密信息、更改传输的信息或者在信息流中插入假消息。表示层能够验证信息源,也就是确认在一个通信会话中的一方正是信息源所代表的那一方。数据压缩--表示层也能够以压缩的形式传输数据,以最优化的方式利用信道。通过压缩从应用层传递下来的数据并在接收端回传给应用层之前解压数据来实现这一目的。)
    应用举例:数据格式转换,如JPEG,ASCII

    第五层:会话层
    顾名思义,会话层建立,管理和终止两台通信主机之间的会话。会话层给上层提供可和上层进行会话的服务,这些服务包括:建立会话性能(建立不同的连接),管理对话性能(避免双方同时发送数据), 管理活动性能(把会话分成多个活动) ,礼貌地结束会话性能(确认数据传输是否真的结束了,而不是因为以外终端而结束的。)除了会话规则以外,会话层为进行高效的用户传输,服务分类和会话层,表示层以及应用层的差错报告提供条件。
    应用举例:连接时控制通信会话的两种可能方式:
    1. 在建立一次连接中,可以发生几次会话。
    2. 一次会话需要传输层建立几次连接才能完成。

http://www.supinfo-projects.com/cn/2004/osi_model/2/2_1.gif
    在图(a)中,可以进行多次会话,但不需一次又一次地建立连接。图(b)中,在不干扰会话连接的情况下,传输连接可以被打断并再重新建立。注意:会话层不能把多个会话汇聚到一个传输连接中。这个工作是由传输层完成的。与人们之间的谈话相似,图(a)中的情况类似于您给家里打电话,接通后,您的家人轮流和您讲话,多个会话开始、结束,但电话始终是接通的。图(b)中的情况类似于在一次电话通话中,您还没有讲完话,电话就断线了。因为您的会话还没有结束连接就断开了,所以您必须重新建立连接以结束会话。

    OSI 模型中的5-7层(较高层)的总结
    OSI模型中高3层的功能是向最高层的应用程序提供服务。通过一整套协议和一系列服务来完成一些必须不断重复编码的任务,高层提供了使应用程序间能够更容易共享数据和交流信息的标准。总的来说,5~7层提供了如下功能:7层提供了如下功能: 
    1)处理计算机间数据表示的差别。
    2)确保数据在网络传输中不被窃取和泄露,并且确保不允许未经授权就使用网络访问数据 。
    3)最高效地使用网络资。 
    4)通过应用程序及活动同步来管理对话和活动。 
    5)在网络节点间共享数。

    此外,还可以使用大量的通用网络应用程序:
    1)电子邮件(E-mail) 
    2)网络新闻 
    3)文件共享与传输 
    4)虚拟终端 
    5)浏览器

2.2. 较低层
    OSI模型较低的四层规定了如何通过互联网设备把数据在一条物理线路上传输到目标终端站并最终到达应用层的过程。应用层,表示层,会话层需要考虑的是应用方面的问题,而下四层只需考虑数据传输的问题。

    第四层:传输层
    传输层是OSI中最重要,最关键的一层,是唯一负责总体的数据传输和数据控制的一层。传输层提供端到端的交换数据的机制。传输层对会话层等高三层提供可靠的传输服务,对网络层提供可靠的目的地站点信息。传输层在发送主机系统上对将要发送数据进行分段,在接收主机系统上完成数据段到数据流的重组。传输层和会话层之间的边界可以认为是应用协议和数据流协议的分界。传输层试图试图提供一种可以向上层屏蔽传输实现细节的数据传输服务。如何在两台主机间实现可靠传输的问题就是传输层需要关心的。在提供通信服务时,传输层建立,维护和适当的时候终止虚拟电路。在提供可靠服务时,传输层用到了错误检测和恢复以及信息流控制。
    传输层的纠错功能:传输层还负责保证提供给会话层的通信服务的可靠性。对一些网络来说,下述几个错误的一个或全部可能出现在传输层。消息的部分(称为分组)可能会: 出错,丢失,延迟时间紊乱(例如,如果中间节点出错)然后可能又突然重复出现,重复,无序发放(其结果就是重复的信息可能无序发。以上的这些错误传输层能够检测出并且纠正。
    传输层的寻址功能:寻址--传输层负责在一个节点内对一个特定的进程进行连接。所有的低层只需考虑把自身与网络地址(一个节点一个地址)联系起来。但是可能在一个给定节点上有许多个进程,它们在同一时间内都在进行通信。例如,一个用户可能正在进行向文件服务器传送信息的进程,另一个用户可能正在访问同一服务器上的Web页面。传输层是通过使用端口号来处理节点上的进程寻址的。为了处理牵涉到多端口的通信,传输层使用一种复用的技术。如图描述了传输层与复用的关系。

http://www.supinfo-projects.com/cn/2004/osi_model/2/2_2.gif
    应用举例:为端到端连接提供可靠的传输服务。为端到端连接提供流量控制,差错控制,服务质量(Quality of Service,QoS)等管理服务。TCP, UDP, SPX,NetBios

    第三层:网络层
    网络层是复杂的一层,它提供如何跨越各种通讯网络的信息,使两终端系统可以传送信息。它提供两台主机间的连接和路径选择,(IP寻址)这两台主机可能位于地理上很分散的网络中。网络层的任务是发送和接收分组(包)。网络层接收上层(传输层)的信息并通过添加一个头部来封装数据。头部包含由对等网络层进程使用的协议信息,使得包能够到达目的地。分组的头部包含原地址和目标地址,这些地址叫做网络地址,用来识别网络中的连接在源地址和目标地址上的计算机。网络层再把包传送给数据链路层。网络层提供一个统一的寻址方案,这样就为每一个节点提供了一个惟一的地址。它解决了在不同类型和版本的网络之间的不同寻址约定和重复节点地址的问题。
    网络层层的设备:路由器
    应用举例:路由路径选择及网络寻址(Network Addressing)。IP, IPX

    第二层:数据链路层
    数据链路层位于物理层与网络层之间,它是OSI中比较重要的一层。它将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,并对物理层的原始数据进行数据封装。数据链路层中的数据封装是指:封装的数据信息中,包含了地址段和数据段。地址段含有发送节点和接收节点的地址,控制段用来表示数格连接帧的类型,数据段包含实际要传输的数据。数据链路层地址就是NIC(网络接口卡)地址。数据链路层与帧的传输有关而与二进制数传输无关。数据链路层是这样为网络层服务的:将一个分组信息封装在帧中,再通过一个单一的链路发送帧。数据链路层主要功能:在两个网络实体之间提供数据链路连接的建立、维持和释放管理。构成数据链路数据单元(帧),并对帧定界、同步、收发顺序的控制。传输过程中的流量控制(Flow Control),差错检测(Error Detection)和差错控制(Error control)等方面。数据链路层提供数据在物理链路上的传输。这就涉及到物理寻址(与之相反的是逻辑寻址),网络拓扑(有时也称为逻辑拓扑),网络介质访问,错误检测。
    数据链路层的设备:集线器和交换机等。
    应用举例:把比特组合为字节并把字节组合为帧,使用MAC地址来访问介质,错误检测但没有纠正。

    第一层:物理层
    物理层是OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路建立、维持、拆除,而提供具有机械的, 电子的, 功能的和规范的特性. 简单的说,物理层确保原始的数据可在各种物理媒体上传输。物理层进程通过物理连接提供传输二进制数的服务。它们不必了解它们装载的帧、分组和报文的意义或结构。物理层的功能:为数据端设备提供传送数据通路和传输数据。一般情况下物理层通过NIC来实现,但它是第二层设备。
    物理层的设备:RJ-45,各种电缆,串口,并口,接线设备。
    应用举例:在设备间移动比特数据(一些2进制数据如:0101010010101001)

    OSI 模型中的1-4层(较低层)的总结
    1.物理层
    物理层与移动二进制数和维护物理连接有关。
    2.数据链路层
    数据链路层通过帧在一个给定的物理链路传输分组(报文),保持帧的有序以及发现检测到的各种错误,包括传输错误,但是数据链路层只了解在链路另一端的对等实体。数据链路层的地址是为了将网络中一点的数据帧送到另一点。
    3.网络层
    网络层知道每个数据链路的对等进程,并负责在链路间移动分组,把它送到目的地。网络层地址是为了把单一分组从网络的一端送到目的地。
    4.传输层
    传输层注意的是整个网络,该层是第一个端到端层。其对等实体位于分组的最终目的地。传输层依靠网络层经过中间节点移动分组。传输层地址是为了把网络一端进程的完整信息送到最终目的地的对等进程。

. 封装
3.1. 封装
    为了使大家更好的理解在网络中数据是如何传输的,在这里介绍封装的概念。
    网络上所有通信都是从源端传送到目的端的,在网络上传输的信息被称为数据或者数据分组。如果主机A想给另外一台主机B发送数据,数据必须首先要经历一个称为封装(encapsulation)的过程。在进行网络传输之前,封装过程会对数据附加上必要的协议信息。
    因此,当数据沿着OSI模型的各层向下传递时,它就会被增加上数据报头(headers),数据报尾(trailers)和其它信息。
    要理解封装是如何进行的,让我们先考查一下数据是如何通过各层的。当数据从源端出发,它就会沿着应用层一直向下到达其他各层。

http://www.supinfo-projects.com/cn/2004/osi_model/3/3_1.jpg
    为了能够使大家更好的理解,下面举一个传送e-mail的例子。
    1. 创建数据(应用层,表示层,会话层)
    当用户发送一个电子邮件信息时,它的字母或数字字符被转换成可以通过互联网传输的数据。
    2. 为端到端的传输将数据打包(传输层)
    通过对数据打包来实现互联网的传输。通过使用段,传输功能确保在两端的信息主机的电子邮件系统之间进行可靠的通信。
    3. 在报头上附加网络地址(网络层)
    数据被放置在一个分组或者数据报中,其中包含了带有源和目的逻辑地址(如IP地址)的网络报头。这些地址有助于网络设备在动态选定的路径上发送这些分组。
    4. 附加本地地址(MAC地址)到数据链路报头(数据链路层)
    每一个网络设备必须将分组放置在帧中。该帧的报头包括在路径中下一台直接相连设备的物理地址(如MAC地址)。
    5.为进行传输而转换为比特(物理层)
    帧必须被转换成一种1和0的模式,才能在介质上(通常为线缆)进行传输。

http://www.supinfo-projects.com/cn/2004/osi_model/3/3_2.jpg

3.2. 解封装
    当远程设备顺序接收到一串比特时,它会把它们传送给数据链路层以组装为帧。当数据链路层收到该帧时,它会执行以下工作:1)读取物理地址和由直接相连的对等数据链路层所提供的控制信息。2)从该帧剥离该控制信息并由此创建一个数据报。3)遵照在帧的控制部分中出现的内容而把数据报向上传送到相邻层。
    这个过程被称为解封装,每个后续层都会经历一个类似的过程。
总结
    通过以上的内容,我们了解到OSI模型是一种描述性的网络方案,其标准确保了在各种不同网络技术之间具有更强的兼容性和互操作性。有一点很重要,现在的网络通常并没有建立在OSI模型的基础上,但使用它最为指导原则(如TCP/IP模型)。了解OSI模型有助于我们了解其他的网络模型和工作原理。让我们回顾一下OSI模型的七层:
    第七层:应用层 --- 浏览器
    第六层:表示层 --- 一种通用格式
    第五层:会话层 --- 对话和交谈
    第四层:传输层 --- 流量控制和可靠性
    第三层:网络层 --- 路径选择,路由及逻辑寻址
    第二层:数据链路层 --- 帧和介质访问控制
    第一层:物理层 --- 信号和介质
    封装是一种在发送数据前给数据附加一种特殊协议报头(而且有可能附加报尾)的过程。在对等层的通信中,每一层的协议与对等层交换信息。
    数据传输时首先从最高层一层一层的进行封装,然后通过物理层传到目的计算机上,然后从低到高的一层一层进行解封装,直到最后的应用层,应用层把数据应用到应用程序中。这就是一个完整的数据传输过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值