|
[필독] 처음 오시는 분을 위한 안내 (734) |
정은준1 |
2014-05 |
5165486 |
0 |
2014-05
5165486
1 정은준1
|
|
(광고) 단통법 시대의 인터넷가입 가이드(ver2.0) (234) |
백메가 |
2015-12 |
1699727 |
25 |
2015-12
1699727
1 백메가
|
19714 |
15년넘은 옛날 서버랑 샤시인데 재활용 문의 (12) |
새로운차원 |
2020-07 |
3193 |
0 |
2020-07
3193
1 새로운차원
|
19713 |
HP N40L + P410 하드 LED (5) |
이원재K |
2019-04 |
3193 |
0 |
2019-04
3193
1 이원재K
|
19712 |
NAS 파일 올리기 (6) |
미담 |
2019-08 |
3193 |
0 |
2019-08
3193
1 미담
|
19711 |
이게 왜 이럴까요? (4) |
양창권 |
2018-07 |
3193 |
0 |
2018-07
3193
1 양창권
|
19710 |
DELL T5500 파워 일반 컴에 사용 가능한지 고수님들께 여쭙니다 (9) |
청사초롱 |
2020-02 |
3193 |
0 |
2020-02
3193
1 청사초롱
|
19709 |
급질문 드립니다. |
박문형 |
2018-07 |
3193 |
0 |
2018-07
3193
1 박문형
|
19708 |
dell 5820구입했습니다. 근데 장치 드라이버 설치가 안되고 있습니다 ;; (6) |
블루영상 |
2019-04 |
3192 |
0 |
2019-04
3192
1 블루영상
|
19707 |
매니지드 스위치를 구해서 VLAN으로 구분했는데 (4) |
윈도우10 |
2015-06 |
3192 |
0 |
2015-06
3192
1 윈도우10
|
19706 |
하드 디스크 x 표는 뭔가요? (3) |
이지포토 |
2019-06 |
3192 |
0 |
2019-06
3192
1 이지포토
|
19705 |
CPU 속도문제... (6) |
서린이 |
2020-06 |
3192 |
0 |
2020-06
3192
1 서린이
|
19704 |
미크로틱 온도 괜찮을까요? (11) |
카머 |
2020-02 |
3192 |
0 |
2020-02
3192
1 카머
|
19703 |
레이드 용량문의 (7) |
Sakura24 |
2018-10 |
3192 |
0 |
2018-10
3192
1 Sakura24
|
19702 |
저는 큰 모니터 알아보고 있습니다. (4) |
김효수 |
2019-01 |
3192 |
0 |
2019-01
3192
1 김효수
|
19701 |
D램에 대해서 질문드립니다. (10) |
마지막세대 |
2023-08 |
3192 |
0 |
2023-08
3192
1 마지막세대
|
19700 |
투명테이프를 찾고있습니다 (4) |
GEUN |
2020-08 |
3192 |
0 |
2020-08
3192
1 GEUN
|
19699 |
[ 미크로틱 ] 와이파이 메시 지원 제품 (6) |
전설속의미… |
2020-04 |
3192 |
0 |
2020-04
3192
1 전설속의미…
|
19698 |
윈도에서 시놀로지 SHR와 같은 레이드 가능할까요? (12) |
알수없음 |
2020-07 |
3192 |
0 |
2020-07
3192
1 알수없음
|
19697 |
터치모니터 어떤가요? (5) |
김건우 |
2018-11 |
3192 |
0 |
2018-11
3192
1 김건우
|
19696 |
dhcp 포화시 서버 증설 계획 (6) |
겨울나무 |
2019-09 |
3191 |
0 |
2019-09
3191
1 겨울나무
|
19695 |
면허 종류 문의 (4) |
리키파울러 |
2019-12 |
3191 |
0 |
2019-12
3191
1 리키파울러
|
클라이언트측에서 기존 IP 사용가능하게 해달라고 하면 이전 사용한 IP의 현재상태를 확인해서 사용하지 않는경우에 한해 이전것으로 할당해주는 것은 있습니다.
DHCP 임대시간이 지나서 요청해도 IP가 같은 것도 궁금했었는데 같이 해결되었습니다.
감사합니다.
맨처음 공유기가 동작하면서 DHCP서버가 동작하면 DHCP서버 셋팅값에서 가장 작은 IP번호부터 셋팅된 네트워크 안에서 스캐닝하며
준비된 DHCP 클라이언트의 맥어드레스를 번호와 매칭시킨다라고 생각합니다..
한번 등록된 맥어드레스는 공유기가 다시 시작하지 않는 한 바뀌지 않기에 장비를 끄거나 제거한 후에 좀 시간이 지나고
다시 그 장비를 동작시키면 그 맥어드레스를 기억하는 공유기의 DHCP 서버 때문에 그 IP 번호는 바뀌지 않습니다..
하나의 C클래스 IP 대역을 가지는 DHCP 서버에서 가끔 IP번호가 꼬이거나 잦은 DHCP 서버의 재시작으로 인해 클라이언트의 DHCP 번호가
변하여 왔다갔다 하는 경우가 있는데 이럴때는 클라이언트 DHCP IP번호를 수동으로 지정하여 고정해주는 편이 사용하기 편합니다.. (특히나 프린트 서버)
DHCP 서버의 IP 범위도 클라이언트가 많지 않다면 어느 정도 갯수를 줄이는것이 DHCP서버의 IP 스캐닝시 시간을 단축하기에
좀 더 빠른 공유기의 동작을 기대할 수 있습니다..
이 질문 올리게 된 계기가 iptime 사용했을 때랑 달라서 였습니다.
iptime에선 클라이언트 장비가 많아도 IP 맨 뒤에 숫자가 50이 넘은 적이 없었던 듯합니다.
dnsmasq 라는 소형 DHCP/DNS 서버 프로그램이 있습니다. (소스는 https://thekelleys.org.uk/dnsmasq/ )
IP 할당하는 부분을 찾아보면 dhcp.c 에 address_allocate라는 함수에서 처리하는 것 같습니다.
HW MAC 어드레스를 해시함수(sdbm hash) 돌린 후 이를 기반으로 IP를 할당하는 부분이 있습니다.
간단하게 신규 할당할 때만 보면 아래 과정으로 이루어지는군요.
(재 할당 시에는 netid로 할당된 기존 할당된 ip를 다시 리턴)
1. 랜카드의 MAC address를 Seed 값으로 사용
00:03:47:B2:59:3C
2. sdmb 라는 해시 알고리즘을 돌림 (string --> int)
5644212570012911586919917584275020807673170692121545560107482439325811798923254
3. 2의 결과를 할당할 수 있는 사이즈로 나눈 나머지 값을 얻음
2의 값 mod 254
4. 시작 주소값에 3의 값을 더함
192.168.0.1 + 14
5. 결과값 192.168.0.15
리턴하기 전에 사용 중인지 핑으로 체크하고 사용 중이면 미사용 ip가 나올때까지 값을 증가.
추가로 알게 된 것들...
1. sdmb라는 해시 알고리즘이 생각보다 많이 쓰이는 것을 알게 됨.
2. 내부적으로는 ip주소(str)를 int로 변환해서 많이 쓰는데, socket.inet_aton, inet_ntoa 같은 함수들이 유용함.
파이썬으로 대충 ...
코드 :
from socket import *
import struct
import getmac
def sdbm(plain_text: str) -> int:
hash_value = 0
for plain_chr in plain_text:
hash_value = (
ord(plain_chr) + (hash_value << 6) + (hash_value << 16) - hash_value
)
return hash_value
HWADDR = getmac.get_mac_address()
b_ip = '192.168.0.1'
pool_size = 254
s_addr = int.from_bytes(inet_aton(b_ip)) + (sdbm(HWADDR) % pool_size)
t_addr = inet_ntoa(struct.pack('!L', s_addr))
print(f"MAC address: {HWADDR}")
print(f"Hash Value : {sdbm(HWADDR)}")
print(f"Temp Value : {(sdbm(HWADDR) % pool_size)}")
print(f"ip address : {t_addr}")
출력 :
MAC address: 0e:c9:b6:33:ea:41
Hash Value : 5644307572320518795668905132228045064013545965067596936257857263082430642659208
Temp Value : 22
ip address : 192.168.0.23