- Overview of Network Layer
- What's inside a router
- IP(Internet Protocol) : forwarding을 위해 사용
(1) datagram format & fragmentation
(2) IPv4 addressing
(3) network address translation(NAT)
(4) IPv6
- Generalized Forwarding, SDN(Software-Defined Network)
- Middleboxes : 새롭게 생겨나는 기능들을 router의 핵심 계층으로 실을 수 없어 만드는 별도의 box
IP address
IP address: host 또는 router의 interface에 붙여지는 32bit짜리 identifier
interface는 host와 router가 연결되는 지점을 말하며,
다음과 같이 보통 하나의 router가 여러 개의 interface를 가진다.
=> IP주소는 기기가 아니라 interface를 식별
subnet
- subnet part: 왼쪽 24bit
- host part: 오른쪽 8bit
같은 subnet에 있는 host끼리는 router를 거치지 않고 연결됨
-> subnet part 24bit 똑같음("subnet mask")
이렇게 되면 24bit가 subnet을 식별하는 bit들임을 뜻한다.
subnet이 몇 개인지 알려면 subnet mask의 종류를 세면 된다.
다음과 같은 경우에는 subnet이 6개다.
Classful vs Classless(CIDR) addressing
Classless: subnet mask를 지정하는 IPv4 addressing 방식
Classful(traditional)
Classful: forwarding table을 작성하기 위해 high order bit를 기준으로 class를 나눔
* individual host별로 목적지 주소를 일일이 알려주면 비효율적이므로, class를 나눠 subnet별로 entry 만듦
=> forwarding table의 size가 host개수가 아닌, subnet개수만큼만 있으면 되기 때문에 효율적
=> subnet mask 부분만 보면 쉽게 forwarding 가능
A class의 경우 subnet part가 8bit이므로 host part가 24bit이고
그렇기 때문에 2^24가지의 경우의 수가 있다.
그중 뒤의 host part가 모두 1인 경우(x.x.255.255) broadcast address로 사용되고
모두 0인 경우(x.x.0.0) lookback address로 사용된다.
=> 실제로 host 개수 = 2^24-2
B class의 경우
=> 실제 host 개수 = 2^16-2
C class의 경우
=> 실제 host rotn = 2^8-2
A에서 E로 갈수록 host 개수가 적어지므로 subnet 규모가 작아진다.
이렇게 간단하고 효율적인 classful addressing 방식이지만 치명적인 단점이 있다.
인터넷에 연결된 end system(host) 수가 폭발적으로 증가하기 때문에 IP 주소 공간이 아주 중요하다.
하지만 classful 은 IP 주소 공간 소비가 너무 크다.
C보다 B가 수용력이 좋기 때문에 많은 기관에서 선택하지만 막상 utilize가 되지 않아 공간 낭비가 발생한다.
=> 해결책: CIDR(Classless InterDomain Routing)
Classless(CIDR)
subnet mask 길이가 가변적이기 때문에 효율적으로 IP 주소 공간 사용 가능
classful 방식은 class별로 subnet mask가 지정되어 있지만,
classless 방식은 class를 나누지 않기 때문에 subnet mask(=network prefix=prefix)를 임의로 정한다.
예제
(Q1) 다음과 같이 왼쪽 몇 개의 bit가 같다면 같은 subnet 속 interface들일까?
(A1) 아니다. subnet mask가 뭔지 모르면 확답하기 어렵다.
subnet mask = 24일 때
255.255.255.0 = 11111111.11111111.11111111.00000000
=> "128.119.40.0/24"라고 표현
(Q2) subnet mask = 26이어도 네 개가 같은 subnet에 속할까?
(A2) 그렇다.
64 = 0100 0000
80 = 0101 0000
96 = 0110 0000
112 = 0111 0000
255.255.255.192 = 11111111.11111111.11111111.11000000
64, 80, 96, 112 네 숫자의 첫 두 bit가 같기 때문에 여전히 같은 subnet에 속한다고 볼 수 있다.
(Q3) subnet mask = 28이어도?
(A3) subnet mask = 28
255.255.255.240 = 11111111.11111111.11111111.11110000
네 숫자의 첫 네 개의 bit가 같아야 하는데 넷 다 다르므로 각각 다른 subnet에 속한다.
(Q4) 128.119.40.128/26
(A4) 마지막 8bit가 "10"으로 시작하면 된다.
ex. 10001001 => 2^7+2^3+2^0=137
128.119.40.137
(Q5) 4개의 IPv4 주소가 필요한 ISP에서 사용하는 주소의 host part는 최소 몇 bits여야 하는가?
(A5) 2^h-2 >= 4
h >= 3
따라서 최소 3bits
subnet mask는 최대 32-3=29bits
(Q6) 35개의 IPv4 주소가 필요한 ISP에서 사용하는 주소의 host part는 최소 몇 bits여야 하는가?
(A6) 2^h-2 >= 35
h >= 6
따라서 최소 6bits
subnet mask는 최대 32-6=26bits
(Q7) Subnet mask가 22인 네트워크에서는 몇 개의 host IP 설정이 가능할까?
(A7) 32-22=10
2^10-2개
IP address 얻는 방법
host part 얻는 방법
1. hard-coded by system admin in a file
: 관리자에게 전화하여 관리자로부터 IP 주소 받아 직접 입력해넣기
- IP주소
- subnet mask
- gateway
- DNS 서버
2. DHCP(Dynamic Host Configuration Protocol)
: 컴퓨터 켜면 자동 실행 -> 관리자가 아닌 서버로부터 dynamic하게 일시적인 IP 주소 받아옴
- Client-Server protocol
- Plug-and-play: 켜면 자동으로 실행
- Service/deamon Runs over UDP(server port:67): 흔하게 사용되기 때문에 포트번호 지정받아 사용
* server(67)와 client(68) 모두 포트번호 지정받음 !!
DHCP client는 주소가 없는 상황이기 때문에 DHCP message를 broadcast해야. 그러지 않기 위해 client도 포트번호 지정받음.
DHCP 장점
- 간편: 네트워크에 접속하기만 하면 자동 실행
- IP address 재사용 가능: 동적으로 IP 주소 할당이 가능하기 때문에 사용자가 떠나면 그 IP 주소를 그 네트워크 안의 다른 host에게 부여 가능
* hard-coded의 경우 하나의 host는 특정 IP주소를 고정으로 사용
DHCP client-server scenario
DHCP server를 router 안에 위치시킴 => router에서 server로 전달하는 노력 줄임
1. DHCP client 도착
2. DHCP request broadcasting
3. router가 server로 보냄
* client의 IP 주소가 정해지기 전까지는 dest=broadcast 주소
1. (client->server) DHCP discover msg: DHCP server 있어?
src: client, 아직 IP 주소 할당 안 받았으므로 0.0.0.0, 포트번호 68
dest: broadcast 주소
yiaddr(할당받은 주소): 아직 IP 주소 없으므로 0.0.0.0
transaction ID: 어느 request에 대한 response인지 짝짓기 위해
2. (server->client) DHCP offer msg: 내가 DHCP 서버야. 너가 사용할 수 있는 IP 주소 있어.
src: server, server의 IP 주소 223.1.2.5, 포트번호 67
dest: client 주소 아직 안 정해졌으므로 broadcast 주소
yiaddr: 할당 가능한 IP 주소 보내줌
transaction ID: 1에 대한 응답이므로 1이랑 똑같은 ID
lifetime: yiaddr의 유효 기간
3. (client->server) DHCP request msg: IP 주소 줘.
src: client, client의 IP 주소 아직이므로 0.0.0.0, 포트번호 68
dest: broadcast 주소
yiaddr: 할당 원하는 IP주소 적어 보냄
transaction ID: 이제 다른 transaction이므로 다른 ID 부여
lifetime
4. (server->client) DHCP ack msg: 줄게 여기.
src: server
dest: broadcast 주소
yiaddr: 할당된 client의 IP
transaction ID: 3과 똑같은 ID
lifetime
* 이 이후로 "dest=client IP주소"로 바뀜
* 만약 server와 처음 컨택하는 거면 1,2 필요(IP주소 suggestion 받기 위해). 전적 있으면 필요 없음(동적 할당이므로).
그밖의 DHCP 역할
- network mask
- first-hop router(default gateway)의 주소
- DNS 서버의 이름 및 IP주소: host name를 translate해줄 수 있는 DNS server의 주소
cmd를 통해 DHCP가 주는 정보들을 볼 수 있다.
DHCP 예
컴퓨터 켜면 자동으로 구동됨
1. DHCP가 sender host의 각 계층에서 encapsulate됨
2. Ethernet을 통해 LAN에 broadcast됨
3. DHCP서버를 탑재한 router에 도착
4. destination host에서 demux됨
* DHCP ACK에는 client의 IP address, first-hope IP address, name&IP address of DNS server가 포함된다고 했었다.
client가 이 정보들을 얻음으로써 네트워크에 있는 다른 host들과 정보를 주고받을 수 있다.
Wireshark
: promiscuous mode로 전환
-> network라는 transmission medium을 지나다니는 모든 frame 검사(아까 살펴본 offer, ack 등등)
subnet part 얻는 방법
그럼 이제 subnet part는 어떻게 얻는지 알아보자.
보통의 ISP들은 subnet part가 20bit인데,
이 20bit의 subnet part을 보고 같은 것끼리 route aggregation을 해 network에 advertise한다.
ISP에 8개의 기관이 속한다고 하면, 기관을 식별하기 위해 3bit를 사용해야 한다.
Route aggregation
만약
200.23.16.0/23
200.23.18.0/23
200.23.20.0/23
200.23.30.0/23
이 모두 Fly-By-Night-ISP에 속하는 기관의 IP라고 하면, 첫 20bit는 넷 다 같기 때문에, Fly-By-Night-ISP가 internet에 200.23.16.0/20을 모두 자신한테 보내달라고 한다.
하지만 200.23.18.0/23이라는 IP의 기관이 ISPs-R-Us로 ISP를 옮긴다면 internet의 정보들이 어떻게 전달될까?
그러면 ISPs-R-Us는 200.23.18.0/23을 자신에게 보내달라고 할 것이다. prefix를 더 길게 하여 특정짓는 거다.
Internet은 보내는 것의 IP가 여러 ISP에 해당한다면, 이런 상황을 고려하여 longest prefix를 가진 곳에만 보내준다.
("Longest prefix matching")
Longest prefix matching 예제
Destination Address Range | Link interface |
11001000 00010111 00010*** ********* | 0 |
11001000 00010111 00011000 ********* | 1 |
11001000 00010111 00011*** ********* | 2 |
otherwise | 3 |
Q1) "11001000 00010111 00010110 10100001"은 어느 interface에 속하는가?
=> 0 (앞의 21bit 같음)
Q2) "11001000 00010111. 00011000 10101010"은 어느 interface에 속하는가?
=> 1 (1,2 모두 가능하지만 1의 prefix가 더 길기 때문)
예제
Q1) 20bit subnet mask 주소 block을 할당받은 ISP가 있다. 이 ISP가 8개의 회사에 주소를 공평하게 나누어 주려고 한다.
=> 그럼 host를 구별하는 데 3bit가 필요하므로 회사의 subnet mask는 총 23bit
=> 총 (2^9-2)개의 IPv4 주소 할당 가능
Q2) 128.119.40.64/26 이라는 block을 가진 ISP가 있다고 하자.
이 block에서 4개의 subnet을 만들고 싶다고 하면 각 subnet의 prefix는 어떻게 되는가?
128.119.40.64/26 => 128.119.40.01000000
128.119.40.64/28 <= 128.119.40.01000000
128.119.40.80/28 <= 128.119.40.01010000
128.119.40.96/28 <= 128.119.40.01100000
128.119.40.112/28 <= 128.119.40.01110000
Q3) ISP가 주소 block을 어떻게 가지는가?
=> ICANN(Internet Corporation for Assigned Names and Numbers)
ICANN은 TLD를 비롯한 DNS root server을 관리하고, domain 이름을 부여하며,
IP address를 5개의 regional registries(RRs)를 참고해 할당
하지만 저장공간 부족으로 인해 ICANN->NAT->IPv6 순으로 보완책 나옴
'네트워크 > 컴퓨터 네트워크 수업' 카테고리의 다른 글
4-3. IP(Internet Protocol)(4) (0) | 2024.11.18 |
---|---|
4-3. IP(Internet Protocol)(3) (0) | 2024.11.16 |
4-3. IP(Internet Protocol)(1) (0) | 2024.11.13 |
4-2. What's inside a router(1) (2) | 2024.11.12 |
4-1. Overview of Network Layer (0) | 2024.11.12 |