已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章 网络编程基础IP协议(Internet Protocol,因特网协议)是目前网络编程的核心。不论在局域网环境(LAN)还是广域网中,IP都是系统之间传输数据的媒介。虽然还有其他Windows网络协议,但是相对于网络设备之间传输数据(尤其是在因特网上时)IP协议提供了一组最健壮,最通用的规范。用IP协议编程开发通常是一个比较复杂的过程,所以在阅读本书前,请适当作好相关网络知识的准备,比如搭建网络的一般常识、网络设备的简单概念等。我们的程序在网络中发送和处理数据有许多需要考虑的因素,比如客户和服务器的数量、网络类型、网络拥塞程度等等。理解他们的原理以及对数据传输的影响至关重要。我们最常见到的问题是,开发者根本没有想到过的各种“意外”情况会不期而至,而我们却往往不知道他是何时、如何发生的这种时候,大家往往简单地将其统称为:网络不稳定而事实上,它们的绝大多数出现原因却是因为我们的网络程序编写不当,譬如在编写网络程序的时候没有考虑低速连接用户的网络环境(使用无线上网的QQ2007的用户肯定深有体会),或者忽视了路由器不转发UDP广播的特性等。在此首先声明,很多教材和参考书籍中将ASP.NET或其他网站开发技术称为“网络编程”,我们认为是不严谨的,在本书中如无特殊提示,则 “网络编程”均代表“网络协议编程”或“网络协议的实现”。当这种情况发生时,我们怎么办?因此,本章首先介绍如何使用网络调试工具进行网络通讯的分析,以便在今后的学习过程中能尽快找到故障原因。事实上,网络分析是任何一个网络程序开发者、高级网络管理员和黑客的基本功。调试我们的网络网络程序开发和普通开发不同,我们面临的最大困难是不可能准确而及时地知道网络中到底发生了什么。经常出现的情况是,我们编写的程序长期处于一种“有时可用,有时出错”的奇怪状态中。网络分析器是网络程序员必备的工具,它能帮助我们发现“线上”正在发生的事情或者本该发生却没有发生的事情。通过监视应用程序数据之间的传输,往往可以相对“方便”的探测到编程错误。本节将介绍怎样在Windows上安装使用一个简单的公用网络分析器。说明:虽然Windows2000和以后的Windows服务器操作系统上都已经自带了网络监视器(控制面板管理工具中,如果没有,可以使用“添加/删除程序”安装),但是为了更广泛的兼容性和更强大的功能,我们选择使用WinPcap和Sniffer作简单讲解。安装WinPcap驱动程序很多朋友都下载并安装过WinPcap程序,但是却无法在开始菜单找到它。这很正常,因为WinPcap并不是一个“应用程序”,而是一个“驱动程序”,就象我们使用的声卡、显卡驱动一样,它可以直接操作我们的底层硬件设备网卡。在编写本书的时候,WinPcap的最新稳定版本是4.0.1版。我们可以在www. WinP免费获得该程序及其源代码。安装WinPcap可以使网卡处于一种“混杂方式”中(大多数操作系统平台都可以使用的方式),该方式可以让网卡接受网上所有的通讯,不管是发送到哪里去的,或是从哪里收到的。很多网络分析工具都依赖WinPcap驱动,所以如果你的网络分析工具不能用,请先检查该驱动是否正常安装。以下我们将使用轻量级网络分析工具Commview作为讲解示范,它的作用就是让我们可以容易的看到我们的电脑在对别的电脑“说”些什么,而同时我们的电脑又“听见”了一些什么。其他网络分析工具功能和使用方式基本相同。CommView主界面如图一所示:(图一)我们要分析网络包之前,首先需要设置一个网卡用于捕获只有经过被选中的网卡的信息才会被捕获到。同时还要明白一点:只有本机的网卡才可以被捕获,捕获远程网卡是不行的。其中Loopback网卡代表本机环回地址,也就是我们通常写的地址代表一个本地网络地址。通过查看路由表,我们可以知道 NetworkDestinationNetmaskGatewayInterfaceMetric1既然掩码是,那么所以主机地址127.*.*.*都是的网络目的地址。他们之间无法被区分,所以往往只使用 。(图二)然后,按下网卡列表框左侧的蓝色的开始按钮,就开始了数据包的捕获过程,此时如果你正在进行网络通讯,就会看到屏幕上飞快滚动的大量数据显示了。图中蓝色箭头表示当前正在进站或者出站的是哪一个通讯地址。使用网卡列表框左侧的蓝色的停止按钮,就可以停止对网络数据包的捕获,这时,我们可以使用“封包”标签卡来查看刚才获取到的各种封包信息。看到这里,应该已经有读者望而生畏了吧。确实,如此复杂的封包列表,显然不是人类大脑所应该处理的。没有关系,我们的Comview有能力将其简化,现在我们按下Ctrl+F或者点击搜索菜单中的“查找封包”项,就会看到如下界面:好了,现在是不是已经感到可以长吁一口气了呢?恐怕没那么简单!因为即使我们使用搜索功能减少了文件范围没,但是封包的数量还是大得惊人。于是我们可以使用另一个功能来减少抓取的封包数量过滤!在Commview中,过滤封包使用的是“规则”选项卡。我们首先使用快捷工具栏清空刚才那些封包。然后点击“规则”选项卡,将见到如下设置界面。我们可以对捕获条件进行严格设置,比如限制只捕获针对武汉银河学院网站(地址50)的通讯包。当我们设置了以后,左侧树状图中已经有设置生效的项目,会以粗体显示。使用同样步骤,我们可以使用“警报”选项卡,这里的设置更为复杂和多样。我们可以限制在某个条件满足的时候,弹出一个提示或播放一段声音这个功能在长时间抓报捕获的时候特别有用。比如一个网络管理员蹲点守候黑客袭击的时候,就可以将黑客的袭击行为特有的分包特征作为条件,一旦黑客再次来袭就会响起警报声。这样看起来是不是很Cool呢?现在我们开始捕获与武汉银河学院网站服务器之间的网络通讯,打开捕获按钮,然后使用网页浏览器查看武汉银河学院网站。会发现,只有符合条件的封包被捕获到了:现在我们就可以在“封包”选项卡看到所捕获的各种包了。通过右键点击一个封包,我们可以在功能菜单中将封包还原为我们可以识别的文字:接下来就可以看到一个新窗口,里面充满了各种各样的信息内容,比如网页的正文信息。在上图中,请注意右下角的下拉框,这里我们还可以将刚才抓取的封包直接还原为网页,这样看起来会更加直观。但是由于一个网页往往不是一个通讯包就能发完的,所以看到的网页可能并不完整至少图片是不会出现的。在我们完成了大量捕获之后,还可以通过查看菜单中的各种功能来浏览整个网络环境中我们的主机都和谁产生了通讯,以及各种不同通讯协议之间包的比例关系等各种重要信息。下图是本机的通讯流向与流量。如果我们只做监视工作,那显然不能称之为网络调试。CommView还能发送我们自己构造的信息。在工具菜单中选择“封包发送器”,将可以自由构造我们所需要的封包,并发送到指定位置。这一点很重要,因为我们调试网络程序的时候显然不会同时开着好几台主机来回奔走,同时我们也无法要求其他主机发送我们所需要的特定包,这时,自己“伪造”一些封包发送出去(或发送回来)作为调试用途是一个非常方便的手段。当然,这些令人眼花缭乱的网络包不是我们本章所应该学会的内容。抓包是一个繁琐而细致的工作,但是它也往往是编写、调试网络程序以及进行黑客袭击的重要手段,因此可以说网络抓包是网络编程的“内功”。深厚的内功当然只有靠大量的实践来积累,以上部分看起来有些难以理解,但是,耐心学会后你会发现自己受用无穷。在后面的章节中,有时你会需要重新回到这里,所以不要追求在阅读此处时能够一次就完全领悟。在真正的网络应用中,还有一些更为强大的网络分析工具,其中最著名的是NAI公司推出的Sniffer。Sniffer软件体积比较臃肿,运行时也需要占用很多内存,所以运行比较慢,这是它与其它工具相比的一个明显缺点。而且很有意思的一个地方就是:Sniffer对网卡需要有针对性的安装百兆网卡和千兆网卡需要使用不同版本的Sniffer。但是它的强大完全可以弥补这一切不足,它的功能在所有同类软件中是最强大、最实用的,这些功能都需要读者自己在实践使用中去体会了。学到这里,我们应该对日常的网络通讯有了“另一种视角”的直观感受。经过各种网络通讯的抓取,我们会发现除了少数几种协议可以被还原成可识别的信息,其它大部分网络包都是无法理解的乱码。这时问题又来了:这些复杂的网络通讯包到底是什么意思? 这此,作者无法给出一个可供参考的答案,因为网络上可能发生的情况有千千万万种,各种不通的网络、各种不同的协议、各种不通的加密方式,都会通过我们的网络将文本、音频、视频等信息流入流出,如果一一列举,显然是不现实的,也不是每位朋友所能接受和记忆的。所以,我们推荐当你阅读到这里的时候,请放下手中的书本,在计算机上亲身体验一下网络分析软件的强大。如果你发现了很多完全不可理解的奇怪乱码,这也很正常,因为这正是我们在本书后面章节中所要学习的网络协议编程!网络协议在本书网络通讯协议编程中,最为关键的字眼就是“协议”了。究竟什么是“协议”呢?我们可以简单的这样想象一下,如果一个意大利人和一个中国人在互相都不会使用对方语言的情况下进行沟通,将是一件多么繁琐而没有效率的景象。但是假设这2个人都认同并使用同一种规范性的语言,例如英文,那么沟通的过程将会变得轻松起来但是同时也会变得繁琐一些。所以,协议就是一组控制数据通讯的规则。协议定义要传输什么、怎样传输以及何时传输,这就是协议的3要素:语法、语义、同步。语法,就是数据的结构和式样。相当于我们汉语语法中,“主谓宾”结构、“定补”结构、“独词句”等等这样的中文语法规则。如果我们不按照这样的规则说话,即使我们说的每个字词都是正常的汉字,大家还是会认为我们是在“语无伦次”。同时,仔我们汉语中的也存在着各种不同的方言,与之对应的情况在协议中也是存在的 ,由于协议(规则)是多种多样的,所以同时也产生了另外一个词汇:协议族。顾名思义,协议族就是由协议组成的群族,也就是在不同情况下使用的多种语法规范所构成的组合。语义,就是语句中每一部分的意思。也就是在通讯过程中接收到的每一个部分各代表什么。同步,同步有2个特性:数据在何时发送出去,数据该发送多快。这两点很容易理解,比如你不太可能在大街上排练话剧;更不会在菜市场和人讨论艺术发展史无论你说什么话,都需要配合“场合”。网络通讯也是一样,当网络发生拥塞的时候,向外发送数据显然是不合时宜的。如果一个10M光纤用户和一个56K拨号小猫用户发生通讯,光纤用户用全速发送信息则必然让拨号用户过载。OSI模型OSI模型是目前网络模型中最具有广泛性的模型。它在上世纪七十年代末期被ISO(国际标准化组织)通过,主要用于分析、了解和设计网络结构,使两个不同的系统能够通讯。需要注意的是,它仅仅只是一个模型而不是协议,所以它并不承载任何“功能”。模型由下图中的层构成,这层各自分开但是各有分工,每一层都定义了网络传输信息的一部分过程。、应用层、表示层、会话层、运输层、网络层、数据链路层、物理层左图层可以看作是个部分,最低的层(物理层、数据链路层、网络层)是整个网络的支撑,他们的任务是把一个设备上的信息传输到另一个设备。这一部分相当于战场上传递信息的通信兵,当然,作为一个士兵,他无法对自己所传输军事命令做出处理和分析,仅仅只是接受信息,然后传送到适当的地方去而已;最上面层(会话层、表示层、应用层)是用户支撑软件所需要处理的,他们使一些无关的软件系统有了互操作性。他们就像是三军联合指挥部,使一个作战意图转换成各种作战指令并传送出去,并在其中协调各兵种的调配和使用;第四层充当着两者之间的媒介,就像指挥部的参谋官一样,起到上传下达的作用。在各层之间,每层都只调用近邻的下一层服务,并被上一层调用。通讯的个设备之间互相只与对方对等的层进行信息交换。示例图如下:物理传输、应用层、表示层、会话层、运输层、网络层、数据链路层、物理层、应用层、表示层、会话层、运输层、网络层、数据链路层、物理层主机A主机B上图中物理层的实线表示物理意义上的网络传输,也就是电信号、光信号或者磁信号由一台设备传递到另一个设备的过程。以上各层的虚线代表信息的解析过程,这种解析实际上就是对信息的不断封装和不断拆解得过程。我们可以形象地理解为关于转发关于转发关于转发决议的通知的通知的通知这样的过程,每一层都会在传向下一层的时候加上自己的包头信息,而这种信息只有对方相对称的层可以解开。下面,我们来逐一介绍一下这些网络层:物理层协调在物理媒体(网线、光纤、无线电等信号传输介质)中传送比特流所需的各种功能。比特流其实就是电流、光线的通与断,在我们的这种计算机语言中,它们对应的就是byte(字节)数据类型,它代表8个或。连续不断的比特流就是由Byte数组构成的。由于任何网络通讯都必须经过物理层,也就必须变为Byte数组,因此,在后续章节中我们将大量使用到Byte 这种数据类型。数据链路层间物理层转换为可靠的链路,使得我们的数据传输不至于产生差错。这种差错往往是由于网络速度差异、网络繁忙程度造成的后发先至、拥塞等情况造成的。数据链路可以形象理解为用链条将一串珠子串成项链,不难想象,零散的珠子有可能造成排序错误,而项链则会永远保持固有的顺序和外观。网络层是我们学习协议编程中最常见到的一个网络层,它负责把分组从源点交付到终点,这可能需要跨越多个链路。网络层是确保每一个分组都能到达的手段,与之对应的下一层(数据链路层)是监督它交付结果的手段。如果两个系统处于同一个链路上(比如本机内部通讯),通常并不需要网络层完成实际操作(但是依然不可跨越,这是模型所规定的)。如果两个系统连接在不同的(网络)链路上,那么各种复杂的路由、地址转换过程都必须由网络层实现。运输层(传输层)负责把完整的报文进行源点到终点的交付。传输层是一个运行在主机上的独立应用程序。刚才介绍的网络层可以监督分组的交付,但是它并不考虑分组之间的关系。传输层正是用来处理分组的差错控制、流量控制的手段。会话层是网络对话的控制器。它建立、维持通信系统之间的切换过程。就好像在大型会议室中,需要有一个主持人来协调各个发言者之间的发言顺序和发言内容一样。表示层考虑的是两个系统所交换的信息所使用的语法和语义。这样可以防止错误的命令和信息被传输出去。应用层,实际上可以称之为一个应用程序了,它使用户(自然人或者其他计算机程序)可以接入网络。应用层提供了各种接口和服务,比如电子邮件服务SMTP和Pop3等。TCP/IPTCP/IP是一个协议族,但是它并不是严格遵循OSI七层模型的。对此并不要感到奇怪,因为TCP/IP协议族是在OSI模型之前诞生的。他们之间的对应关系可以从下图看出:、数据链路层、物理层与电气规范和网络规范相关的底层协议、网络层IP协议ICMPIGMPRARPARP、运输层SCTP TCPUDP、应用层、表示层、会话层各种应用程序SMTPFTPHTTPDNSNFS上图中背景部分是标准的OSI模型,上层叠放部分是TCP/IP模型。不难看出,虽然各层所分布的应用各有不同,当时他们将网络传输与网络应用剥离的思想其实是相同的。OSI中的最高三层在TCP/IP中叫做“应用层”,以下4层名称相同。所以在遇到“应用层”这种表述的时候,请注意分辨它指的是OSI的应用程还是TCP/IP的应用程。与OSI模型不同的是,TCP/IP网络模型中互相调用的关系是一种“分层次的”,他表示每一个上层协议都被一个或多个下层协议所支持。简单的说就是,SMTP协议使用TCP协议进行通讯,TCP协议使用IP协议通讯;而HTTP协议既可以使用TCP协议,又可以使用UDP协议。地址任何网络通讯都需要使用“地址”来进行设备的识别。我们的TCP/IP协议适用3个等级,或者叫做3个层次的地址:物理地址(也叫做链路地址,常见的Mac地址就是一种物理地址);逻辑地址(大家最熟悉的IP地址)以及端口地址。这三种地址分属于不同的网络层中,也就是说,我们将会在不同场合适用他们,而不会一次使用2、3种。应用层运输层网络层链路层物理层TCP/IP五层网络模型应用程序进程SCTPTCPUDPIP协议物理网络物理地址IP地址端口地址物理地址是设备节点的地址,他由承载它的网络规范所约束,所以长度往往有所不同,例如以太网使用6字节(48位),而LocalTalk只使用1个字节(8位)动态地址。物理地址可以是单播地址(一个设备)、多播地址(一组设备)或者广播地址(由网络决定的“所有接受设备”)。绝大多数局域网使用6个字节(48位)表示物理地址,比如网卡Mac地址就是类似于这样00-0f-e0-a9-02-e2的。我们可以使用在命令行状态下使用ARP a命令察看到和我们刚刚发生过连接的网卡Mac地址(物理地址)。很显然的,由于不同的网络适用不同的物理地址,所以在普通的、通用的通讯服务(如IP协议)上显然是无法适用了,逻辑地址由此成为必须,这种通讯地址与底层设备无关,可以很容易的适应各种网络条件。目前互联
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 5-tert-butoxy-carbonyl-amino-benzene-1-3-dicarboxylic-acid-5-tert-Butyloxycarbonyl-amino-isophthalic-acid-生命科学试剂-MCE
- 2023数学试题及答案
- 周口高三数学试题及答案
- 2026年交通运输行业深度报告:行业密码在信息安全中的应用
- 2026年化工行业报告及市场需求分析
- 2026年建筑材料行业报告:绿色建材与新型城镇化趋势
- 2026年眼镜行业市场细分领域报告
- 2026年汽车行业知识产权布局与创新发展报告
- 2026年本地生活服务行业到家服务市场发展前景报告
- 2026年航空航天材料创新进展与市场前景报告
- 2025年入党积极分子发展对象考试试题(完整版)附答案详解
- 广西柳州、桂林、北海等市2027届高三上学期10月联考地理试卷(有答案)
- 2026新教材语文 19《航天员写给孩子的信》课件
- 6.1 友谊的真谛 课件(共24张)+内嵌视频
- 2025-2026学年九年级上学期期中考试化学试题(含答案)
- 《桥梁工程试验与检测》课件-地基基础承载力检测-1
- 移动式升降工作平台(登高车)安全管理培训课件
- 化疗药物配置及管理操作规程
- 阀门定位器培训
- (零模)南昌市2025年高三年级九月测试化学试卷(含答案)
- 2024年中国烟草公司招聘笔试真题
评论
0/150
提交评论