码迷,mamicode.com
首页 > 其他好文 > 详细

计算机网络包解析

时间:2015-06-23 00:38:34      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

转 http://www.cnblogs.com/jianxinzhou/p/4594027.html

1 Introduction

所谓的InternetWorking就是将很多网络连接起来,那么在这种连接的网络下我们该如何传送封包呢?

2 IP and Routers

1 IP Datagram Header Format

技术分享

IP Address:目前IP地址均是32个bit,称为IPV4。未来会使用IPV6,128个bit。

Identification:Router本身将封包收下来,经过查表后,会将封包从某一个网络或者说port转发出去,但是Router周围的网络是不同的(例如从Ethernet丢到WIFI,或者从WIFI丢到Ethernet),注意每一个网络都有一个很重要的特性称为MTU(Maximal Transmission Unit),MTU规定了在这个网络上传输的封包的大小上限。如果Router收进来的封包太大,并且要进到MTU比较小的网络中时,那么,不可避免的要将封包进行切割,一个封包可能会被切割成好多个封包。封包经过切割之后,最终仍然要将其组合起来,那么这些经过切割的小片段最终进行组合的时候,怎么知道哪些小片段是经同一个封包切割出来的呢?这就是Identification的作用,Id相同则代表这些小片段原来隶属于同一个datagram。

Fragment Offset:datagram经IP(Internet Protocal)传送,只是best effort,因此datagram可能会不见,可能会out of order。因此,将datagram切割成小片段丢到网络中后,最终目的主机收到时,顺序就不见得一致。我们只知道收到的这几个片段是属于同一个IP Address的,而它们的位置(哪个在第一个?哪个在第二个?) 需要Fragment offset来确定,offset即为偏移的意思,记录了每一个小片段相对于Data中开始位置的偏移量。

Protocal:在网络的7层架构中,IP在第三层,而Protocal字段标记了上一层的Protocal是什么,是TCP?是UDP?

Time to Live:封包在Internet上可以存活的时间,设置该时间,避免在已经迷航的封包在Internet上绕了很久还是绕不出去。Router本身在帮助我们转送封包时,会根据网络的状态,随时调整路线,可能存在一个封包经由一个路由器转送出去后,之后又绕回来的情况,封包可能会发生迷路,被不断的转来转去,但是始终绕不出去。遇到这种情况该怎么办?我们不可能让此类封包永久的留存,以防这样的封包越来越多,最终将我们的Internet塞爆掉。假设将Time to Live的值设为128,那么每经过Router的一次转送,这个值就会减1,128就代表经过128个Router之后这个值就会减为0,减为0之后,Router就会将该封包丢掉。

Flags

技术分享

DF:可以设置datagram在传送过程中不允许被切割。如果datagram要从一个Port送出去,可是这个datagram太大,而且又被告知不允许被切割,那怎么办?只有两条路,一是走另外一条路,二,如果找不到一条可以使datagram经过的网络,那么只能将该datagram丢掉。

MF:目的主机收到小片段后,如果标记为More Fragment,表示后面还有小片段。

Total length:封包的大小。

Header Checksum:header的范围如下图,红线圈起来的部分。

技术分享

将header的内容做一次检查,避免出错,因为要做Routing。Router收到封包之后,会根据Destination IP Address做检查,避免出错,走错路。因此,header有错误,封包仍然需要丢掉。

version:标记IP的版本。现在全世界最流行的IP版本是第4版。

Type of Service:指出这个封包本身到底应该得到什么样的服务。来看下图:

技术分享

Type of Service 本身是一个8个bit的栏位。

Precedence:重要性的意思。是一般data的封包?还是网络的控制封包?将封包本身的重要性做了一个设定。

Delay:服务的品质。这个封包传送是正常的延迟还是低延迟。IP封包进到Router之后,由于Router同时要处理的封包的量非常的大(可能是一秒钟几百万甚至几千万),即使经过查表后,确定从某个Port送出去,这个Port处理的封包量仍然很大,也需要Queue起来,一旦Queue起来,就会造成Delay,那么如果是Low Delay的封包,那么在Queue中可能会排在靠前的位置(可以说是有高优先权的意思)。

Throughput:High Throughput 往往与 Low Delay相对应。

Reliability:Router可以先丢掉Normal Reliability的封包。

2 IP Addresses

技术分享

IP地址总共32位,因此有2^32个IP地址,大约40亿个。因为IP地址在分配的时候,网络有大有小,因此分成了3类:

Class A type:只有7个bit来代表Network,因此全球总共只有2^7 = 128种A类网络,那么一个A类网络有多大呢?2^24个(大型网络)。

Class B type:用14个bit来代表Network,全球共有2^14种B类网络,每个B类网络可以有2^16个Host(中型网络)。

Class C type:用21个bit来代表Network,全球共有2^21种C类网络,每个C类网络有2^8个Host(小型网络)。

3 How datagrams are delivered in an Internet ?

技术分享

Router在处理封包时,到底封包走哪一条路径,是会根据网络状态实时变化的。Router与Router之间会定时或者不定时的交换网络的状况,因此Router的Forwarding Table会随时更新。同样的Source送到同样的Destination,由于Forwarding Table会变化,因此封包走的路径会不一样。

封包在传送的过程中可能会被切割,封包组合的工作将由Destination来做。

如果封包在传输过程中lost了(可能由于网络拥塞),那么Router会发一个message,告诉Source封包被丢弃的原因,但是Source不会重传。

技术分享

Router本身在处理封包时,内部有两个重要的Table,一是Routing Table(也叫做Forwarding Table,上图上方中间靠左的Table),二是IP-MAC Table,是IP地址与MAC地址的对照表(上图上方中间靠右的Table)。

在上图中,中间的Router连接了3个网络,左边是LAN 1,右边是LAN 2,下方是LAN n。LAN 1有2个Station,一个是A,一个是HOST X,LAN 2也有2个Station,一个是B,一个是HOST Y。左下方的Router连接了LAN 1和LAN m。其中中间的Router接LAN 1的IP地址为140.114.77.65,接LAN 2的IP地址为140.114.78.66。

如果B要将一个封包丢给Y(注意,B和Y同时连接在LAN 2),封包该如何准备呢?首先,IP的datagram中,Source IP地址即为B的IP地址,Destination IP地址为Y的IP地址,因为B和Y在同一个网络上,因此传送该封包不用经过Router,直接传送给Y的MAC。如下图:

技术分享

如果B要将一个封包丢给A,封包该如何准备?由于B跟A在不同网络中,因此传送封包必须经过Router。Source IP地址为B的IP地址,Destination IP地址为A的IP地址。这个封包是哪一个网卡送的呢?显然是MAC(B)。由于B和A不再同一网络,传送封包必须经过Router,因此Destina MAC地址填Router的网卡位置MAC(R)。如下图:

技术分享

当B将这个封包丢到网络中后,Router就会收这个封包,因为填写了Router的MAC地址。Router将这个封包收起来后,接下来要做的事情是查表。由于目的IP是A的IP地址——140.114.77.60,在Routing Table中发现77这个网段是与Router直接相连的,因此可以直接送给A,但是要送给A,必须有A的MAC地址,这可以通过查找IP-MAC Table。Router将封包送给A,如下图:

技术分享

两个例子总结如下:

技术分享

如果两个Host在同一个网络,那么不用经过Router,就可以将封包直接送给目的地,否则要先丢给Router,再由Router转送,由最后一个Router丢给Destination。

4 example

再来看以下一个例子:

技术分享

上图有4个网络:10.0.0.0、20.0.0.0、30.0.0.0以及40.0.0.0,由F、G、H三个Router连接。Routing Table针对G。

如果G要送封包到20.0.0.0,经查询为直接相连,说明20.0.0.0与Router G直接相连,那么Router G可以将封包直接送达(送到20.0.0.0这个网段上的Host)。同理,30.0.0.0也与Router G直接相连。

如果我们收到一个封包,其目的地是10.0.0.0这个网段,经查表为20.0.0.5,非直接相连,即需要丢给下一个Router,Router相应Port的IP地址为20.0.0.5。注意,并非一个Router一个IP地址,是Router的每一个Port对应一个IP地址。IP Address不是绑定电脑,是绑定Port。每一个Port都会有一个IP Address。例子中,Router F连接两个网络,左边Port的IP Address为10.0.0.5,右边Port的IP Address为20.0.0.5。

如果我们收到一个封包,其目的地是40.0.0.0这个网段,经查表为30.0.0.7,非直接相连,即需要丢给下一个Router,Router相应Port的IP地址为30.0.0.7。

那么怎么产生这样的Routing Table呢?Router之间平常会通过Routing Protocol进行信息交换。经过这样的交换,Router G就知道左边有一个F,右边有一个H…当有了Routing Table之后,封包进来就查表,如果直接相连,就直接送给Destination,如果不是直接相连,就送给Router。但是无论是送给目的Host,还是送给Router,都需要知道对方的MAC Address,因此Router本身还需要查一个表,就是IP Address与MAC Address的对照表。

5 小结

技术分享

forwarding table maps network number into next hop:Forwarding Table即Routing Table,会告诉我们下一个网段或者说Router在哪里。

each host has a default router:每台Host必须设定一个default router,因此我们在操作笔电时,必须进入电脑,设定default router。通信的对象如果与我们在不同的网段,那么我们必须将封包丢给default router,从而丢给下一个Router。

 

计算机网络包解析

标签:

原文地址:http://www.cnblogs.com/chenzefeng2015/p/4594213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!