车载以太网之 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 毫米波雷达信号处理系统有哪些_毫米波雷达的缺点

    毫米波雷达信号处理系统有哪些_毫米波雷达的缺点毫米波雷达信号处理系统(WRSP)是我杭州淞柏科技有限公司-杭州淞柏科技有限公司研制的全功能高端雷达信号处理器,该处理器采用了脱机运行、网络接口,采用DIFR硬件平台,适用机载、舰载船载、车载等各种平台雷达。在设计上采用高集成方案,高速DSP+FPGA完成所有雷达处理模式,可支持各种不同方式的脉冲压缩和补盲。系统结构如下图所示:WRSP硬件部分集成DIFR数字中频接收机以及WRSP信号处理器(后简称信号处理器)于一体。DIFR可完成所有的中频处理,任意波………

    2022年10月19日
  • jax ws ri 生成java类_基于SOAP的webservice(1)、JAX-WS实现

    jax ws ri 生成java类_基于SOAP的webservice(1)、JAX-WS实现因为工作中使用了SOAP进行两个系统的接口调用,所以私下学习一下两种实现,粗略记录于此。本文侧重于实际实现操作,而不是理论原理。个人简单理解:SOAP(SimpleObjectAccessProtocol简单对象访问协议)是基于XML和HTTP的用于实现网络连通的程序之间远程调用的协议(但是SOAP1.2中也可以使用非HTTP协议进行传输)。两个通过网络连接的程序体,通过一定规范的XML进…

    2022年7月15日
  • linux0.11_linux常用命令

    linux0.11_linux常用命令前言所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的

    2022年7月28日
  • Java面向对象三大特性(封装、继承、多态)

    Java面向对象三大特性(封装、继承、多态)文章目录前言一、封装1.封装的概念2.private实现封装3.getter和setter方法4.封装的好处二、继承1.extends实现继承2.super关键字三,多态总结前言OOP语言:也就是面向对象编程。面向对象的语言有三大特性:封装、继承、多态。三大特性是面向对象编程的核心。下面就来介绍一下面向对象的三大特性。如果想了解面向对象可以看一下这一篇博客类和对象一、封装1.封装的概念在我们写代码的时候经常会涉及两种角色:类的实现者和类的调用者封装的本质就是让类的调用者不必太多的.

    2022年7月25日
  • 《深入浅出MFC》读书笔记

    《深入浅出MFC》读书笔记http://www.zooyoo.org/%E3%80%8A%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAmfc%E3%80%8B%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%EF%BC%88%E5%8D%81%E4%B8%

    2022年6月18日
  • Dubbo架构(应用架构)

    一、整体框架1、Dubbo介绍ApacheDubbo是一款高性能、轻量级的开源JavaRPC框架。它有三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1、Dubbo特点1、面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。2、智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状…

    2022年4月11日

发表回复

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

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