본문 바로가기

ComputerScience/Network

Network Layer - 3. IP: Internet Protocol (1)

728x90

네트워크 레이어의 구성을 나타낸다. 하나씩 자세히 살펴보자.

1. IP datagram format

IP header는 (option을 제외하면) 4bytes * 5 = 20bytes이다.

ver : IPv4, IPv6 같은 버전

length : header + payload의 길이, 16비트단위까지 가능하지만 거의 1500Bytes를 넘지 않는다. 왜냐하면 우리가 대부분 사용하는 Ethernet의 최대 전송 유닛(MTU)이 1500Bytes이기 때문이다.

16-bit identifier, flgs, fragment offset : 이 필드들은 fragmentation/reassembly를 위해 사용된다.

protocol : payload에 담겨 있는 프로토콜 종류를 나타냄. ex) TCP, UDP, ICMP, IP 등

TTL : datagram이 영원히 네트워크 코어에서 영원히 circulate하지 않도록 하기 위해 사용된다.

header checksum : 매 라우터 마다 header 부분의 오류가 없는지 확인하고 TTL을 감소시킨 후 다시 checksum을 담는다.

 

그 아래가 data가 담기는 ip payload부분이고 길이는 자유롭다. 보통은 TCP, UDP segement가 담긴다.

 

datagram 기준으로 실질적으로 데이터를 담기 위해 20bytes TCP header, 20 bytes IP header가 필요하다. 이를 overhead라고 한다.

 

*참고로 IPv6에서는 checksum, fragmentation, option이 없다.

2. IP fragmentation, reassembly

네트워크를 연결하는 link는 각자 종류에 따라 max transfer unit size (MTU)가 있다. 이더넷의 MTU는 1500byte이다.

만약 MTU보다 더 긴 datagram을 보내야 하는 경우는 어떡할까? 이때 사용하는 방법이 fragmentation/reassembly이다.

datagram을 여러 fragment들로 쪼개서 보낸 후에 final destination에서 다시 합치는 것이다.

쪼개진 fragment들이 반드시 같은 경로를 타는 것도, 순서대로 같은 시각에 도착하는 것도 아니기 때문에 재조합은 반드시 도착지에서만 이루어진다.

4000 byte datagram을 보내려고한다. MTU는 1500byte이다.

4000 byte는 헤더(20) + 데이터(3980)으로 이루어져 있다. 따라서 payload부분, 3980bytes를 1480, 1480, 1020으로 나누고 각각 재포장 하여 보낸다.

쪼개진 fragment 중 마지막 패킷의 fragflag만 0으로 표시한다.

offset은 시작 지점으로 부터 떨어진 거리를 나타낸다.

첫 fragment의 offset = 0 : 0 bytes 지점부터 1480bytes 부분을 나타낸다.

두번째 fragment의 offset = 185*8=1480 : 1480bytes 지점 부터 1480bytes 부분을 나타낸다.

세번째 fragment의 offset = 370*8=2960 : 2960byte 지점부터 1020bytes 부분을 나타낸다.

 

fragflag = 1, offset = 0 : 첫 fragment

fragflag = 1, offset = n : middle fragment

fragflag = 0, offset = n : last fragment

임을 알 수 있다. 이렇게 정렬하여 다시 하나의 packet으로 reassemble한다.

 

* ipv6에서는 fragmentation을 사용하지 않는다. 라우터의 패킷 처리속도에 방해된다 생각하여 빼버렸다. 대신 ipv6는 datagram 크기를 제한해버린다.

3. IPv4 addressing

ip 주소는 32bit로 표현된다. public ip는 전 세계에서 유일성을 보장한다.

보통은 8비트씩 .으로 나눠서 표현한다.

ip는 호스트당 한개씩 할당되는게 아니라 interface 수 만큼 할당된다고 했다. 즉 내 노트북의 nic마다 서로 다른 아이피를 할당받을 수 있고 라우터도 여러개의 interface마다 아이피를 할당할 수 있다.

 

* interface는 physical link와 host/router 사이의 연결부를 말한다.

*wired interface들은 ethernet switch(hub)를 통해 서로 연결 될 수 있다. wifi interface는 wifi ap를 통해 연결 될 수 있다.

4. Subnets

ip는 subnet part, host part 두 부분으로 구성된다.

예를들어 223.1.1.0/24 라면 앞에서부터 24비트(223.1.1)가 subnet, 나머지 부분(0)이 host 부분이 된다.

같은 서브넷에 묶인 device들은 router를 거치지 않고 서로 물리적으로 닿을 수 있다.

위 그림에는 총 6개의 subnet이 있다.

5. CIDR (Classless Inter Domain Routing)

과거 IP는 classful addressing을 사용했다. 옛날에는 subnet 부분을 /8, /16, /24로 고정해서 사용했다. 

class D, E는 특별한 목적으로 사용된다.

class A의 아이피는 몇개 안되지만, 한 아이피가 16million host로 쪼개질 수 있다.

class B는 A보다 많지만 65000명의 host로 쪼개질 수 있다.

만약 학교가 class C 아이피 하나를 사용한다면 총 254개의 컴퓨터만 쓸 수 있다. 따라서 더 규모가 큰 곳은 class B 아이피를 할당받아야 한다. 하지만 규모에 따라 애매하게 10000개의 ip가 사용되지 않을 수 있다.

이렇게 fixed한 방식으로 아이피를 나누는 방식이 비효율적이고 유연하지 않기 때문에 지금은 CIDR를 채택하고 있다.

a.b.c.d/x 형식으로 임의로 subnet 부분을 정해서 사용한다.

200.23.16.0/23의 경우 200.23.16.0 ~ 200.23.17.255 만큼 host를 가질 수 있다.

이렇게 하면 수요에 맞게 subnet을 나누어 사용할 수 있다.

서브넷 마스크는 255.255.255.0이다. 즉 앞에서 24비트가 서브넷 파트라는 뜻이다.

사용할 수 있는 ip 중에 255.255.255.0은 서브넷 마스크로, 255.255.255.255는 브로드캐스트 목적으로 사용된다. 그 외의 아이피들을 host에게 할당해주면 된다. (2^8-2 개)

728x90
반응형