IP基本原理: 我们先来看一下网络层的协议,网络层的协议不单单只有IP,还有IPX啊等等,只是我们现在用的最多的就是IP,我们就来讲这个IP。IP全称是Internet protocol互联网协议。 IP的作用有三个,第一个,标识节点和链路。用什么来标识节点呢?就是用IP地址,用唯一的ip网络号来标识每一个链路,它这里的链路就是一个局域网【画图:两台路由器直连】第二个作用,寻址和转发。我们路由器的作用就是连接不同的局域网,实现它们之间的通信,那现在A想和D进行通信,它需要通过三个路由器才能发过来吧,首先对于第一个路由器,我要知道目标网络的存在吧,其次,它要把包发给下一个路由器。也就是说它要做两个动作,第一个就是找到目标,然后把包给传下去,这就是寻址和转发,这是我们之后研究的重点。第三个,适应各种数据链路。我们路由器连接的是不同的局域网,每个局域网都是不一样的,它可能用双绞线或者光纤去连接,这都是局域网自己组建的,所以说,不管它用的什么介质连接,或者是二层使用了什么协议,路由器都没得选,都要去适应。这就是三个作用。 之后看一下ip网络的结构。在这个结构中,必不可少的就是三层的设备,路由器还有三层交换机,它们负责把网段连接起来,适应链路层协议,在网络中转发数据包,实现广域网的通信。 接下来看一下这个ip报头格式。这个ip报头就是三层的头部,packet。我先来一一介绍,但是不需要我们全部都掌握。第一个version,版本,4比特,现在有ipv4和ipv6两个版本,ipv4就是0100,ipv6就是0110,这个ip是哪个版本的,就把信息存放在这里。IHL是ip报头长度,也是4字节。Type of service是服务类型,8比特,这个你可以把它理解成存放的是优先级,链路很多信息要去发送的时候,就根据这个优先级去判断先发谁后发谁。Total length总长度,就是这个ip报文的总长度,16比特。Identifier,标识符,比方说我给你传了一串数字是123456789,另外一个人也给你传了一串数字是987654321,那传到你那的时候你会发现你面前摆着两个1两个2两个3两个4两个5两个6两个7两个8两个9,你不知道这两个一样的数字分别是谁传来的,那怎么办呢?这个时候标识符就登场了,在它们传输的时候,把我传给你的123456789每个数字分别标注上x,把另外一个人传给你的987654321每个数字分别标注上y,那这样是不是传过来的时候你就知道每个数字是属于哪一个人发来的吧。但是这样还是有点问题,你现在只知道它属于谁发过来的,并不能把它按照发的顺序复原啊,你发的时候可能会产生错序,那你就要有后面这个fragment offset分片偏移,你把每个数字标注上它的偏移量,1上是0,2上是1这样以此类推,是不是就可以完整的还原一个数据了。Flag标记字段,3个比特,第一位没使用,第二位是DF,当它置1表示不分段,置0表示分段,第三位是MF,当它置1表示之后还有分段的包发来,置0就表示这个是最后一个分段了。Time to live生存时间,我们一般叫它TTL,以前的这个是用秒为单位去计算的,所以起名生存时间,但是现在改成以跳数为单位了,就是每经过一台路由器它的跳数会减1,TTL最大是255,等TTL小于1之后这个数据就不会继续发送了,所以起到了一个放环的作用。Protocol协议,就是定义了这个数据包中的协议类型。Header checksum,就是校验。下面两个是source address和destination address,源IP地址和目标IP地址,options可选项,它是可选的,padding就是去填充可选项之后的字段保证头部是32位的倍数。其中你只要去记住version,TTL,protocol,source address和destination address就可以了,其它的等你们学到np阶段和ie阶段再要求你们去掌握。 我们来看这个MTU最大传输单元,这个很重要啊要仔细去听。先看一下MTU的定义,是链路层传送的最大数据包,单位是字节,不同的链路层协议,MTU值是不一样的。【就比方说我们一群人出去玩,比方说20个人,如果你是租大巴,大巴一次能装四十多个人一般,那你一次性一辆车就可以把所有人运走,如果是打出租车呢?一辆出租车肯定坐不下那么多人,你就要把20个人分成几份,用几辆车去运走,一般5辆车就够了。那如果是骑双人自行车呢?就需要分成十组用十辆车去运走吧】这个MTU大概啊就是这么个意思。当传输数据大于这个链路的MTU的时候就要进行分片。 那么我们来看不同网络类型对应的MTU是多大。这里重点去记住802.3的1492,以太网的1500还有一个最大值65535这三个就行了。现在我来给大家讲这个分片是怎么去分的。比如现在以太网中,有一个数据包是3000的,我们来看它怎么分啊。首先要知道以太网的MTU是多少,1500,我们之前讲了数据传输是需要去加一个头部封装的对吧,头部是多大?20字节。而且你传输的数据包大小必须要被8整除,这样的话你看,MTU是1500,头部占了20字节,还剩1480,你们算一下这个1480能不能被8整除,是可以的,那刚刚好,第一次传的是1480字节的数据,那同理,第二个片还是1480字节的数据吧,现在传了2960字节的数据了,那剩下的40字节数据放在第三个片传输,当然传输的时候还要加上20字节的头部,一共就是60字节。这就是它的分片过程。注意的一点,第一就是分片的每一个部分都要加上20字节的头部,其次就是你分片传输的数据一定要被8整除,不能被8整除你就把数字往下减到直到能被整除为止。 接下来讲一个协议,ARP地址解析协议。这个协议的作用就是已知IP地址,去解析MAC地址。它是在发送者第一次发送数据,封装帧时,没有找到目标MAC地址对应的MAC地址的时候去触发。那我们来看一下它的过程,主机A不知道主机C的MAC地址,它想要去获取,那它就会发送一个广播ARP请求,它发送的是广播,那么主机B和主机C都可以接收到这条请求,那它们都会去解封装,到三层看到目标IP地址是1.1.1.3,那B的IP地址是1.1.1.2,B就会把这个消息丢掉了,因为目标找的不是它啊。C看到这个目标IP地址就是自己,并且它要请求自己的MAC地址,那这个时候,C就会给A单播ARP响应,为什么是单播,它已经知道A的信息了所以就用单播,这样A就知道了C的MAC地址。广播请求、单播回应,这就是ARP协议的封装过程。 这是ARP表,IP地址和MAC地址一一对应的。就是你进行了ARP这个过程之后会把得到的MAC地址和IP地址对应的放在表中,下次再去访问就可以查找这个表,不用去执行ARP的过程了。 来讲一个名词,默认网关。什么是默认网关,就是一个局域网的唯一出口,局域网内部的所有主机想要访问外网,必须将数据发给默认网关。就是说你默认网关连接的是另外一个局域网,图上这两台主机用一个路由器连接,我们讲路由器一个接口就是一个局域网,那左边的主机想要去访问右边的主机,就要穿过这台路由器,也就是说这个路由器就是默认网关。 代理ARP,这个和之前的ARP有什么区别呢,之前是所有的主机都在同一个网段内,现在这里是有一台路由器,左边和右边不在同一个网段。那这个时候要想获得MAC地址,就需要用代理ARP。那我们来看一下它的过程。主机A想要获得C的MAC地址,首先要发送一个广播请求,到了这台路由器,这台路由器收到了这个消息之后解封装,看到目标寻找的是2.2.2.3,那这个路由器知道主机在它的网段内,就会再发送一个广播请求,传到了C,C接收到了之后它知道是要自己的MAC地址,就把MAC地址用单播的形式会给路由器。注意一下,回的目标MAC地址是路由器的MAC地址而不是A的MAC地址,目标IP地址是A的IP地址。不然你回的MAC地址是A的,到了路由器解封装到二层看MAC地址找的不是自己就丢掉了。然后路由器再消息发给A,再注意一点,这里它回的MAC地址不是C的MAC地址而是自己的MAC地址,之后A要再发消息给C,路由器就已经知道了C的MAC地址,就不需要这个协议就可以直接传过去。所以说,这个代理ARP啊,路由器欺骗了主机,让它以为自己知道了对方的MAC地址,实际上自己默认网关的MAC地址,在传输过程中,目标IP地址和源IP地址不变,目标MAC地址和源MAC地址会改变【把四个过程的SIP/DIP/SMAC/DMAC写一下:A发送给路由器、路由器发给C、C发回给路由器、路由器发回给A】这就是代理ARP。 代理ARP说完了我们再说一个反向ARP,叫做RARP。它和我们的ARP是反过来的,那不就是已知MAC地址,去解析IP地址嘛。这是在什么样的情况下会出现的呢,就是设备无法存储IP地址的时候会出现,就比如说我们图中的无盘工作站。它是没法去存储IP地址的,关机再开机IP地址就没了,只有MAC地址。那我们根据这个,研发出来了一个协议,叫做DHCP,中文是动态主机配置协议。它的这个IP地址和MAC地址的绑定关系是动态的,所以比较灵活,我们现在一般用的就是这个。之后再给大家具体介绍这个协议。 那我们来总结一下啊,主机发送数据时候,你要看目标是否直连,就是看是否和自己在同一个网段,如果是的,就去解析目标主机的硬件地址,也就是发送的目标MAC地址是远端主机的MAC地址。如果不是直连,就去解析网关硬件地址,主机发送的目标MAC地址就是自己默认网关的MAC地址。这是主机发送数据。 那接收数据呢。如果目标是本机,先解封装到二层,查看MAC地址,单播MAC地址是自己或者是自己所在组的组播MAC地址或者是广播MAC地址,就继续向上解封装,否则丢弃。到了三层,查看IP地址,单播IP地址是自己或者自己所在组的组播IP地址或者是广播IP地址,就接收,否则丢弃。如果目标不是本机,就直接丢弃。 路由器发送数据的时候,【打开笔记】你也要看是否直连,是的话路由器发送数据包的MAC地址就是远端主机的MAC地址,如果不是直连,它发送的MAC地址就是下一跳路由器的MAC地址。 路由器接收数据的时候呢,它比主机接收数据多一个步骤,多的步骤是什么呢?就是如果ip不是以上三种情况,还要查看本地有没有对应路径可以将这个数据包转发出去,有的话就转发出去,如果没有则丢弃。 好,继续看ICMP协议,它是英特网控制消息协议。它主要是时刻检测消息通信的状况并且反馈给路由器和主机的。ICMP消息的类型主要分成两大类,一个是差错消息,一个是查询消息。 来看它的报文格式,首先是类型,定义了它是差错还是查询。接着是代码,代码有很多种【下一页】定义了类型和原因。 对于ICMP协议,需要大家去掌握两个应用,一个是ping,另一个是tracert。 Ping是用来验证与远程计算机的连接状况。它是双向的,数据包有去有回才说明可以通信。它是基于ICMP的type8和type0,回送和应答。它的格式就是“ping 目标IP地址”,当然它后面也可以加上一些参数,比较常用的就是-t,一直ping,除非你手动的关掉,其他的参数书上都有,你们可以课下自己去了解一下,用电脑自己试试,在这里我就不说了,因为用的不多。 还有一个tracert,它是反馈数据包的具体路径,显示出数据包所经过的所有路由器或是三层交换机。看图中显示了经过的路由器,IP地址都有。它是单向的,只反映一个方向的数据包的路径,有去无回。它是基于ICMP的type3的。Tracert的格式“tracert 目标IP地址”,它也有各种参数可以加。 Ipconfig这个命令就是查看激活网卡的信息,没激活的不显示。 DNS域名系统,就是将IP地址翻译成容易记忆的名字,并且进行一对一的映射。就是说你去记各大网站的IP地址是不是特别麻烦,你要上百度,你还要查一下百度的IP地址是多少,那把IP地址和名字对应之后,记忆就会方便很多了,这就是DNS的作用。
-----------------------清默网络友情提供
|