日志分类:协议基础

链路层-协议首部(1)

2009年04月11号 00:20  |  分类:协议基础

TCP/IP支持多种不同的链路层协议,这取决于用户的实际情况,根据需求选择不同的组网方式,例如:以太网、令牌环网、FDDI、RS-232串行线路等等。

我们首先分析“以太网”的首部格式,当前,以太网是组建局域网最常用的方式。以太网这个术语一般是指数字设备公司、英特尔公司、Xerox公司在1982年联合公布的一个标准。采用一种称作CSMA/CD的媒体接入,中文意思是:带冲突检测的载波侦听多路接入,其英文全称为:Caarrier Sense,Multiple Access With Collision Detection。

1987年,IEEE的802委员会公布了一个稍有不同的标准集:IEEE802.3,特性由IEEE802.2标准来定义。遗憾的是,IEEE802.2和IEEE802.3定了一个与以太网不同的帧格式(为什么,统一标准这么难!都是利益导致的!)。文献【Stallings 1987】对所有的IEEE802标准进行了详细介绍,感兴趣的朋友可以去问问GG。

在TCP/IP中,以太网IP数据包的封装是由RFC 894中定义的(RFC是一个定义标准的文档,大家可以去http://www.ietf.org/rfc.html下载)。IEEE802网络的IP数据包封装是在RFC 1042中定义的。

链路层-入门篇

2009年04月8号 22:40  |  分类:协议基础

链路层负责接收从三层传下来的IP数据包以及ARP和RARP包。有些书上,把ARP和RARP归为第三层(注意:平时说的几层几层是针对于OSI模型而言的,并非TCP/IP协议!)的协议,还有些书把ARP和RARP直接归为二层的协议!在实际应用中,Toad觉得应该把ARP和RARP定义为二、三层之间的协议。其实,处于第几层,这不重要,想怎么归就怎么归,重要的是数据包的封装层次!这一点,我们以后会在Sniffer包中看到!接收到这些包后,经过链路层的处理,发向网络。当然,链路层还负责从网络中接收数据帧,剥离链路层首部,变为数据包传向上层协议!

这里明确一下“数据包”和“数据帧”的区别:

1、用户数据被加上IP首部后,就称为:数据包

2、数据包被加上链路层首部后,就称为:数据帧

网络中传输的是数据帧,而不是,数据包!这个概念一定要搞清楚,从物理的角度看,网线里面传输的是高、低电平。1.5V以下是低电平,3V以上是高电平,还有一种电平叫中间电平,他的物理指标为:1.5V到3V之间。因此,我们做物理层的检测时,可以判断一下这些物理参数是否正确!一高、一低正好被识别为计算机中二进制,高电平被识别为:1,低电平被识别为:0。

下一讲,我们将具体分析链路层首部!瞌睡来老,不好意思。。(砖头留着明天扔我吧,先闪人!)!

TCP/IP协议的分层(4)

2009年04月7号 21:15  |  分类:协议基础

上一讲,提出的问题,大家都有答案了吗?

分层的最大优点,个人认为主要体现在“扩展开发”方面!如果不分层,大家可以想象,一个数据帧通过网络从A机传送到B机,进入B机的链路层,最终到达B机的应用层,中途就没有任何对数据进行“深层次加工”的机会!

例如:防火墙。防火墙一般分为

1、二层防火墙

2、三层防火墙

二层防火墙是对MAC地址进行处理,三层防火墙是对IP地址进行处理!如果TCP/IP协议不分层,防火墙如何截取并处理数据包中的MAC和IP地址?就更谈不上开发单层防火墙(根据产品定位而言,当然也可以做多层防火墙)。因为,有些时候要求防火墙,仅提供简单的防护功能。例如:家用型防火墙,PC机直接与电信运营商的设备相连(ADSL上网方式),防火墙就没必要有二层的防护功能!

再举个例子:

NAT软件,如果TCP/IP不分层,NAT软件就没可能实现修改IP数据包源地址(什么是源地址,我们以后会详解)的功能!从而达到,一个公网IP供多个私网IP上INTERNET的目的!

分层,从编程的角度看,就是代码的模块化。

分层的知识,我们就讨论这么多,下一讲,我们开始分析“链路层”!

TCP/IP协议的分层(3)

2009年02月26号 01:58  |  分类:协议基础

    OK,让我们继续讲“封装”,上一篇文章,我们提到数据段被传输到了传输层,MSN的程序开发者使用的TCP协议。TCP协议接收到这个数据段后,仍然会对该数据段加入自己的相应首部、打包生成数据报,并把该数据报继续向下传输,数据报来到网络层。网络层中对该数据报进行处理的协议是IP协议,该数据报被加入IP首部变为数据包,IP协议仍然会把该数据包向下传输,进入链路层。链路层中的相应协议(这里用“相应协议”取代具体协议名称的原因,以后会解释)处理完该数据包后会把这些数据传送给网络接口驱动,最终变为一系列数据帧传向网络。这就是,“封装”的整个过程!

 

现在,大家知道了TCP/IP协议的封装过程!提一个问题,大家先思考一下,下一讲小弟会做出解释:

 

1、  为什么TCP/IP协议对用户数据采取这种逐步加工的形式,不使用一个协议完成所有的封装的工作?

TCP/IP协议的分层(2)

2009年02月23号 01:06  |  分类:协议基础
    分层的好处是什么呢?小弟是这么认为的,首先,我们从”学习TCP/IP协议”的角度看这个问题,把不同的协议归于不同的层次之中,这便于理解,为什么这么说呢?要明白这一点,我们就要知道另一个术语”封装”!先把封装的过程图贴出来,我们再解释,请看下图:

TCP/IP封装 

 

TCP/IP的层次划分,很大程度上是按照”用户数据”的走向而定的,用户数据分为两种:

 

  • 1. 需要网络传输的用户数据,例如:由网络游戏产生的数据(网络游戏可以看作是一个网络进程)。
  • 2. 不需要网络传输的用户数据,例如:由单机游戏产生的数据。

 

这里,我们只对需要网络传输的数据感兴趣!数据的走向,又分为两种:

 

  • 1. 由网络进程走向网络
  • 2. 由网络走向网络进程

 

    上图,就为”由网络进程走向网络”!网络进程工作在应用层,进程从输入设备接收用户的指示例如:用户通过键盘输入了一定信息给MSN这个程序(MSN如何精确的从键盘捕获到这些数据,这个过程,不属于协议研究的范围,感兴趣的朋友,请研究”WINDOWS的消息机制”。)。MSN进程捕获到这一系列数据后就会在这些数据的前端加入自己的相应信息,这段信息叫做:协议首部,这就是所谓的封装或者打包。并将这个数据段(不再叫用户数据)下传到传输层,前面我们已经说过,传输层包含两个协议:TCP和UDP。至于使用哪一个协议,这是根据MSN开发人员的设计而定的。TCP和UDP的区别,在这里,我们只要求大家知道,不用理解,以后,我们会详加分析!

 

TCP:面向连接、可靠的协议

UDP:无连接、不可靠协议

 

未完待续。。。。

TCP/IP协议的分层

2009年02月21号 00:47  |  分类:协议基础
 
 

      在”什么是TCP/IP协议”这篇文章中,我们初略的提到TCP/IP协议也有一个理论上的分层定义,如下图:

Tcp/ip协议层次图 

 TCP/IP协议体系中的各个协议,被人们按其自身的功能差异性和相似性分别归入了链路层、网络层、传输层中。例如:

 

链路层包含:ARP、RARP、硬件接口

网络层:IGMP、IP、ICMP

传输层:TCP、UDP

 

      强调一点,不管是OSI参考模型还是TCP/IP协议抽象层次,都是由下往上看的。最下的层次为第一层,依次往上数,区别在于TCP/IP只有四层。由于小弟研究TCP/IP协议,不是从代码的角度去研究的,因此不敢说TCP/IP中的链路层就是OSI中的物理层与链路层的浓缩,同样,TCP/IP中的应用层就完全等于OSI中的会话层+表示层+应用层。这一点,需要看完《TCP/IP详解:第二卷》的朋友,指教!

       以上,为什么没有提到TCP/IP中的应用层呢?应用层中工作的是用户进程,不是协议。对于用户进程的精确定义,需要大家向Google和百度请教,这是程序开发领域的术语!通俗的说,QQ、迅雷、PPLIVE都是用户进程,而且是网络进程,这些进程会产生,需要网络传输的用户数据。未完待续。。。。

什么是TCP/IP协议

2009年02月19号 14:51  |  分类:协议基础

 1.TCP/IP协议中的”协议”二字是什么意思?

        刚学TCP/IP协议的时候,小弟对”协议”二字深表不解。所以,现在花一定文字对此加以解释,以帮助那些同样表示不解的朋友。这里所谓的”协议”,小弟的理解是”协议=规则”。为了使网络中的终端能够互相通信,双方都必须遵守的一套规则。这里,强调一套,是因为还有其他规则(协议)可以用来实现网络通信,我们这里要研究的只是TCP/IP这一套规则而已!

 2.为什么TCP/IP协议叫TCP/IP协议?

       TCP/IP协议是一系列协议的统称,其中还包含了很多其他的协议,例如:UDP、ARP、RARP、ICMP、IGMP、PPP等等。为什么这个协议体系不叫ARP/ICMP或者UDP/PPP呢?大家,先明确一个概念:所有协议都是为了”用户数据”(这里用引号的意义是为了让大家死死记住这个术语)能够正确到达目的地而服务的!不同的协议,有其自身的功能,只有他们协同工作,才能使这个传输用户数据的任务能”尽可能”可靠的执行!在这个传输用户数据的任务中TCP和IP协议是使用最频繁的,因此把它们融合到一起,作为这个协议体系的名称!

 3. OSI参考模型与TCP/IP协议的区别

        小弟以前搞不清楚这二者的区别所在,哈哈,用了不少的时间去弄明白(悟性啊。。。)!先说OSI,这个东东只是一个理论建议!建议的什么呢?简单的说,就是,要想实现网络通信,可以这么去做,当然也可以不用这种方式,只是一个建议而已!这种建议,是非常科学的!为什么呢?首先,这种建议,把实现网络通信所要用到的一系列行为层次化了,因此,下面这张图片就诞生了:

OSI参考模型 

 那什么叫”一系列行为的层次化”?层次化与不层次化有什么区别呢?想把用户数据,通过网络顺利的传送到目的地,期间,这堆用户数据在传向网络之前需要经过数次加工(专业术语叫:封装,也叫数据打包),而且,在传送这些数据之前,也许,还需做一些辅助工作(这一系列工作,我们以后慢慢分析)。通过小弟所讲的,大家都能很容易的知道,这是一个很复杂的过程,要经历的工序非常之多。如果,OSI模型不把这些工序按照一定的规则分层,不管是对于OSI的学习者,还是借助OSI模型理论开发一套具体协议的程序员而言,都是十分困难的!这就是层次化和不层次化的最大区别!以后,小弟对这个问题,将做更深入的讲解,今天,我们只要求”点到为止”!

         那么,TCP/IP协议与OSI模型的区别在哪儿呢?上面我们提到,分层的好处之一就是降低了程序员的编码难度也缩短了开发周期!已经非常明显,TCP/IP协议就是对OSI参考模型的一种代码化!TCP/IP协议同样分为四层,这个层次只是虚拟化的,也是为了便于人们的学习和扩展开发。实物看来,就是海量的计算机代码的集合。OSI不是计算机代码的集合,他只是文字叙述的集合。TCP/IP可以控制计算机,OSI不能控制计算机,他只是用来让人看的!

Pages: Prev 1 2 3