📄 rfc1180.txt
字号:
TCP UDP
\ /
\ /
--------------
| IP |
| |
| --- |
| / \ |
| / v |
--------------
/ \
/ \
数据 数据
由此 由此
输入 输出
图5. 一个转发IP包的例子
把一个IP包转发至另一个网络的过程叫做IP包的"转发".一台被用作转发IP包的计算机叫做"IP-路由器".
你从上图可以看出,被转发的IP包在IP-路由器上不会接触TCP和UDP模块.有些IP-路由器的实现中也不包括TCP或
UDP模块.
2.5 IP建立了一个单独的逻辑网络
IP模块是Internet技术成功的关键所在.当消息向协议栈下层传输时,每个模块或者驱动程序都在消息的前面加上
自己的头部;当消息从协议栈下层向上层的应用程序传输时,每个模块或者驱动程序都将自己的头部剥离.IP头部
包含有IP地址,正是IP地址把各种不同的物理网络联系在一起,建立起一个单独的逻辑网络.物理网络的互相连接
也正是"internet"这个名称的由来.物理上互相连接在一起,并且限制IP包范围的网络就叫做"internet".
2.6 物理网络的独立性
对于网络应用程序来说,IP将下层的物理网络硬件隐藏了起来.如果你发名了一种新的物理网络,并且想让它在
Internet上投入使用,你只需要再为它写一个与IP连接的驱动程序就可以了.这样,你使用的网络应用程序不会因
为硬件技术的变化而发生任何变化.
2.7 互用性
如果两台Internet上的计算机能够互相通信,我们则称它们能够"互用";如果一个Internet技术的实现是好的,我
们则说它有"互用性".普通计算机用户们得益于Internet,正是由于其"互用性".一般来说,正是由于计算机具有
"互用性",你才会买下它.如果一台计算机不具备"互用性",或者无法添加"互用性",它将很难找到市场.
2.8 综述后记
在建立足够的背景知识后,我们将能够回答下面的问题:
发出一个IP包的时候,目标以太地址是如何确定的?
发送IP包的时候,IP如何知道该使用众多底层网络接口中的哪一个?
一台计算机上的客户端如何到达另一台计算机上的服务端?
为什么TCP和UDP都存在,而不是只有其中之一?
什么样的网络应用程序是可用的?
在下面关于以太网的讲解中,我们将依次回答这些问题.
3. 以太网
本部分是对以太网技术的简短介绍.
一个以太帧含有目标地址,源地址,类型区,以及数据.
以太地址的长度是六个字节.每个设备都有自己的以太地址,并且时刻监听目标地址为其以太地址的以太帧.所有
的设备也同时监听一个这样的地址"FF-FF-FF-FF-FF-FF"(用十六进制表示),这个地址被称为"广播地址".
以太网使用CSMA/CD (Carrier Sense and Multiple Access with Collision Detection).CSMA/CD意思是,所有
的设备利用同一个媒介通信,每一时刻只能传输一个设备的信息,但它们可以同时接收信息.如果两个设备试图在
同一时刻传输,将发生传输冲突,检测到冲突后,两个设备都会等待一段随机的时间(很短)再进行传输.
3.1 一个人类的比喻
关于以太网,有一个有关人类的很好比喻:一群人在一个很小,并且完全黑暗的房间里交谈.在这个比喻里,物理网
络媒介是传播声波的屋内空气,而不是传输信号的同轴电缆.
一个人说话,每个人都能听到(Carrier Sense).房间里的每个人都有相同的说话能力(Multiple Access).但是,
由于遵守礼节的关系,每个人的讲话都不会很冗长.如果某个人不礼貌,他将被请出这个房间(被抛到网络外面).
不会有人在别人讲话的时候交谈.但是如果两个人在同一时刻开始讲话,他们两个都会立即发现这一情况.因为他
们听到了有不同于自己的话音想起(Collision Detection).当两个人意识到这种情况时,他们每个人都会停下来
等待一段时间,然后一个人开始讲话.另一个人听到这个人开始讲话,就等待对方讲完,然后再开始自己的讲话.
每个人有一个唯一的名字(唯一的以太地址)以避免混乱.每个人开始讲话的时候,他都要首先说出他想要交谈的
人的名字,以及他自己的名字(依次是目标以太地址,源以太地址),例如:"你好,Jane,我是Jack,.............".
如果谈话人想跟每个人说话,他应该说"所有人"(广播地址),例如:"大家好,我Jack,.................".
4. ARP(地址解析协议)
当发出一个IP包的时候,目标以太地址是怎样确定的?
ARP(地址解析协议)就是用来把IP地址解析成以太地址的.它只对向外发送的IP包进行地址解析,因为这时正是IP
头部和以太头部建立的时候.
4.1 用于地址解析的ARP表
地址的解析是通过查表来完成的.这个表就是ARP表,它被存储于内存中,里面有与每台计算机对应的记录.ARP表中
有一个IP地址字段和一个以太地址字段.当把一个IP地址翻译成一个以太地址的时候,会对ARP表进行以IP地址为
匹配条件的查询.下面就是一个简化过的ARP表:
------------------------------------
|IP地址 以太地址 |
------------------------------------
|223.1.2.1 08-00-39-00-2F-C3|
|223.1.2.3 08-00-5A-21-A7-22|
|223.1.2.4 08-00-10-99-AC-54|
------------------------------------
表 1. ARP表范例
人们书写四个字节的IP地址的习惯,是以十进制写出每个字节,以小数点做分隔符号.书写六个字节的以太地址的
习惯,是以十六进制写出每个字节,以减号或者冒号做分隔符号.
因为IP地址和以太地址都是单独选择的,所以ARP表是可行的.你不能用某种运算法则来实现从IP地址到以太地址
的转换.IP地址是由网络管理员根据计算机所处的位置所决定的.当一台计算机被移动到网络的另一个地方,它的
IP地址也必须改变.以太地址则是由以太接口设备生产厂商根据他们自己得到的授权范围规定的.当以太接口设备
的接口板改变的时候,以太地址才会改变.
4.2 典型的地址解析过程
在运行一个普通的网络应用程序时,例如TELNET,先给TCP发出一个应用程序消息,然后TCP发出相应的TCP消息给IP
模块.目标IP地址对应用程序,TCP模块,IP模块都是可知的.就这一点看来,IP包已经构造完毕,做好了向以太驱动
程序发送的准备.但是,必须首先确定目标的以太地址.
ARP表就是被用来查询目标以太地址的.
4.3 ARP请求和应答.
首先,ARP表是怎样填充的?答案是,ARP表是在基于需求的基础上自动填充的.
在以下两种情况下,ARP表不能被用来解析地址:
1. ARP请求包的目标地址是广播地址,即它是发给网络上的每台机器的.
2. 向外发送的IP包正在队列中.
每台计算机的以太接口都能收到广播以太帧.以太网驱动程序检查以太帧的类型区,并把ARP包传送给ARP模块.ARP
请求包好像在说:"如果你的IP地址和这个目标IP地址相符合,请告诉我你的以太地址."一个ARP请求包看起来就像
下面这个样子:
---------------------------------------
|发送者IP地址 223.1.2.1 |
|发送者以太地址 08-00-39-00-2F-C3|
---------------------------------------
|目标IP地址 223.1.2.2 |
|目标以太地址 <blank> |
---------------------------------------
表 2. ARP 请求范例
每个ARP模块都会对ARP请求包的IP地址,看其是否与自己的IP地址一致,如果一致,它将直接向源以太地址发送一
个应答.ARP应答包好像在说:"是的,你的目标IP地址是我的IP地址.现在,把我的以太地址给你."与ARP请求包相比,
ARP应答包的发送/目标区域正好对换了一下位置.它看上去就像下面这个样子:
---------------------------------------
|发送者IP地址 223.1.2.2 |
|发送者以太地址 08-00-28-00-38-A9|
---------------------------------------
|目标IP地址 223.1.2.1 |
|目标以太地址 08-00-39-00-2F-C3|
---------------------------------------
表 3. ARP 应答范例
这个应答会被原来的发送者接收到.它的以太驱动程序查看这个以太帧的类型区,然后将这个ARP包传送给ARP模块.
ARP模块会检查这个ARP包,并且把发送者的IP地址和以太地址添加到自己的ARP表中.
更新后的ARP表看上去就是这个样子:
----------------------------------
|IP 地址 以太地址 |
----------------------------------
|223.1.2.1 08-00-39-00-2F-C3|
|223.1.2.2 08-00-28-00-38-A9|
|223.1.2.3 08-00-5A-21-A7-22|
|223.1.2.4 08-00-10-99-AC-54|
----------------------------------
表 4. 收到应答后的ARP表
4.4 后续过程
新的解析就是这样自动地加到了ARP表里,在极短的一段时间之后,它马上就会被用到.你应该还记得上面讲的第二
个步骤,发送的IP包在队列中等待.下一步,将通过查ARP表把IP地址解析成以太地址,然后,以太帧就被发送到了以
太网上.因此,加上这些新的步骤3,4和5,对于发送方计算机,整个过程是这样的:
1. 一个带有广播以太地址的ARP请求包被发向网络上的每台计算机.
2. 向外发送的IP包排进队列等待.
3. 收到ARP回应包,里面包含了从IP到以太地址的转换,并被加入ARP表中.
4. 用ARP表为队列中的IP包查询,将IP地址解析为以太地址.
5. 以太帧被发向以太网.
概括的说,当在ARP表里查不到IP地址对应的以太地址时,就将这个IP包先排进队列等待,然后迅速通过ARP请求/
应答过程将ARP表的这项记录填上,然后为队列中的IP包查表解析,最后将其发送出去.
在计算机里,每个以太接口对应自己的ARP表.如果目标计算机不存在,那将没有ARP应答,从而ARP表中没有与之对
应的记录.IP将会丢弃发向这个目标地址的包.更上层的协议无法根据目标地址判断究竟是网络问题,还是目标主
机不存在.
在某些IP和ARP的实现中,不把等待应答的IP包排入队列,而是把IP包丢弃,并且把恢复丢弃的包的任务交给TCP模
块,或者UDP网络应用程序.这里的恢复是通过超时重传来实现的.发送的消息可以成功地到达目的地,因为先前发
出的那个消息的拷贝已经使ARP表相应的记录得以填充.
5. 网际协议(Internet Protocol)
IP模块是Internet技术的核心,而IP的基本是它的路由表.IP利用存储器里的表格来确定对IP包的路由选择.路由
表的内容是由网络管理员规定的.路由表的错误会导致通信的阻塞.
理解路由表的使用就是理解Internet网络.对这些知识的了解有助于成功地管理和维护一个IP网络.
为了更好地理解路由表,我们首先应该对路由和IP地址有个大致的了解,然后再研究细节内容.
5.1 直接路由
下图所示的是一个只包含三台计算机:A,B和C的小型Internet.每台计算机都有如图1所示的相同的TCP/IP协议栈.
每台计算机的以太网接口都有自己的以太地址.每台计算机都被网络管理者分配了IP地址.管理者也为这个以太网
分配了一个IP网络号.
A B C
| | |
--o------o------o--
以太网 1
IP网络 "development"
图 6. 一个IP网络
当A向B发送一个IP包,则IP头部会包含A的IP地址做为源IP地址,以太头部会包含A的以太地址做为源以太地址.同
样,IP头部包含B的IP地址做为目的IP地址,以太头部包含B的以太地址做为目的以太地址.
----------------------------------------
|地址 源 目的 |
----------------------------------------
|IP头部 A B |
|以太头部 A B |
----------------------------------------
表 5. 一个从A到B IP包的以太帧里包含的地址
在这个简单的例子里,IP好像呆在上面没对下层的以太网作什么服务.但实际上,IP起到了一定的作用,并且消耗了
一部分系统资源:额外的CPU操作和网络带宽,以产生,传输和分析IP头部.
当B的IP模块收到从A发来的IP包,它检查这个包的目的IP地址,并和自己的IP地址作比较,看是否相符.如果是,它
就把这个数据报传送给上层的协议.
A和B之间的通信使用的就是直接路由.
5.2 间接路由
下面图中所示的情况是对Internet更现实的一种表示.它由三个以太网络和三个IP网络组成,连接它们的是一个叫
做计算机D的IP路由器.每个IP网络有四台计算机;每台计算机有自己的IP地址和以太地址.
A B C ----D---- E F G
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -