zoukankan      html  css  js  c++  java
  • <再看TCP/IP第一卷>关于网络层及协议细节---IP协议(2)--移动IP及DHCP

    题外话:本来想按照互联网的层级自下向上回顾这些协议的,但是今天实在得破个例,DHCP不得不说!

     

     

    主机从一个网络迁移到另一个网络,那么IP编址的结构就要发生改变,当今主流有如下几种修改方案:

    (一)改变地址:

    主机在移动到新的网络的时候改变它的地址,这里需要DHCP协议,将其和新的网络关联起来,这么做的话需要我们手动修改可能需要如下的命令

    1 sudo vim /etc/network/interface

    每次修改若想要使修改之后生成的IP地址生效,大部分情况下需要我们重启主机

    1 /etc/init.d/network restart

    并且这么做的话DNS表必须要更新,使因特网上的其他主机可以知道其变化

    (二)两个地址:

    使用两个地址是一种更可行的方法,主机有原始的地址成为归属地址,还有一个临时的地址称为转交地址,前者是永久的,使得它与归属网络永久相关联。

    每次当主机发生移动的时候,改变的是临时地址即转交地址,下面重点看这方面的内容。

    归属地址和转交地址与之对应的是归属网络转交网络,归属网络和外地网络之间的桥梁是因特网,而归属网络和因特网之间需要一个归属代理,转交网络和因特网连接需要一个转交代理,所谓的代理就是路由器,但是代理的功能是在应用层完成的,所以两个代理更强调的是作为主机的功能。

    当主机在移动到一个外地的网络的时候,外地的网络就需要动态地给加入的主机分配一个IP地址,这个IP地址的分配过程就是DHCP完成的,(当外地主机充当外地代理的时候,这个转交地址就成为同址转交地址,使用同址转交地址的主机可以移动到任何的网络,不必担心代理的可用性)。

    关于与远程主机的通信过程,移动主机需要经过三个过程:代理发现登记传送数据

    1.代理发现

    ##移动主机在外地网络进行代理发现的基础条件是已知归属代理地址##

    代理发现的过程主要分为两个阶段:

    a.代理通告

    发送一个ICMP报文(类型值16:用户信息应答)报文中数据是转交地址,只有外地代理才能使用这个字段。

    代码位含义:

    0    需要登记,没有同址转交地址

    1    代理忙,现在不接受登记

    2    代理充当归属代理

    3    代理充当外地代理

    4    代理使用最小的封装

    5    代理使用通用路由选择封装

    6    代理支持首部压缩

    7    Reserved

    b.代理询问

    发送一个ICMP询问报文,在当移动主机已经移动到了新的网络而没有收到代理通告的时候,它可以发起一个代理询问,让代理知道它需要帮助。

    2.登记

    移动主机移动到外地网络之后,并且已经发现了外地代理之后,必须登记。登记的四个要素如下:

    a.移动主机必须向外地主机进行代理

    b.移动主机必须向它的归属代理登记,这通常是由外地代理以移动主机的身份来完成的。

    c.如果截至期到了,那么移动主机必须重新登记

    d.如果移动主机回到了归属网络,那么必须取消登记

    登记的过程之中需要使用登记请求和登记回答,这些信息是封装在UDP协议报中的,代理处理登记请求和回答使用知名端口434,移动主机使用任意临时端口。

    报文内容中需要指明归属地址,归属代理地址,转交地址和标识(用于使请求和回应相互匹配)

    3.数据传送

    进行数据传送的过程时已经搭建了移动IP的通讯环境,通讯过程分为大致两种 :

    a.当远程地址向移动地址发送信息时,源地址是远程主机本身的地址,目的地址是移动主机的归属地址,总之就是认为移动主机在归属网络中。实质上呢,是归属代理使用ARP代理技术使用归属物理地址从而在链路层上接收了数据帧分组,然后再将分组转发给移动主机所在的外地网络。

    b.从移动主机向远程主机发送信息时,它就像正常的情况一样进行发送,移动主机分片后将分组发送给归属地址,用远程主机的地址作为目的地址。

    (三)关于DHCP协议:

    绝大多数情况下来讲,对于一台主机四种信息是必要的:

    (1)IP address

    (2)subnet mask

    (3)gateway IP

    (4)DNS IP

    同样作为IP地址分配/回馈协议的有RARP和BOOTP,不同的是DHCP的出现更为了符合将以上4个必要的信息动态分配(与BOOTP不同,BOOTP为查表静态)的协议。

    DHCP客户和DHCP服务器可以处于同一个网络上,也可以处于不同的网络之中,当客户和服务器放在了同一个网络中的时候,会进行如下的操作:

    (1)DHCP服务器在UDP端口67发出被动打开命令,等待客户请求。

    (2)客户端在UDP68号端口发出主动打开命令,这个报文自然被装入UDP报文的首部之中,再使用IP地址进行封装,这里的IP地址源端IP为0,目的地址-1(受限广播,只在本地网络传播)

    (3)服务器使用广播或者单播来响应这个客户,它使用了UDP源端口67和目的端口68,这里回复的过程之中就可以使用IP地址拉,也不需要ARP解析地址。

    当DHCP客户和DHCP服务器处于不同的网络之中的时候,会进行如下的操作:

    (1)服务器端和客户端进行的操作之前是一样的,但是因为受限广播,没有路由器会接收该IP数据报。

    (2)在网络中设置一台主机作为中继代理,中继代理知道DHCP服务器的单播IP地址,然后DHCP服务器和中继代理在应用层完成通讯,中继代理再把它转达给DHCP客户。

    通过DHCP报文的格式我们可以注意到DHCP的差错控制和对类型细致的分类。

    DHCP服务器分配IP过程分为两种:静态分配和动态分配

    静态分配:通过访问DHCP服务器中的表来进行查询与DHCP客户相对应的永久IP地址

    动态分配:通过数据库实现IP地址池,当接收请求的时候动态分配一个IP地址,时间长短可以协商。

  • 相关阅读:
    关于selenium中的sendKeys()隔几秒发送一个字符
    C#使用.net.mail配置163邮箱报错:不允许使用邮箱名称。 服务器响应为:authentication is required,smtp9,DcCowABHK4UYE11W2k6fAQ--.52196S2 1448940312
    Git一个本地仓库同时推送到多个远程仓库
    MySQL中的字符数据存储
    在IIS中启用net.tcp传输协议
    MS CRM 2016 二次开发知识点
    微软 CRM 2016 自定义视图顶部按钮
    CodeSmith7.0.2连接Oracle10.2
    使用Entity framework框架执行存储过程
    SQL建表公共字段脚本
  • 原文地址:https://www.cnblogs.com/guguli/p/4496201.html
Copyright © 2011-2022 走看看