1. DHCP (Dynamic Host Configuration Protocol)
host는 어떻게 ip를 할당 받을까?
직접 할당 받은 아이피를 매뉴얼하게 설정할 수 있다.
대부분은 동적으로 ip를 할당 받는다. 카페, 학교에서 와이파이, 이더넷을 연결하면 자동으로 아이피를 할당 받는다.
이를 도와주는 것이 DHCP 프로토콜이다.
host가 DHCP 서버로 부터 아이피를 할당 받는 과정은 다음과 같다.
1. host가 DHCP 서버 주소를 모를때 : broadcast로 DHCP discover msg를 보낸다. src는 아직 아이피가 없기 때문에 0.0.0.0이다. (이 과정은 때때로 optional이다.)
2. DHCP가 그 메시지를 받고 응답으로 DHCP offer msg를 보낸다. dest를 아직 모르기 때문에 broadcast한다. yiaddrr을 사용하라고 알려준다. 참고로 lifetime만큼 이 아이피를 사용하도록 할 수 있다. (이 과정은 때때로 optional이다.)
3. host가 주소 할당 요청을 보낸다. (DHCP request message) 아직은 yiaddrr 사용을 확정하지 않았기 때문에 src는 0.0.0.0이고 broadcast로 메시지를 보낸다. offerr를 수락한다는 뜻의 메시지 이다.
4. DHCP 서버가 DHCP ack message를 보내준다. 서버는 그 request를 받고나서 final confirm msg를 보내준다. 이때까지도 host의 ip사용이 확정된 것이 아니므로 broadcast로 보내준다. 이 시점 이후 부터 host는 yiaddrr 아이피를 사용한다.
*DHCP는 단순히 ip만 할당해주는 역할을 수행하지는 않는다. first-hop-router(gateway), DNS server 주소, subnet mask 같은 정보도 함께 알려준다.
*DHCP 메시지는 UDP, IP로 encapsulate되어 전송된다.
2. How network get subnet part of IP address?
host가 아이피를 할당받는 방법은 배웠다 그러면 네트워크는 subnet 부분의 아이피를 어떻게 할당 받을까?
skt, kt 같은 ISP 업체에게 제공을 요청해야 한다. ISP는 보통 huge block을 가지고 있다가.
이렇게 쪼갠 smaller subnet block을 조직들에게 나누어준다. ISP는 ICANN이라는 국제 조직에게 요청한다.
3. route aggregation
Fly-By-Night-ISP는 200.23.16.0/20 블럭을 갖고 조직들에게 쪼개서 나누어준다.
internet입장에서는 organizationN들의 아이피를 알 필요 없이 ISP의 subnet만 보고 패킷을 전달할 수 있다. (longest prefix matching in forwarding table)
그 패킷을 전달 받은 하위 ISP가 또 /23 까지의 서브넷을 보고 패킷을 전달할 수 있다.
이게 가능한 이유는 ip addressing이 hierarchical 구조를 지니기 때문이다.
4. NAT (Network address translation)
NAT의 목적은 하나의 공인 ip를 여러 device가 공유하도록 하는 것이다.
public ip는 138.76.29.7 하나지만 local network에서는 10.0.0.*로 여러 사용자에게 할당해줄 수 있다.
내부의 모든 datagram은 외부와 통신할 때, 반드시 public ip를 타고 나간다.
실제로 내부에서 출발한 datagram이 라우터를 통과하면 src ip를 공인 ip로 바꿔서 나간다. 반대로 메시지가 내부로 들어올 때는 NAT가 목적지 ip를 바꾼 다음 local network로 전달한다.
{src private IP : port} 와 {src (nat)public IP : new port} 를 바꿔서 나간다. NAT는 이 변환 내역을 table에 기록해둔다.
메시지가 들어올 때는 {dst private IP : port} 와 {dst (nat)public IP : new port}를 바꿔서 안으로 보낸다.
테이블 안의 기록들은 timeout이 있어 사용하지 않으면 사라진다.
포트 번호는 16비트로 나타낼 수 있어 수가 충분히 매우 많다.
외부에서는 private ip가 보이지 않기 때문에 반드시 안에서 메시지를 먼저 보내야만이 응답이 local network로 들어올 수 있다.
이는 side effect로 보안 향상의 효과가 있다. (외부에서 안보이기 때문에 해커가 먼저 바로 메시지를 보낼 수 없다.)
*보통 가정이나 카페에서는 한개의 공인 아이피를 갖고 NAT가 여러 사설 아이피들로 변환하여 사용자들을 연결한다.
*가정의 무선 공유기는 NAT, WiFi AP(L2), routing(L3) 세 장비가 묶여있다.
*참고로 NAT는 layer3 장비라고 하기에 논쟁의 여지가 있다. 즉 layering 구분이 잘 되지 않는 장비이다.
*NAT는 end to end argument를 위반한다. 따라서 client가 NAT뒤에 있는 서버와 통신하는 일은 불가능하다. (서버는 먼저 요청을 보내지 않기 때문에 NAT에 의해 가려저서 client가 응답을 받을수가 없다.)
*P2P 응용프로그램의 경우도 NAT 뒤에 있는 사용자 끼리는 서비스하려면 골치가 아프다. (ex Skype)
*그럼에도 불구하고 NAT는 시장에서 승리하였다. IPv4의 아이피 부족 문제를 해결했기 때문이다.
5. IPv6
32비트의 IPv4 주소 개수가 부족해질 것이라 보고 IPv6를 고안했다. 게다가 이참에 IPv4에서 더 발전시켰다.
옛날과 달리 1Gbps 시대가 오면서 더 빠른 processsing/forwarding time이 요구 되었다. 따라서 IPv6에서는 checksum을 헤더에서 빼버렸다. 뿐만 아니라 fragmentation/reassembly 도 없애버렸다. (header format change)
IPv6에서는 고정크기 40 byte header를 사용한다.
pri : 우선순위를 적는 공간
flow label : 미래에 사용 될 것 같아서 만들어 두었다.
next hdr : ipv4에서 protocol field와 유사하다. 상위 layer protocol을 기록한다. ex) UDP, TCP, IP, ICMP
hop limit : ttl
option 부분도 사라졌다. 대신 next hdr가 data 안에 option을 가리키도록 활용된다.
IPv6에 따라서 ICMPv6도 나왔다.
6. Tunneling
IPv6로 이전하고 싶어도 전 세계의 모든 라우터를 업그레이드 하기는 쉽지 않다. 전 세계에는 IPv4, IPv6 라우터가 섞여있는데 어떻게 이게 정상 작동할 수 있을까?
IPv6 datagram을 IPv4 datagram의 payload에 담는다. 그리고 IPv4 header에 있는 protocol field에 IPv6라고 적는다. 이를 터널링이라고 한다. 이 기술을 응용하면 VPN을 만들 수 있다.
IPv4, IPv6 라우터가 섞여있다. logical view에서는 B와 E가 직접 IPv6 message를 주고 받는 것 처럼 느끼지만 실제로는 IPv4 payload에 담겨서 IPv6 datagram이 전달된다.
*NAT의 등장으로 IPv4의 수명이 늘어나고 NAT도 발전하고 있기 때문에 IPv6로의 이전은 상당히 오래 걸릴 것으로 보인다. IPv6의 주소가 너무 긴 것도 한 몫하고 있을 수 있다.
'ComputerScience > Network' 카테고리의 다른 글
Network Layer - 6. Control Plane (2) (0) | 2022.05.24 |
---|---|
Network Layer - 5. Control Plane (1) (0) | 2022.05.23 |
Network Layer - 3. IP: Internet Protocol (1) (0) | 2022.05.16 |
Network Layer - 2. What's inside a router? (1) (0) | 2022.05.12 |
Network Layer - 1. overview (0) | 2022.05.10 |