精华内容
下载资源
问答
  • 1.DHCP概要 2.DHCP工作原理 3.DHCP报文详解 3.1 协议包类型 3.2 协议包内容 4.DHCP常用报文案例 4.1 DHCP DISCOVER 4.2DHCP OFFER 4.3DHCP ACK 1.DHCP概要 DHCP(Dynamic Host Configuration Protocol),...

    目录

    1.DHCP概要

    2.DHCP工作原理

    3.DHCP报文详解

    3.1 协议包类型

    3.2 协议包内容

    4.DHCP常用报文案例

    4.1 DHCP DISCOVER

    4.2 DHCP OFFER

    4.3 DHCP ACK 


    1.DHCP概要

    • DHCP(Dynamic Host Configuration Protocol),动态主机配置协议
    • 局域网的网络协议
    • 基于UDP协议实现(需要广播查找)
    • 常用端口:服务端 67 客户端 68
    • 主要作用动态分配IP地址

    2.DHCP工作原理

    DHCP的实现分为4步,分别是: 
    ①:Client端 发起 DHCP Discover包,目的是想发现 DHCP Server;
    ②:DHCP Server接收到Discover包后,发送DHCP Offer包给Client端,告诉Client端可以提供IP地址;
    ③:Client端接收到Offer包后,发送DHCP Request包请求分配IP;
    ④:DHCP Server端发送ACK数据包,确认信息。

    对应的协议包如下:

    3.DHCP报文详解

    3.1 协议包类型

    序号 协议包 说明
    1 DHCP DISCOVER (常用) 客户端开始DHCP过程发送的包,是DHCP协议的开始
    2 DHCP OFFER (常用) 服务器接收到DHCP DISCOVER之后做出的响应,它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符以及其他信息
    3 DHCP REQUEST(常用) 客户端对于服务器发出的DHCP OFFER所做出的响应。在续约租期的时候同样会使用。
    4 DHCP ACK (常用) 服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用。
    5 DHCP NAK (常用) DHCP ACK的相反的报文,表示服务器拒绝了客户端的请求。
    6 DHCP RELEASE 一般出现在客户端关机、下线等状况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址
    7 DHCP INFORM 客户端发出的向服务器请求一些信息的报文
    8 DHCP DECLINE 当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止
    使用该IP地址。

    3.2 协议包内容

    序号 协议内容 说明
    1 Xid 随机生成的一段字符串,两个数据包拥有相同的xid说明他们属于同一次会话
    2

    Ciaddr

    (关键)

    客户端会在发送请求时将自己的ip地址放在此处
    3

    Yiaddr

    (关键)

    服务器会将想要分配给客户端的ip地址放在此处
    4

    Siaddr

    (关键)

    一般来说是服务器的ip地址.但是注意!根据openwrt源码给出的注释,当报文的源地址、siaddr、option­>server_id字段不一致(有经过跨子网转发)时,通常认为option­>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip (下图中wireshark抓包中也有标明siaddr为nextserver ip address)
    5

    Chaddr

    (关键)

    客户端的mac地址
    6 Giaddr 如果需要跨子网进行DHCP地址发放,则在此处填入经过的路由器的ip地址
    7 Sname 服务器主域名
    8 Options 可以自由添加的部分,用于存放客户端向服务器请求信息和服务器的应答信息

    4.DHCP常用报文案例

    4.1 DHCP DISCOVER

    4.2 DHCP OFFER

    4.3 DHCP ACK 

     

    展开全文
  • Android's got ifconfig, just like Linux. Unfortunately that just changes the interface configuration and doesn't, e.g., tell applications that the interface has come up, so they may not be aware that ...

    Android's got ifconfig, just like Linux. Unfortunately that just changes the interface configuration and doesn't, e.g., tell applications that the interface has come up, so they may not be aware that there's any internet access, so it may not help much. I'm afraid I can't help there.

    For reference, you use ifconfig like this:

    ifconfig up mask gw

    will probably be eth0, and the other fields are the appropriate IP addresses. You can see what interfaces are available by catting /proc/net/dev.

    To be honest, you shouldn't need to do this --- Android (or at least modern Android, you didn't say which version you're using) has proper support for ethernet configuration via Settings -> Wireless and Networks. Is there any reason why this isn't working for you?

    展开全文
  • Android4.0已经加入了以太网的支持,但4.0和5.0及以后安卓版本的相关代码差距还是蛮大的,5.0之后的主要API代码就没什么差别了。这里介绍5.1的API调用方法实现以太网两种方式上网: (最后使用到了EthernetManager类...

    Android4.0已经加入了以太网的支持,但4.0和5.0及以后安卓版本的相关代码差距还是蛮大的,5.0之后的主要API代码就没什么差别了。

    1、这里介绍5.1的API调用方法实现以太网两种方式上网:

    (最后使用到了EthernetManager类的API,EthernetManager类是@hide的,通过SDK访问不到。我这里是在系统应用中添加的需求,系统级App是可以访问到的。第三方app可以使用反射的方式调用:反射调用EthernetManager参考博客地址 )


    mConTypeGroup:是一个RadioGroup组件,我的布局中RadioGroup包含了代表DHCP、STATIC的两个RadioButton。

    根据选中的RadioButton切换IP分配方式。

    一个IP分配方式配置中,至少要包含 IP地址子网掩码网关DNS(一个或多个)四个属性。


    EthernetManager mEthManager = (EthernetManager) getSystemService(Context.ETHERNET_SERVICE);
    if(mConTypeGroup.getCheckedRadioButtonId() == R.id.manual_radio){//静态ip
    			try {
    			    //每个IpConfiguration对象内部都包含了一个StaticIpConfiguration对象,对于DHCP方式来说这个对象赋为null
    				StaticIpConfiguration staticIpConfiguration = new StaticIpConfiguration();//用于保存静态IP、dns、gateway、netMask相关参数配置
    				InetAddress mIpAddr = NetworkUtils.numericToInetAddress(mIpaddr.getText().toString());//把192.168.1.1这种格式字符串转化为IP地址对象
    				String[] strs = mMask.getText().toString().split("\\.");
    				int count = 0;
    				for(String str : strs){
    					if(str.equals("255")){
    						count++;
    					}
    				}
    				int prefixLength = count*8;
    				LinkAddress mIpAddress = new LinkAddress(mIpAddr,prefixLength);//prefixLength就是表示子网掩码字符有几个255,比如255.255.255.0的prefixLength为3
    				InetAddress mGateway = NetworkUtils.numericToInetAddress(mGw.getText().toString());//默认网关
    				ArrayList<InetAddress> mDnsServers = new ArrayList<InetAddress>();//DNS
    				mDnsServers.add(NetworkUtils.numericToInetAddress(mDns1.getText().toString()));
    				mDnsServers.add(NetworkUtils.numericToInetAddress(mDns2.getText().toString()));
    				
    				staticIpConfiguration.ipAddress = mIpAddress;
    				staticIpConfiguration.gateway = mGateway;
    				staticIpConfiguration.dnsServers.addAll(mDnsServers);
    				
    				//ProxySettings为代理服务配置,主要有STATIC(手动代理)、PAC(自动代理)两种,NONE为不设置代理,UNASSIGNED为未配置代理(framework会使用NONE替代它)
    				//ProxyInfo包含代理配置信息
    				config = new IpConfiguration(IpAssignment.STATIC, ProxySettings.NONE, staticIpConfiguration, ProxyInfo.buildDirectProxy(null,0));
    				mEthManager.setConfiguration(config);//执行该方法后,系统会先通过EthernetConfigStore保存IP配置到data/misc/ethernet/ipconfig.txt,再更新以太网配置、通过EthernetNetworkFactory重启eth设备(最终通过NetworkManagementService来操作开启关闭设备、更新状态)
    				//NetworkManagementService服务中提供了各种直接操作eth设备的API,如开关、列举、读写配置eth设备,都是通过发送指令实现与netd通信
    				//Netd 就是Network Daemon 的缩写,表示Network守护进程,Netd负责跟一些涉及网络的配置,操作,管理,查询等相关的功能实现
    			}catch (Exception e) {
    	            e.printStackTrace();  
    	        }
    		}else {//动态ip
    			try {
    			    //对比STATIC,只需要把StaticIpConfiguration赋值为null
    				config = new IpConfiguration(IpAssignment.DHCP, ProxySettings.NONE, null, ProxyInfo.buildDirectProxy(null,0));
    				mEthManager.setConfiguration(config);
    			}catch (Exception e) {
    	            e.printStackTrace();  
    	        }
    		} 

    2、如果系统源码有以太网相关驱动、程序,但未配置过以太网,还需要配置以下,让以太网驱动被加载编译进系统:

    kernel-3.18/arch/arm/configs/t52_5m_8735b_3h_defconfig文件中添加类似下列配置:


    #for eth
    CONFIG_MII=y
    CONFIG_USB_NET_DRIVERS=y
    CONFIG_USB_USBNET=y
    CONFIG_USB_RTL8150=y
    CONFIG_USB_RTL8152=y
    CONFIG_USB_NET_AX8817X=y
    CONFIG_USB_NET_AX88179_178A=y
    


    3、然后要想使用以太网的DHCP,需要在init.<源码项目名>.rc中模仿wifi的dhcp来添加一个或多个service(对于多以太网卡来说):


    service dhcpcd_wlan0 /system/bin/dhcpcd -BK -dd  #这是wifi的dhcp服务,/system/bin/dhcpcd是一个可执行文件,用于动态获取IP
        class main
        user root
        group net_admin net_raw
        disabled
        oneshot
    ...
    ...
    service dhcpcd_eth0 /system/bin/dhcpcd -ABDKL #规则:"dhcpcd"加上"_<网卡设备接口名>"
        class main 
        disabled
        oneshot
        
    service dhcpcd_eth1 /system/bin/dhcpcd -ABDKL #规则:"dhcpcd"加上"_<网卡设备接口名>"
        class main 
        disabled
        oneshot
        


    一个机器可能有多个以太网设备,需符合eth0,eth1,eth2...的命名(源码中会检查名称的)。


    展开全文
  • 一、车载以太网DHCP协议

    常见DHCP过程

    1、DHCP DISCOVER
    当DHCP客户端计算机DHCP DISCOVER广播消息:
    2、DHCP OFFER
    所有接收到DHCP客户端发送的DHCPDISCOVER广播消息的DHCP服务器会检查自己的配置,如果具有有效的DHCP作用域和富余的IP地址,则DHCP服务器发起DHCPOFFER广播消息来应答发起DHCPDISCOVER广播的DHCP客户端
    3、DHCP REQUEST
    当DHCP客户端接受DHCP服务器的租约时,它将发起DHCPREQUEST广播消息,告诉所有DHCP服务器自己已经做出选择,接受了某个DHCP服务器的租约。
    4、DHCP ACK
    提供的租约被接受的DHCP服务器在接收到DHCP客户端发起的DHCPREQUEST广播消息后,会发送DHCPACK广播消息进行最后的确认,在这个消息中同样包含了租约期限及其他TCP/IP选项信息。
    5、租约续约
    DHCP服务器将IP地址提供给DHCP客户端时,会包含租约的有效期,默认租约期限为8天(691200秒)。除了租约期限外,还具有两个时间值T1和T2,其中T1定义为租约期限的一半,默认情况下是四天(345600秒),而T2定义为租约期限的的7/8,默认情况下为7天(604800秒)。当到达T1定义的时间期限时,DHCP客户端会向提供租约的原始DHCP服务器发起DHCP REQUEST请求对租约进行更新,如果DHCP服务器接受此请求则回复DHCP ACK消息,包含更新后的租约期限;如果DHCP服务器不接受DCHP客户端的租约更新请求(例如此IP已经从作用域中去除),则向DHCP客户端位于回复DHCP NACK消息,此时DHCP客户端立即发起DHCP DISCOVER进程以寻求IP地址。如果DHCP客户端没有从DHCP服务器得到任何回复,则继续使用此IP地址直到到达T2定义的时间限制。此时,DHCP客户端再次向提供租约的原始DHCP服务器发起DHCP REQUEST请求对租约进行更新,如果仍然没有得到DHCP服务器的回复则发起DHCP DISCOVER进程以寻求IP地址。

    车载以太网 DHCP协议

     

     

    电脑上网的首要步骤,是确定四个参数:

      * 本机的IP地址

      * 子网掩码

      * 网关的IP地址

      * DNS的IP地址

    这四个参数缺一不可。

           * 本机的IP地址:192.168.1.100
      * 子网掩码:255.255.255.0
      * 网关的IP地址:192.168.1.1
      * DNS的IP地址:8.8.8.8

    如果是人为手动设置,则它们是给定的,计算机每次开机,都会分到同样的IP地址,这种情况被称作"静态IP地址上网"。

    但是,这样的设置很专业,普通用户望而生畏,而且如果一台电脑的IP地址保持不变,其他电脑就不能使用这个地址,不够灵活。出于这两个原因,大多数用户使用"动态IP地址上网"。

    所谓"动态IP地址",指计算机开机后,会自动分配到一个IP地址,不用人为设定。它使用的协议叫做DHCP协议

    这个协议规定,每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做"DHCP服务器"。新的计算机加入网络,必须向"DHCP服务器"发送一个"DHCP请求"数据包,申请IP地址和相关的网络参数。

    如果两台计算机在同一个子网络,必须知道对方的MAC地址和IP地址,才能发送数据包。但是,新加入的计算机不知道这两个地址,怎么发送数据包呢?

    DHCP协议做了如下规定:

    DHCP协议,首先,它是一种应用层协议,建立在UDP协议之上,所以整个数据包是这样的:

    (1)最前面的"以太网标头",设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。

    (2)后面的"IP标头",设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。

    (3)最后的"UDP标头",设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。

        这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道"这个包是发给我的",而其他计算机就可以丢弃这个包。

         接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个"DHCP响应"数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

         新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。

    展开全文
  • 下图是基于车载以太网的车载网络所使用的各种通信协议,在这篇文章中我将简要介绍一下位于7层上的DHCP协议。 车载以太网涉包含的各种协议 DHCP的全称是Dynamic Host Configuration Protocol,翻译作动态主机配置...
  • android4.0 通过DHCP实现以太网连接

    千次阅读 2015-07-07 11:12:58
    本文转载自 android4.0 通过DHCP实现以太网连接由于项目需要,需要使用以太网进行通讯,看了一下一个网友的实现,基于android4.0的以太网DHCP或者设置静态Ip来实现网络连接,主要实现过程如下:一。DHCP动态获取ip...
  • DHCP,DNS和HTTP是3种常见的高层协议。 一,动态主机配置协议DHCP 1,DHCP简介 ...DHCP的前身是BOOTP协议(Bootstrap Protocol),BOOTP被创建出来为连接到网络中的设备自动分配地址,后来被DHCP取代了,DHC
  • 以太网设置一般是进入系统原生的设置APP,进入到以太网选项进行设置的。在一些专用场合,需要定制APP,不直接调用系统的设置,那么就要自己实现以太网动态和静态的设置。 权限: <uses-permission android:...
  • Android4.4 以太网DHCP启动过程介绍

    万次阅读 2016-05-19 12:59:35
    现在对以太网的初始化流程、网络策略配置、dhcp交互过程等做一些简单的介绍。 一、以太网启动流程 1. 创建ConnectivityService  SystemServer.java  // networkmanagement、networkStats、networkPolicy已经提前...
  • Android 7.0 自带EthernetService,默认开机就会启动,默认ip获取方式是动态分配(DHCP),有时候公司路由器DNS设置有问题,导致无法上网(能ping通局域网,无法上外网),手动设置静态IP就派上用场了。 废话不多说...
  • HELLO,我在调试安卓设备时发现当路由器重启后,设备获取不到IP地址(使用的DHCP),通过抓包工具发现,安卓设备的discover包在路由器还没有完全起来之前就已经发送完毕,并且后续一直都没有discover包发出
  • 最近项目上有需求要在项目中修改以太网DHCP和静态IP,在网上看了很多这方便的Demo,发现都不够全面,正好我们公司有个自己集成的EthernetManager的android源码,在源码中,找到了如何修改以太网DHCP和静态IP,在...
  • Ethernet(以太网)之 DHCP详解

    千次阅读 2018-05-04 08:47:13
    DHCP 工作原理 什么是DHCP?   DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域网环境,主要作用是...
  • H3C系列以太网交换机根据设备型号的不同,可以支持以下部分或全部DHCP功能。DHCP Server:支持使用全局地址池/接口地址池的DHCP Server支持配置IP 地址租期支持为DHCP 客户端分配网关地址、DNS 服务器地址、WINS ...
  • 原来,他做实验的CPU已经被分配IP地址了,且已经被固化为静态IP地址了,禁止了BOOTP/DHCP请求。然后,我一顿操作。”师傅,可以了!“,语气明显带着佩服。 其实很简单,且看: 1.打开IE浏览器,输入CPU已...
  • DHCP以太网通道、Trunk实验01:DHCP服务器实验目标:在路由器上配置DHCP服务器实验环境:在Cisco模拟器上开启两台PC机和一台交换机和一台台路由器, 实现动态分配IP地址、网关地址和DNS服务器地址。路由器地址:...
  • H3C S7500 系列以太网交换机 典型配置案例 DHCP典型配置
  • IP 设置 DHCP Static WLAN 以太网 ​ 局域网下常常会有改ip的需求,为了方便,写了一个方便设定WIFI,以太网动态IP,静态IP的脚本,记录一下。 ​ PS: 编码格式需要改为 ANSI; 网关、DNS服务器都要根据自己所需...
  • 实验03:配置网络实现交换机以太网通道功能一、实验目标通过CiscoPacketTracer来配置两台交换机以太网通道。二、实验环境和拓扑window7操作系统,CiscoPacketTracer软件。拓扑结构见下图:三、实验步骤1、按照拓扑图...
  • #W5500以太网控制芯片相关文章链接# 上一篇文章:W5500以太网控制器芯片(二):ioLibrary库实现TCP客户端 如果要W5500的IP动态分配,则要实现DHCP功能,实现流程如下: 准备工具(和上篇一致): a、电脑上装一...
  • 我的目标是在我的MacBook以太网端口上安装一个以太网交换机,我将通过DHCP连接几个Raspberry Pi连接,每个都将运行VNC服务器进行远程访问,我希望我的互联网可以从我的MacBook的WiFi连接。 为了做到这...
  • 4)Route(config)# ip dhcp excluded-addrss 起始保留地址 结束保留地址 以太网通道 1.作用:通过将多根网线捆绑为一根逻辑网线,可实现带宽成倍提升 注:最多可捆绑8根网线,并且必须接口连续 以太网通道...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,774
精华内容 10,709
关键字:

以太网dhcp