未分类

网络协议(2)

IP是怎么来的,又是怎么没的?

1.如何配置IP地址

  如果有相关的知识的积累,我们就会知道,使用命令行,我们可以手动配置IP地址,使用ipconfig或者ip addr 。那么有一个问题是,自己配置的自由度太大了,难道真的配置什么都可以吗???,如果设置一个完全不搭边的地址呢?比如旁边的机器是192.168.1.x,我非要配置16.158.23.6会有什么现象呢?
  答案是不会出现任何现象,只不过是包发布出去,我们举个例子,比如192.168.1.6就在你这台机器的旁边,而你试图把你机器的IP改为16.158.23.6,在这台机器上,你企图去ping192.168.1.6,你是不是认为只要将包发出去,另一台交换机马上就能收到?
  可是linux不是这样的,这里需要了解的一点是,在网络上跑的包,都是完整的,可以有下层没上层,但绝不可以有上层没下层,比如说从上至下是MAC头->IP头->TCP头->HTTP头->HTTP正文,TCP在三次握手这个活动的时候,IP层和MAC层也都会随着TCP层一起活动。因为,TCP每发送一个消息,IP层和MAC层的所有机制都要运行一遍。所以,你看着它好像是有自己的IP地址,但是包发不出去,因为此时MAC层还没填。
  自己的MAC地址自己知道,但目标的MAC填什么呢?是不是填192.168.1.6这台机器的MAC地址呢?当然不是的,linux首先会判断,要去的这个地址和我是一个网段的吗?只有是一个网段的时候,才会发送ARP请求获取MAC地址,如果不是一个网段的,它会试图将包发到网关。
  如果你配置了网关,linux会去获取网关的MAC地址,然后将包发送出去,如果没配置网关,那么这个包是根本发送不出去的,如果把网关配置为192.168.1.6是不是就可以呢?当然不可能,因为网关要和当前的网络至少一个网卡是同一网段的,所以当你需要手动配置一台机器的网络IP时,一定要好好问问你的网络管理员,最好去网络管理员处申请,让他分配一段正确的IP,当然了,真正配置的时候不是用命令配置的,而是放在一个配置文件中,包含CIDR、子网掩码、广播地址和网关地址

2.动态主机配置协议(DHCP)

  配置了IP一般是不变的,配置一个服务器端的机器还可以,但是如果客户端的机器怎么办呢?总不能随来随配吧,因此我们有了一个自动配置的协议,也称动态主机配置协议(Dynamic Host Configuration Protocol),简称DHCP
  有了这个协议,管理员只需配置一段共享的IP地址,每一台新接入的机器都通过DHCP协议来这个共享的IP地址中申请,然后自动配置好,用完以后再还回去,方便其他机器接入使用

3.了解DHCP的工作方式

  当一台机器新加入一个网络的时候,一脸懵逼,只知道自己的MAC地址,先大吼一声“我来啦!”这一步,我们称为DHCP Discover。
  新来的机器使用IP地址0.0.0.0发送了一个广播包,目标地址IP为255.255.255.255,广播包封装在UDP中,UDP封装在BOOTP里边,在这个广播包里边,新人喊“我是新来的(Boot request),我的MAC地址是这个,还没有IP呢,谁能给我一段IP???”
  如果一个管理员在网络中配置了DHCP Server的话,他就相当于这些IP的管理员。他能立刻知道来了一个新人,这个时候,我们就知道MAC地址唯一的重要性了,当一台机器带着自己的MAC地址加入一个网络的时候,MAC是他惟一的身份表示,如果连这个都重复了,那也就没办法配置了
  只有MAC唯一,IP管理员才知道这是一个新人,需要租给他一个IP,这个过程,我们称为DHCP Offer同时,DHCP Server为该用户保留为他提供的IP地址,从而不会为其他的DHCP客户分配此地址,但此时此刻DHCP Server仍然使用广播的地址作为目标地址,DHCP Server回复说“我分配了一段IP地址,你看看怎么样”除此之外,服务器还会发送子网掩码、网关和IP地址租用期等信息。新机器会选择一个IP,然后向网络发送一个DHCP Request广播数据包,包中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等,它会告诉所有DHCP Server他将接受那一台服务器提供的IP地址,告诉其他DHCP Server谢谢你们并请求撤回他们提供的IP地址
注意由于此时还未收到服务器端回应,所以此时的IP仍然是0.0.0.0,目标地址仍然是255.255.255.255
  服务器收到客户机的DHCP Request之后,会返回给客户机一个ACK包,表示接受客户机选择,并将这一IP地址合法租用信息和其他租用信息放入广播包,发送给客户机,最终租约达成的时候还要广播一下,让大家都知道。