1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
dhcp protocol: https://datatracker.ietf.org/doc/html/rfc2131
dhcp options : https://datatracker.ietf.org/doc/html/rfc2132
dhcp message:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| op (1) | htype (1) | hlen (1) | hops (1) |
+---------------+---------------+---------------+---------------+
| xid (4) |
+-------------------------------+-------------------------------+
| secs (2) | flags (2) |
+-------------------------------+-------------------------------+
| ciaddr (4) |
+---------------------------------------------------------------+
| yiaddr (4) |
+---------------------------------------------------------------+
| siaddr (4) |
+---------------------------------------------------------------+
| giaddr (4) |
+---------------------------------------------------------------+
| |
| chaddr (16) |
| |
| |
+---------------------------------------------------------------+
| |
| sname (64) |
+---------------------------------------------------------------+
| |
| file (128) |
+---------------------------------------------------------------+
| |
| options (variable) |
+---------------------------------------------------------------+
dhcp message flags field:
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|B| MBZ |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
B: BROADCAST flag
MBZ: MUST BE ZERO (reserved for future use)
dhcp message field description:
FIELD OCTETS DESCRIPTION
----- ------ -----------
op 1 Message op code / message type.
1 = BOOTREQUEST, 2 = BOOTREPLY
htype 1 Hardware address type, see ARP section in "Assigned
Numbers" RFC; e.g., '1' = 10mb ethernet.
hlen 1 Hardware address length (e.g. '6' for 10mb
ethernet).
hops 1 Client sets to zero, optionally used by relay agents
when booting via a relay agent.
xid 4 Transaction ID, a random number chosen by the
client, used by the client and server to associate
messages and responses between a client and a
server.
secs 2 Filled in by client, seconds elapsed since client
began address acquisition or renewal process.
flags 2 Flags ([0]: broadcast flag).
ciaddr 4 Client IP address; only filled in if client is in
BOUND, RENEW or REBINDING state and can respond
to ARP requests.
yiaddr 4 'your' (client) IP address.
siaddr 4 IP address of next server to use in bootstrap;
returned in DHCPOFFER, DHCPACK by server.
giaddr 4 Relay agent IP address, used in booting via a
relay agent.
chaddr 16 Client hardware address.
sname 64 Optional server host name, null terminated string.
file 128 Boot file name, null terminated string; "generic"
name or null in DHCPDISCOVER, fully qualified
directory-path name in DHCPOFFER.
options var Optional parameters field. See the options
documents for a list of defined options.
- A DHCP server always returns its own address in the 'server identifier'
option.
- Client must accept DHCP of at least 576 octets (312 octects of option)
- Time values (eg lease) are relative times in seconds and should be treated
relative wo each nodes clock.
- Services:
- Parameter repository (2.1), used for persistent storage of network
parameters.
- Dynamic nw address allocation (2.2)
- Protocol
- op == BOOTREQUEST client -> server message
- op == BOOTREPLY server -> client message
- options[0:4] -> magic cookie {0x63, 0x82, 0x53, 0x63}
- option (53 - DHCP Message Type) required in all dhcp messages
1. Client broadcasts DHCPDISCOVER (53).
2. Server respond with DHCPOFFER (53).
- yiaddr -> allocated address
- additional options
3. Client broadcasts DHCPREQUEST (53).
- must include 'server identifier' option
- 'requested ip address' option must be set to 'yiaddr' offerened in 2.
4. Server sends DHCPACK (53) to client.
- fill 'yiaddr' with allocated address
- add configuration parameters
5. Client may send DHCPDECLINE (53) if it detects addr already in use.
6. Client may send DHCPRELEASE (53).
- Constructing dhcp message
- variable options must end with 'end (255)' option
- client -> server udp port 67
- server -> client udp port 68
- @server (msg received by client)
- giaddr !=0 -> using BOOTP relay -> send resp to @giaddr:67
- giaddr == 0 && ciaddr != 0 -> send resp to @ciaddr:68
- giaddr == 0 && ciaddr == 0 && flags.b == 1 -> send resp to broadcast 0xffff_ffff
- giaddr == 0 && ciaddr == 0 && flags.b == 0 -> send resp to client hw addr + yiaddr
- Options:
- 'maximum DHCP message size'
- Client may negotiate lager dhcp messages.
- 'server identifier'
- A DHCP server always returns its own address in the option.
- 'client identifier'
- Client may pass explicit client identifier to server.
- 'DHCP message type' (REQUIRED)
- type of dhcp message
|