[原创翻译,水平有限]

ISC DHCP支持802.1的以太网帧,令牌环和FDDI等网络。为了桥接物理层和DHCP层,它还必须实现IP和UDP协议帧。

这源于UNIX BSD socket 对未配置接口地址的接口的处理,或者在已配置接口地址的接口对广播地址的处理。DHCP协议严格遵循RFC2131,下面的流程是DHCP服务器,DHCP中继,DHCP客户端都需要执行:

  1. 从一个未配置地址的接口(没有IP地址)发送UDP报文: from IP:0.0.0.0 Ethernet:Self, destined to IP:255.255.255.255 LinkLayer:Broadcast;
  2. 在从这个未配置地址的接口接收UDP报文:from IP:remote-system LinkLayer:remote-system, destined to IP:255.255.255.255 LinkLayer:Broadcast;
  3. 在没有ARP报文传输的情况下,发送UDP报文:from IP:Self, Ethernet:Self, destined to IP:remote-system LinkLayer:remote-system;
  4. 在这种情况下,接口就可以获得一个合适的单播IP地址。

然而,在BSD socket上事情并没有这么简单,大多数unix实现广播,报文中的目的地址不是255.255.255.255,而是x.y.z.255(x.y.z是子网),这样的报文对大多数已知的DHCP客户端都是不能接收的。接收一个目的地址是255.255.255.255的报文对于现在的unix系统并不是什么问题,前提是接口已经配置了接口地址。一个没有配置地址的接口,就需要用到raw socket来处理报文了。

DHCP底层参考的更多相关文章

  1. 【计算机网络】 一个小白的网络层学习笔记:总结下IP,NAT和DHCP

    前言:这篇文章是学习网络层协议时候总结的笔记,前面的主要部分介绍的都是IP协议, 后半部分介绍NAT协议和DHCP协议 参考书籍 <计算机网络-自顶向下>       作者 James F ...

  2. dnsmasq 做 DHCP 服务器

    /etc/dnsmasq.conf #DNS服务器的地址,就是我的热点的地址 listen-address=192.168.1.1 #设置DHCP分配的地址范围和时间 dhcp-range=192.1 ...

  3. Linux中DHCP服务器的简单配置

    我安装了两台linux系统,一个作为服务器,一个客户端 两个都有3个网卡, 后两个网卡聚合为zhi一个网卡:Linux 网卡聚合 两台电脑都一样. 那么如何为这个聚合网卡进行DHCP的分配呢? 1.由 ...

  4. 【计算机网络】网络层学习笔记:总结IP,NAT和DHCP

    前言:这篇文章是学习网络层协议时候总结的笔记,前面的主要部分介绍的都是IP协议, 后半部分介绍NAT协议和DHCP协议 参考书籍 <计算机网络-自顶向下>       作者 James F ...

  5. NetScaler通过DHCP服务器获取IP地址

    NetScaler通过DHCP服务器获取IP地址 DHCP 选项参考 https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp ...

  6. Linux中DHCP服务器的简单配置(转)

    我安装了两台linux系统,一个作为服务器,一个客户端 两个都有3个网卡, 后两个网卡聚合为zhi一个网卡:Linux 网卡聚合 两台电脑都一样. 那么如何为这个聚合网卡进行DHCP的分配呢? 1.由 ...

  7. Ubuntu 14.10 创建虚拟网卡实现桥接网络

    目标需求:在Ubuntu主机创建一张虚拟网卡,使得搭建在VirtualBox中的其他主机能借助虚拟网卡构建的局域网进行相互间的通讯 步骤一:准备工具包 安装 uml-utilities 以及 brid ...

  8. EF 底层封装方法(供参考)

    闲暇之余,整理了一下EF底层的一些基础方法,供查看,只有接口,具体实现需要你们自己写了. 建议:接口的实现定义为虚方法,当父类的方法不满住子类需求时,可以重写此方法 此接口都为公用方法,基本上满足小系 ...

  9. 基于吉日嘎底层架构的通用权限管理Web端UI更新:参考DTcms后台界面

    经一周的研究学习,看了国内的H+.HUI等,国外的PaperDashboardPro.Make.Metronic BootStrap等,最终选定用一个轻量的,适合中国人的,来自DTcms的后台管理UI ...

随机推荐

  1. 理解LinkedHashMap

    转自http://uule.iteye.com/blog/1522291   1. LinkedHashMap概述: LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输 ...

  2. [ios2]使用NSOperationQueue简化多线程开发和队列的优先级 【转】

    多线程开发是一件需要特别精心的事情,即使是对有多年开发经验的工程师来说. 为了能让初级开发工程师也能使用多线程,同时还要简化复杂性.各种编程工具提供了各自的办法.对于iOS来说,建议在尽可能的情况下避 ...

  3. Entity Framework With Oracle

    参考页面: http://www.yuanjiaocheng.net/Entity/first.html http://www.yuanjiaocheng.net/Entity/jieshao.htm ...

  4. JAVA多线程实现的两种方式

    java多线程实现方式主要有两种:继承Thread类.实现Runnable接口 1.继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了 ...

  5. bzoj1588: [HNOI2002]营业额统计 splay瞎写

    最近各种瞎写数论题,感觉需要回顾一下数据结构 写一发splay冷静一下(手速过慢,以后要多练练) 用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过) 现在没有很追求代码优美,感觉 ...

  6. 疑问:关于postgres的to_number()

    postgres中的to_number(text,number),即是把字符串text转为number的函数,但有时候用的时候经常碰到这样的错误:[Err] ERROR:  invalid input ...

  7. vue使用resource发送ajax请求

    <script type="text/javascript"> new Vue({ el:'#app', created:function(){ var url=&qu ...

  8. C语言考试可能会涉及到的内容

    以下是汽院下属科院C(B)考试范围,C(A)的话,不考的内容应该都会涉及到,重点内容会延伸至三.四章. 一.教材上的两套自测题 二.C语言实验与实训教程 第一章.第二章.第三章.第四章的典型练习及解释 ...

  9. CUDA学习ing..

    0.引言 本文记载了CUDA的学习过程~刚开始接触GPU相关的东西,包括图形.计算.并行处理模式等,先从概念性的东西入手,然后结合实践开始学习.CUDA感觉没有一种权威性的书籍,开发工具变动也比较快, ...

  10. ModelState.IsValid一直为false的原因

    一,问题:ModelState.IsValid一直为false 二,解决方法和原因, 由于这个方法中传过来的RegisterForm模型的字段,某一个为空值,则会造成这个验证验证为false,去注释掉 ...