车载以太网之 DHCP协议「建议收藏」

车载以太网之 DHCP协议「建议收藏」车载以太网与传统以太网的主要区别在于二者的物理层,前者的物理层采用一对双绞线的100BASE-T1,而后者的物理层采用两对双绞线的方式,比如100BASE-TX。而二层以上的协议栈,车载网络则基本借鉴传统网络,区别并不大。下图是基于车载以太网的车载网络所使用的各种通信协议,在这篇文章中我将简要介绍一下位于7层上的DHCP协议。车载以太网涉包含的各种协议DHCP的全称是DynamicHostConfigurationProtocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置I

大家好,又见面了,我是你们的朋友全栈君。

车载以太网与传统以太网的主要区别在于二者的物理层,前者的物理层采用一对双绞线的100BASE-T1,而后者的物理层采用两对双绞线的方式,比如100BASE-TX。而二层以上的协议栈,车载网络则基本借鉴传统网络,区别并不大。

下图是基于车载以太网的车载网络所使用的各种通信协议,在这篇文章中我将简要介绍一下位于7层上的DHCP协议。

车载以太网之 DHCP协议「建议收藏」

车载以太网涉包含的各种协议

DHCP的全称是Dynamic Host Configuration Protocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置IP地址。DHCP协议已经在传统网络中应用得非常成熟,但是我们汽车行业的工程师以前可能并不太关注这种协议,所以我把自己的总结跟同行们也分享一下。

车载以太网之 DHCP协议「建议收藏」

WIN10中对IP进行设置的界面

当我们的网络设备(比如笔记本、平板、手机)进入公共网络或者家庭网络中时,我们很少需要对设备的IP地址进行配置,这是因为我们的这些设备的IP设置都选择了以DHCP协议自动配置IP地址的方式。该协议使得我们免去配置IP地址的麻烦。

DHCP是一个局域网应用层协议,使用UDP协议工作,用于在局域网内自动分配IP地址。

该协议基于Client / Server模式工作(Server一般由路由器担任),

•DHCP Server端,使用UDP端口:67 (0x43)

•DHCP Client端,使用UDP端口:68 (0x44)

车载以太网之 DHCP协议「建议收藏」

基于Client / Server模式工作的DHCP协议

DHCP的三种机制分配IP地址:

1)自动分配方式(Automatic Allocation),DHCP服务器为客户端指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。

2)动态分配方式(Dynamic Allocation),DHCP服务器给客户端指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。

3)手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

其中我们最常使用的是第二种,即动态分配方式。

上面提到,DHCP基于UDP协议工作,DHCP在封装到UDP包之前的格式如下图所示:

车载以太网之 DHCP协议「建议收藏」

DHCP数据格式(图片来源于网络)

各个字段的含义和如途介绍如下:

OP:

若是 client 送给 server 的封包,设为 1 ,反向为 2。

HTYPE:

硬件类别,Ethernet 为 1。

HLEN:

硬件地址长度,ethernet为6。

HOPS:

若封包需经过 router 传送,每站加 1 ,若在同一网内,为 0。

SECONDS:

Client 端启动时间(秒)。

Transaction ID:

一个随机数,用于客户和服务器之间匹配请求和相应消息。

Flags:

从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用。

ciaddr:

要是 client 端想继续使用之前取得之 IP 地址,则列于这里。

yiaddr:

在 server 送回 client 的 DHCP OFFER 与 DHCPACK封包中,此栏填写分配给 client 的 IP 地址。

siaddr:

若 client 需要通过网络开机,从 server 送出之 DHCP OFFER、DHCPACK、DHCPNACK封包中,此栏填写开机程序代码所在 server 之地址。

giaddr:

若需跨网域进行 DHCP 发放,此栏为 relay agent 的地址,否则为 0。

chaddr:

Client 之硬件地址。(包括6字节MAC和10字节padding)

sname:

Server 之名称字符串,以 0x00 结尾。

file:

若 client 需要通过过网络开机,此栏将指出开机程序名称,稍后以 TFTP 传送。

options:

允许厂商定议选项。每个option项由Type(1字节)、Length(1字节)、Value(长度由Length决定)三部分组成。在https://blog.csdn.net/hansel/article/details/7754606 这个链接中,有所有option的定义。当当option TYPE等于35时,该option用于描述DHCP Message type。

车载以太网之 DHCP协议「建议收藏」

options字段举例

车载以太网之 DHCP协议「建议收藏」

当option TYPE等于35时,用于描述DHCP Message type的定义

车载以太网之 DHCP协议「建议收藏」

DHCP协议通信过程(图片来源于网络)

上图描述了DHCP协议自动配置地址的过程,我在下面简要描述一下这4个步骤。

第一步:
DHCP客户端主动发送DHCP Discover包,用来寻找DHCP服务器,其中:

源MAC是自己的MAC地址,目的MAC是FF:FF:FF:FF:FF:FF的广播;

源IP是0.0.0.0(现在还没有IP,就用全0地址),目的IP是255.255.255.255的三层广播地址。

因为此时客户端还不知道DHCP服务器在哪里,所以使用广播来寻找,请求会被广播到整个网段中。

第二步:

DHCP服务器收到客户端发的DHCP Discover之后,会在自己的地址池中拿出一个没有分配的地址以及配套的参数(如:掩码、DNS、网关、域名、租期……),然后以一个DHCP Offer包发送出去。这个DHCP Offer数据包的地址如下:

源MAC是DHCP服务器的MAC,目的MAC是DHCP客户端的MAC地址;

源IP是DHCP服务器的IP,目的IP是即将分配给客户端使用的IP地址。

因为客户端目前还没有IP地址,所以在这个单播IP发送之前,服务器会使用客户端的MAC地址与之通信,如果MAC地址通信失败,那么服务器会使用广播的方式提供(Offer)数据包 。

第三步:

客户端收到这个DHCP Offer后,会再发出一个DHCP Request给服务器来申请这个Offer中包含的地址。此时客户端还没有正式拿到地址,所以还需要向DHCP服务器申请。

这个DHCP Request数据包的地址如下:

这时客户端的源IP还是0.0.0.0,目的IP还是255.255.255.255

源MAC是客户端的MAC,目的MAC是FFFF.FFFF.FFFF广播包

第四步:

服务器收到客户端的请求后,会发出一个DHCP ACK用来确认这个IP地址可以分配给这个客户端。

客户端收到这个DHCP ACK数据包才算正式拿到了这个IP。

 

关于DHCP租约内续租:

DHCP服务器向DHCP客户机出租的IP地址有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户端要延长其IP租约,则必须更新其IP租约。IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

在租约内续租的时候,发现( Discovery )和提供(Offer)数据包就变得没有必要了,只需要完成请求和确认两个步骤就可以。

下图是我截取的这4个步骤的报文,由于trace内容太多,不方便粘贴,我只截取了关键信息来说明这几个步骤。第一列是时间戳,第二列是协议,第三列和第四列分别是源IP和目的IP,第五列和第六列分别是源端口和目的端口(这里的44和43是十六进制,换算为十进制就是我们前面提到的68和67),第七列是消息类型。其中192.168.1.2是DHCP server的IP地址,192.168.1.100是这个server要为这个发起请求的client分配的地址,从offer报文展开的详细内容也可以看出来这一点。

车载以太网之 DHCP协议「建议收藏」

Discovery

车载以太网之 DHCP协议「建议收藏」

Offer

车载以太网之 DHCP协议「建议收藏」

Request

车载以太网之 DHCP协议「建议收藏」

ACK

车载以太网之 DHCP协议「建议收藏」

offer报文展开

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142584.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 操作系统虚拟存储管理实验报告_虚拟存储器技术

    操作系统虚拟存储管理实验报告_虚拟存储器技术操作系统虚拟存储管理实验开辟一块内存空间,作为模拟内存(malloc)空间大小为2^14字节假设系统的页面大小为256字节,每个页表项占4个字节(系统的物理页面数为2^6,每个页表正好占一个页面)用位图刻画内存页面的分配状态,可以用一个辅助的变量来对空闲内存页面计数每个进程的虚拟地址空间也是2^14字节每个进程分配9个页面(连页表一共10个页面)创建12个作业,并模拟作业的运行…

    2022年9月26日
    5
  • C++-Windows消息循环GetMessage/TranslateMessage/DispatchMessage[通俗易懂]

    C++-Windows消息循环GetMessage/TranslateMessage/DispatchMessage[通俗易懂]1.windows消息循环if(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);//消息转化DispatchMessage(&msg);//消息派遣.把TranslateMessage转换的消息发送到窗口的消息处理函数,此函数在窗口注册时已经指定}执行过程:消息循环调用G…

    2022年9月12日
    4
  • 我的家庭私有云计划-17

    我的家庭私有云计划-17

    2021年8月17日
    61
  • 【算法】素数(质数)判断方法「建议收藏」

    【算法】素数(质数)判断方法「建议收藏」素数(质数)的判断在算法问题中经常遇到,这里小结几种常用的判断方法。首先,我们来看一下素数(质数)的定义:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。我们可以从它的定义得到判断素数的第一个方法:从2到n-1,判断是否存在能被n整除的数,既(n%i==0,2<=i<=n-1),如果有就不是素数,否则为素数。(这里为了比

    2022年6月18日
    31
  • 50一个Android开发技巧(01 利用好layout_weight属性)

    50一个Android开发技巧(01 利用好layout_weight属性)

    2022年1月4日
    42
  • ipv6的ping_ping详解

    ipv6的ping_ping详解背景为什么需要使用IPv6,一个最直接的答案就是目前广泛应用的IPv4已经无法提供足够的IP地址来满足迅速增长的网络。IPv4采用32位地址长度,只有大约43亿个地址,很快就将被分配完毕。而IPv6采用128位的地址长度,几乎可以不受限制的提供地址。当然扩大地址空间只是IPv6的众多优势中的重要一项,除此之外,IPv6还能够提高网络的整体吞吐量、改善服务质量(QoS)、安全性有更好的保证、支持即插即用和移动性、更好实现多播功能等等。IPv6的地址获取方式与IPv4有所

    2025年6月20日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号