意大利种马中文版ed2k:TCP/IP协议栈与数据包封装

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 20:23:33
TCP/IP协议栈与数据包封装
1. TCP/IP协议栈与数据包封装请点评
TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示(该图出自[TCPIP])。
图 36.1. TCP/IP协议栈

两台计算机通过TCP/IP协议通讯的过程如下所示(该图出自[TCPIP])。
图 36.2. TCP/IP通讯过程

传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示(该图出自[TCPIP])。
图 36.3. TCP/IP数据包的封装

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示(该图出自[TCPIP])。
图 36.4. 跨路由器通讯过程

其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。
链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。
网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识,Internet上有大量路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。
网络层负责点到点(point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。传输层可选择TCP或UDP协议。TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP传输的双方需要首先建立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。UDP协议不面向连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。
目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?整个过程如下图所示(该图出自[TCPIP])。
图 36.5. Multiplexing过程

以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。
注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。本文对RARP、ICMP、IGMP协议不做进一步介绍,有兴趣的读者可以看参考资料。
posted @ 2009-12-03 11:51 小白->天使 阅读(490) 评论(0)编辑
STP(Spanning Tree Protocol
STP(Spanning Tree Protocol)是生成树协议的英文缩写。该协议可应用于环路网络,通过一定的算法实现路径冗余,同时将环路网络修剪成无环路的树型网络,从而避免报文在环路网络中的增生和无限循环。
STP的基本原理是,通过在交换机之间传递一种特殊的协议报文(在IEEE 802.1D中这种协议报文被称为“配置消息”)来确定网络的拓扑结构。配置消息中包含了足够的信息来保证交换机完成生成树计算。
生成树协议STP/RSTP
1. 技术原理:
STP的基本思想就是生成“一棵树”,树的根是一个称为根桥的交换机,根据设置不同,不同的交换机会被选为根桥,但任意时刻只能有一个根桥。由根桥开始,逐级形成一棵树,根桥定时发送配置报文,非根桥接收配置报文并转发,如果某台交换机能够从两个以上的端口接收到配置报文,则说明从该交换机到根有不止一条路径,便构成了循环回路,此时交换机根据端口的配置选出一个端口并把其他的端口阻塞,消除循环。当某个端口长时间不能接收到配置报文的时候,交换机认为端口的配置超时,网络拓扑可能已经改变,此时重新计算网络拓扑,重新生成一棵树。
posted @ 2009-12-03 11:42 小白->天使 阅读(97) 评论(0)编辑
UML实践----用例图、顺序图、状态图、类图、包图、协作图
UML实践----用例图、顺序图、状态图、类图、包图、协作图
2009-01-20 作者:Randy Miller 来源:网络
面向对象的问题的处理的关键是建模问题。建模可以把在复杂世界的许多重要的细节给抽象出。许多建模工具封装了UML(也就是Unified Modeling Language?),这篇课程的目的是展示出UML的精彩之处。
UML中有九种建模的图标,即:
用例图 类图 对象图 顺序图 协作图 状态图 活动图 组件图 配置图
本课程中的某些部分包含了这些图的细节信息的页面链接。而且每个部分都有一个小问题,测试一下你对这个部分的理解。
为什么UML很重要?
为了回答这个问题,我们看看建筑行业。设计师设计出房子。施工人员使用这个设计来建造房子。建筑越复杂,设计师和施工人员之间的交流就越重要。蓝图就成为了这个行业中的设计师和施工人员的必修课。
写软件就好像建造建筑物一样。系统越复杂,参与编写与配置软件的人员之间的交流也就越重要。在过去十年里UML就成为分析师,设计师和程序员之间的“建筑蓝图”。现在它已经成为了软件行业的一部分了。UML提供了分析师,设计师和程序员之间在软件设计时的通用语言。
UML被应用到面向对象的问题的解决上。想要学习UML必须熟悉面向对象解决问题的根本原则――都是从模型的建造开始的。一个模型model就是根本问题的抽象。域domain就是问题所处的真实世界。
模型是由对象objects组成的,它们之间通过相互发送消息messages来相互作用的。记住把一个对象想象成“活着的”。对象有他们知道的事(属性attributes)和他们可以做的事(行为或操作behaviors or operations)。对象的属性的值决定了它的状态state。
类Classes是对象的“蓝图”。一个类在一个单独的实体中封装了属性(数据)和行为(方法或函数)。对象是类的实例instances。
用例图
用例图Use case diagrams描述了作为一个外部的观察者的视角对系统的印象。强调这个系统是什么而不是这个系统怎么工作。
用例图与情节紧紧相关的。情节scenario是指当某个人与系统进行互动时发生的情况。下面是一个医院门诊部的情节。
“一个病人打电话给门诊部预约一年一次的身体检查。接待员找出在预约记录本上找出最近的没有预约过的时间,并记上那个时间的预约记录。”
用例Use case是为了完成一个工作或者达到一个目的的一系列情节的总和。角色actor是发动与这个工作有关的事件的人或者事情。角色简单的扮演着人或者对象的作用。下面的图是一个门诊部Make Appointment用例。角色是病人。角色与用例的联系是通讯联系communication association(或简称通讯communication)

角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线。
一个用例图是角色,用例,和它们之间的联系的集合。我们已经把Make Appointment作为一个含有四个角色和四个用例的图的一部分。注意一个单独的用例可以有多个角色。

用例图在三个领域很有作用。
决定特征(需求)。当系统已经分析好并且设计成型时,新的用例产生新的需求 客户通讯。使用用例图很容易表示开发者与客户之间的联系。 产生测试用例。一个用例的情节可能产生这些情节的一批测试用例。
类图
类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统。类图是静态的-它们显示出什么可以产生影响但不会告诉你什么时候产生影响。
下面是一个顾客从零售商处预定商品的模型的类图。中心的类是Order。连接它的是购买货物的Customer和Payment。Payment有三种形式:Cash,Check,或者Credit。订单包括OrderDetails(line item),每个这种类都连着Item。

UML类的符号是一个被划分成三块的方框:类名,属性,和操作。抽象类的名字,像Payment是斜体的。类之间的关系是连接线。
类图有三种关系。
关联association-表示两种类的实例间的关系。如果一个类的实例必须要用另一个类的实例才能完成工作时就要用关联。在图中,关联用两个类之间的连线表示。 聚合aggregation-当一个类属于一个容器是的一种特殊关系。聚合用一个带菱形的连线,菱形指向具有整体性质的类。在我们的图里,Order是OrderDetails的容器。 泛化generalization-一个指向以其他类作为超类的继承连线。泛化关系用一个三角形指向超类。Payment是Cash,Check和Credit的超类。
一个关联有两个尾端。每个尾端可以有一个角色名role name来说明关联的作用。比如,一个OrderDetail实例是一个Order实例的项目。
关联上的方向性navigability箭头表示该关联传递或查询的方向。OrderDetail类可以查询他的Item,但不可以反过来查询。箭头方向同样可以告诉你哪个类拥有这个关联的实现;也就是,OrderDetail拥有Item。没有方向性的箭头的关联是双向。
关联尾端的数字表示该关联另一边的一个实例可以对应的数字端的实例的格数,通过这种方式表达关联的多样性multiplicity。多样性的数字可以是一个单独的数字或者是一个数字的范围。在例子中,每个Order只有一个Customer,但一个Customer可以有任意多个Order。
下面这个表给出了最普遍的多样性示例。
多样性意义
0..10或1个实例. n..m符号表示有n到m个实例
0..*  or  *没有实例格数的限制(包括没有).
1只有一个实例
1..*最少一个实例
每个类图包括类,关联和多样性表示。方向性和角色是为了使图示得更清楚时可选的项目。
包和对象图
为了简单地表示出复杂的类图,可以把类组合成包packages。一个包是UML上有逻辑关系的元件的集合。下面这个图是是一个把类组合成包的一个商业模型。
dependencies关系。如果另一个的包B改变可能会导致一个包A改变,则包A依赖包B。

包是用一个在上方带有小标签的矩形表示的。包名写在标签上或者在矩形里面。点化线箭头表示依赖
对象图Object diagrams用来表示类的实例。他们在解释复杂关系的细小问题时(特别是递归关系时)很有用。
这个类图示一个大学的Department可以包括其他很多的Departments。

这个对象图示上面类图的实例。用了很多具体的例子。
UML中实例名带有下划线。只要意思清楚,类或实例名可以在对象图中被省略。

每个类图的矩形对应了一个单独的实例。实例名称中所强调的UML图表。类或实例的名称可能是省略对象图表只要图的意义仍然是明确的。
顺序图
类图和对象图是静态模型的视图。交互图是动态的。他们描述了对象间的交互作用。
顺序图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。
消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。

协作图
协作图也是互动的图表。他们像序列图一样也传递相同的信息,但他们不关心什么时候消息被传递,只关心对象的角色。在序列图中,对象的角色放在上面而消息则是连接线。

对象角色矩形上标有类或对象名(或者都有)。类名前面有个冒号(:)。
协作图的每个消息都有一个序列号。顶层消息的数字是1。同一个等级的消息(也就是同一个调用中的消息)有同样的数字前缀,再根据他们出现的顺序增加一个后缀1,2等等。
状态图
对象拥有行为和状态。对象的状态是由对象当前的行动和条件决定的。状态图statechart diagram显示出了对象可能的状态以及由状态改变而导致的转移。
我们的模型例图建立了一个银行的在线登录系统。登录过程包括输入合法的密码和个人账号,再提交给系统验证信息。
登录系统可以被划分为四种不重叠的状态:Getting SSN, Getting PIN, Validating, 以及 Rejecting。每个状态都有一套完整的转移transitions来决定状态的顺序。

状态是用圆角矩形来表示的。转移则是使用带箭头的连线表示。触发转移的事件或者条件写在箭头的旁边。我们的图上有两个自转移。一个是在Getting SSN,另一个则在上Getting PIN。
初始状态(黑色圆圈)是开始动作的虚拟开始。结束状态也是动作的虚拟结束。
事件或条件触发动作时用(/动作)表示。当进入Validating状态时,对象并不等外部事件触发转移。取而代之,它产生一个动作。动作的结果决定了下一步的状态。
活动图
活动图activity diagram是一个很特别的流程图。活动图和状态图之间是有关系的。状态图把焦点集中在过程中的对象身上,而活动图则集中在一个单独过程动作流程。活动图告诉了我们活动之间的依赖关系。
对我们的例子来说,我们使用如下的过程。
“通过ATM来取钱。”
这个活动有三个类Customer, ATM和 Bank。整个过程从黑色圆圈开始到黑白的同心圆结束。活动用圆角矩形表示。

活动图可以被分解成许多对象泳道swimlanes ,可以决定哪些对象负责那些活动。每个活动都有一个单独的转移transition连接这其他的活动。
转移可能分支branch成两个以上的互斥的转移。保护表达式(在[]中)表示转移是从一个分支中引出的。分支以及分支结束时的合并merge在图中用菱形表示。
转移也可以分解fork成两个以上的并行活动。分解以及分解结束时的线程结合join在图中用粗黑线表示
组件与配置图
组件component是代码模块。组件图是是类图的物理实现。
配置图Deployment diagrams则是显示软件及硬件的配置。
下面的配置图说明了与房地产事务有关的软件及硬件组件的关系。

物理上的硬件使用节点nodes表示。每个组件属于一个节点。组件用左上角带有两个小矩形的矩形表示。
原文链接:http://dn.codegear.com/article/31863
posted @ 2009-12-03 11:40 小白->天使 阅读(345) 评论(0)编辑
CDMA2000、WCDMA和TD-SCDMA三种技术比较
CDMA2000、WCDMA和TD-SCDMA三种技术比较
1下一篇文章
虽然CDMA2000、WCDMA和TD-SCDMA同属3G的主流技术标准,但是仍然可以将其分为两类:CDMA2000、WCDMA并作一类,TD-SCDMA则和前两者分开讨论。之所以可以这样做,是因为在技术上CDMA2000和WCDMA是FDD的标准,而TD-SCDMA则是一个TDD标准。
1. WCDMA与CDMA2000
WCDMA和CDMA2000都满足IMT-2000提出的全部技术要求,包括支持高比特率多媒体业务、分组数据和IP接入等。这两种系统的无线传输技术均基于DS-CDMA作为多用户接入技术,单就技术来说,WCDMA和CDMA2000在技术先进性和发展成熟度上各具优势,但总体来看,WCDMA似乎更胜一筹,以下是WCDMA相对CDMA2000的一些优势所在:
(1) WCDMA使用的带宽和码片速率(3.84Mcps)是CDMA2000 1x演进家族的三倍以上,因而能提供更大的多路径分集、更高的中继增益和更小的信号开销。此外,更高的码片速率也改善了接收机解决多径效应的能力。
(2) WCDMA在小区站点同步方面的设计是使用异步基站,而CDMA2000基站则通常通过GPS实现同步,这将造成室内和城市小区(采用室内天线)部署的困难。
(3)由于支持1xEV-DO的TDM接入系统采用共享时分复用下行链路,它具有固定时隙,因此CDMA2000物理层兼容性较差。
(4) WCDMA较CDMA2000能够更加灵活地处理话音和数据混合业务。
(5) WCDMA进行功率控制的频率几乎是CDMA2000的两倍,达到每秒1500次(1.5kHz),因而能保证更好的信号质量,并支持更多的用户。
(6) CDMA2000的导频信道大约需要下行链路总传输功率的20%,相比之下WCDMA只需要约10%,因而可以节省更多的公用信道的开销。
(7)为支持基于GSM的GPRS业务而部署的所有业务(如计费、安全、漫游等)也支持WCDMA业务,而为了完善新的数据/话音网络,CDMA2000 1x必须添加额外的网元或进行功能的升级。
(8)在混合话音和数据流量方面,WCDMA的系统性能比CDMA2000也表现得更加出色。因此,从技术的角度来讲,WCDMA具备一定优势,各家电信企业也因此更加倾向于采用该标准。
另外,在传统网络基础和市场推广上,WCDMA占据着更大的优势。由于全球移动系统有85%都在用的GSM系统,而GSM向3G过渡的最佳途径就是历经GPRS演进到WCDMA,所以传统网络上的绝对优势使得CDMA2000难以对WCDMA望其项背。在中国,CDMA2000标准则可能有2G时代即依托CDMA的中国联通会采用。
2. TD-SCDMA 与WCDMA和CDMA2000的比较
TD-SCDMA与WCDMA和CDMA2000相比,具有如下的特点和优势:
(1)频谱利用率高:TD-SCDMA采用TDD方式和CDMA和TDMA的多址技术,在传输中很容易针对不同类型的业务设置上、下行链路转换点,因而可以使总的频谱效率更高。
(2)支持多种通信接口:TD-SCDMA同时满足Iub、A、Gb、Iu、IuR多种接口要求,基站子系统既可作为2G和2.5G的GSM基站的扩容,又可作为3G网中的基站子系统,能同时兼顾现在的需求和未来长远的发展。
(3)频谱灵活性强:TD-SCDMA第三代移动通信系统频谱灵活性强,仅需单一1.6M的频带就可提供速率达2M的3G业务需求,而且非常适合非对称业务的传输。
(4)系统性能稳定:TD-SCDMA收发在同一频段上,上行链路和下行链路的无线环境一致性很好,更适合使用新兴的"智能天线"技术;利用了CDMA和TDMA结合的多址方式,更利于联合检测技术的采用,这些技术都能减少了干扰,提高系统的性能稳定性。
(5)与传统系统兼容性好:TD-SCDMA支持现存的覆盖结构,信令协议可以后向兼容,网络不必引入新的呼叫模式,能够实现从现存的通信系统到下一代移动通信系统的平滑过渡。
(6)系统设备成本低:TD-SCDMA上下行工作于同一频率,对称的电波传播特性使之便于利用智能天线等新技术,这也可达到降低成本的目的;
(7)在无线基站方面,TD-SCDMA的设备成本也比较低;
(8)支持与传统系统间的切换功能:TD-SCDMA技术支持多载波直接扩频系统,可以再利用现有的框架设备、小区规划、****作系统、账单系统等,在所有环境下支持对称或不对称的数据速率。
当然,与前两种标准相比,尤其是与WCDMA比起来,TD-SCDMA也有"尚显稚嫩"的地方。比如,在对CDMA技术的利用方面,TD-SCDMA因要与GSM的小区兼容,小区复用系数为3,降低了频谱利用率。又因为TD-SCDMA频带宽度窄,不能充分利用多径,降低了系统效率,实现软切换和软容量能力较困难。另外,TD-SCDMA系统要精确定时,小区间保持同步,对定时系统要求高。而WCDMA则不需要小区间同步,可适应室内、室外,甚至地铁等不同的环境的应用。另外,WCDMA对移动性的支持更加优质,适合宏蜂窝、蜂窝、微蜂窝组网,而TD-SCDMA只适合微蜂窝,对高速移动的支持也较差。尤其是在从GSM网向3G的过渡过程中,WCDMA的优势更加明显。
三种主流的3G技术标准WCDMA、CDMA2000和TD-SCDMA,在技术上各有千秋,从目前的情况来看,不会出现哪种标准"一统江湖"的局面,而至于谁能在3G时代占据更大的市场份额,关键是看哪个技术标准更符合市场需求和竞争的需要。对于这个问题的分析,除了各项技术特点以及厂家供货环境、全球范围内广泛采用的程度等入手外,还要结合各国国情、各运营商的具体情况以及市场竞争等因素进行考虑。
posted @ 2009-12-03 11:10 小白->天使 阅读(684) 评论(0)编辑
用数组模拟堆栈
代码 // simulateStackusingArray.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
using namespace std;
const int size = 100;
template
class IStack
...{
public:
IStack();
T pop ();
int push (T);
int display();
private:
T IArray [size];
int count;
};
template
IStack::IStack()
...{
for (int i = 0; i...{
IArray[i] = 0;
}
count=0;
}
template
T IStack::pop()
...{
T temp =IArray[count-1];
count--;
return temp;
}
template
int IStack::push(T rhs)
...{
IArray [count++]=rhs;
return 0;
}
template
int IStack::display()
...{
for (int i = 0; i...{
cout << IArray[i] << " ";
}
return 0;
}
//template
//int IStack::getcount()
//{
// return count;
//}
int main()
...{
IStack istack;
istack.push(2);
istack.push(4);
istack.push(3);
istack.pop();
istack.display();
return 0;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/weiweitj/archive/2008/04/27/2336067.aspx
posted @ 2009-12-03 09:58 小白->天使 阅读(135) 评论(0)编辑
The waterfall model
The waterfall model is a popular version of thesystems development life cycle model for software engineering. Often considered the classic approach to the systems development life cycle, the waterfall model describes a development method that is linear and sequential. Waterfall development has distinct goals for each phase of development. Imagine a waterfall on the cliff of a steep mountain. Once the water has flowed over the edge of the cliff and has begun its journey down the side of the mountain, it cannot turn back. It is the same with waterfall development. Once a phase of development is completed, the development proceeds to the next phase and there is no turning back.
In Royce's original Waterfall model, the following phases are followed in order:
Requirements specificationDesign Construction (AKAimplementation or coding) Integration Testing anddebugging (AKA Validation)InstallationMaintenance
To follow the waterfall model, one proceeds from one phase to the next in a purely sequential manner. For example, one first completes requirements specification, which are set in stone. When the requirements are fully completed, one proceeds to design. The software in question is designed and a blueprint is drawn for implementers (coders) to follow — this design should be a plan for implementing the requirements given. When the design is fully completed, an implementation of that design is made by coders. Towards the later stages of this implementation phase, separate software components produced are combined to introduce new functionality and reduced risk through the removal of errors.
Thus the waterfall model maintains that one should move to a phase only when its preceding phase is completed and perfected. However, there are variousmodified waterfall models (including Royce's final model) that may include slight or major variations upon this process.
The advantage of waterfall development is that it allows for departmentalization and managerial control.
The disadvantage of waterfall development is that it does not allow for much reflection or revision.