IP协议就是个信封

 

看似复杂的原理,放到生活中也可以变得很简单。

 

讨论IP协议,不妨从寄一件快递入手,因为它们解决的都是相同的问题——如何将一个东西送到另一个地方。区别在于,一个走电路,一个走马路;一个用数据包,一个用信封;一个用IP,一个用门牌号。如果你能够理解寄一封快递为什么需要写上收件人地址,那么你也就能够理解为什么IP包头中需要一个目的IP地址。从本质上来说,二者没有任何区别。

 

寄一封快递,首先要将信写好,放入信封。用IP协议的术语来讲,这个过程叫做数据封装,信就是数据,信封就是IP头部,将信放入信封就是数据封装。然后需要在信封上写上一些东西,比如收件人地址、寄件人地址,这些相当于IP头部中的目的IP和源IP地址。有了这些信息,邮递员就知道如何进行投递。

 

在现实生活中,我们寄一封快递到此就可以了,剩下的可以完全交给邮局。那么在一个公开的网络环境中,谁来扮演邮局的角色呢?答案是路由器。一个路由器的基本职责就是进行路由。当一封信来了,路由器首先看一个它的目的地址,如果属于它的辖区,就告诉一个邮递员把信送过去,如果是发到外埠的信件,那么就把信件转发给外埠的路由器。当一封信最终到达收件人的手中,期间可能经过了若干的邮局。比如我从海淀区发一封信到朝阳区。期间可能需要经过海淀邮局->朝阳邮局,最后到某个街道的邮政所,这才由邮递员送信到某个大厦。

 

从送信的角度来看,只需要在信封(IP头部)写上收件人地址和发件人地址即可。可是IP协议的头部却比这复杂得多,为什么会有这种差异呢?通过邮局送信,是通过一个封闭的、安全的、简单的网络——邮政系统进行送信,所以它无需过多考虑安全和各种复杂的情况。而互联网则是一个开放、包容、复杂的网络,所以它面临的问题和挑战更多,因而需要更多的东西来保证信息的安全和完整。IP头部里其他的东西正是出于适应复杂网络环境的目的而存在的。IP头部的格式如下:

IP头的基本长度是20字节,即5个32位字。后面可能跟一些可选项和填充字节。我们可以把每一行作为一个基本单元来一一分析一下,看看IP跟普通邮政相比其特点在哪里。

 

第一行:版本、长度和服务

版本的作用在于使得协议具有很良好的扩充性。很多的协议,在刚被制定出来的时候仅仅是满足了当时网络环境的需求。但是随着时间的推移,到了现在,IPv4已经无法解决网络安全和地址耗尽所面临的新问题。所以又有了IPv6,但是网络中的设备是新老并存的。旧的设备未必能够处理IPv6的数据包。所以通过版本字段可以了解通信对方所使用的协议。

 

长度的作用在于使得收信方能够正确地处理收到的数据包。因为IP包长度是可变的,如果没有长度信息,无法知道信息的终点。这里要注意的是,包头长度的单位是32位字,所以一般情况下,包头长度的值为5。而总长度的单位则是8位字节,所以总长度的值表示的是字节数。

 

服务类型的作用在于指示了服务质量和优先级。我们可以把服务类型当成是给转发算法的提示,帮助转发算法根据本地策略和对路径上可用的硬件技术的了解,在抵达终点的不同路径中进行选择。

 

第二行:分片

在网络的发展过程中,传输媒介也发生过很大的变化。从最初的双绞线到同轴电缆,从光纤到无线网络。在不同的媒介中数据传输的速度不同,同时各个网络传输的数据包大小也可能不同。在有的网络中数据包可以大到几千字节,而在有的网络中则只有几十字节。这样,问题就出来了。当一个来自高速网络中的大数据包进入一个低速网络中的时候,就必须调整数据包的大小,使其适应新的网络。就好比一个大客户一下子把一火车东西从北京发到了某个农村邮局,但是那里却只有牛车。怎么办?只能把一车货物先拆开,然后用牛车一车一车的运到终点再组合起来。这就是分片和重组。

 

Identification用来标识一个分片属于哪个数据包。

Flag用来提示接收端该数据包是否属于某一个大数据,以及后面是否还有其他分片。

Fragment Offset用来标识这个分片在整个数据包中的位置。它的值表示这个数据片的起点位于原始数据包中的第几个字节。

 

第三行:生存时间、协议和校验

加入你写信的时候把地址写错了,邮政局最后会发现查无此人并把信原路退回。但在互联网中没有这样的机制,因为首先“查无此人”很难做到。互联网上的IP地址不像门牌号一样具有地域性。路由器只做两件事情,把邮件用到本辖区的某人手中,或者送到下个邮局。除非这封信在所有邮局都转过一遍,否则很难断定“查无此人”。但是在所有邮局都转一遍的开销很大,所以就在IP包头设置了一个生存时间。准确的说,这并不是一个时间。它表示的是经过的路由器的最大个数。比如生存时间设置成64,表示如果经过了64个路由器还找不到收信人,那最后一个路由器就把这个数据包扔掉吧。

 

协议用来告诉IP层应该将信件交给哪一个上层应用来处理。它类似于我们在信封上写的收件人。比如一封信寄到了一个学校的宿舍,里面住了12个人。那么谁又权利处理它呢。看一下收件人,是Bruce,那么其他人就不要看了。

 

校验的作用在于可以检测信件是否完整。因为互联网是一个开放的通信环境,任何人都有可能截获你的信件并修改它的内容。所以我们需要在信封的封口出贴上封条,这个封条就是校验和。

 

第四行:目的地址

这个很好理解了,就是哪条街道哪个房间。

 

第五行:源地址

信是你寄的,写上你的地址吧,万一对方要回信呢。

 

第六行及其后:选项和填充

选项的主要作用是测试和调试网络。常用的选项有:

记录路由选项——它会将经过的路由器IP地址记录在选项中。

源路由选项——它可以指定一条路径,然后该数据包必须按照这条路径来路由。

时间戳选项——它会记录经过每一个路由器的时间。

 

这样,IP的任务就完成了。它就是一个信封,告诉路由器和邮递员们如何进行交付。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值