Internet Protocol : IP (IPv4)
대표적인 protocols
- transport layer : TCP, UDP
- network layer : IP, routing protocol
IP datagram의 구조
- ver : 4bit. IPv4와 IPv6 두개만 존재함. 비트 하나로 표현할 수 있지만, IP를 만들 때 미래에 어떻게 될 지 모르니 넉넉하게 4bit 줌. 총 16개의 version 표시가 가능하다.
- haed len : 4bit. hearder의 길이. option까지가 header이다.
- type of service : 8bit. QOS(Quality Of Service)를 하기위해 서비스 차등제공을 위해 서비스의 종류를 표시한다.
- length : 16bit. datagram 전체의 length. 가변적이다.
- 16-bit identifier : 흔히 말하는 id. data들이 날라갈 때 그 flow에 id를 부여하는 것.
- flgs : 한 개의 bit로 상태를 표시한다.
- fragment offset : 만약 1500byte를 넘거나, datagram을 짤라서 만들 경우에, 자른 부분에 대한 offset. 만약 data를 자르고 54byte부터 시작한다면 offset은 54가 된다.
- time to live (TTL) : 어떤 datagram을 보내는데 라우터 알고리즘이 오작동하여 똑같은 라우터들끼리 서로만 주고받아 무한루프로 돌리는 상황이 있을 수도 있다. 예로 1>2>3>1>2>3>1…. 같은 flow에 있는 data들이 무한루프 돌게 된다. data가 쌓이다보면 심각한 congestino이 발생한다. 그래서 라우터를 한 번 건널때마다 TTL을 하나씩 뺀다. 0이 되면 이 datagram을 버린다.
- upper layer : transport layer의 protocol 정보를 넣는다. TCP인가 UDP인가. QOS 등 서비스를 하기 위해 집어넣는다.
- checksum : bit들의 정보가 오류가 있는지.
- 32bit source IP address, destination IP address : 출발, 목적지 IP주소
- options (추가하면 존재함) : timestamp, 경로에 대한 기록, 방문한 라우터의 list 작성.
- data : 위의 계층 TCP나 UDP에서 내려온 정보들이 들어간다. data에는 TCP header나 UDP header가 포함된다.
(참고)
head len과 length는 왜 두 개 존재할까?
기능이 살짝 겹치는데 length를 두 개 둔 이유는? 처음 IP header를 설계한 사람이 나중에 header가 추가될 수 있으니 options field를 만들어 둠. 그래서 일단 options를 제외한 20byte를 default로 두고 만약 options를 추가한다면 추가한만큼 길이를 head len으로 표현했다.
TCP header는 20bytes이고, IP header도 20bytes이다. TCP IP는 합쳐서 최소 40bytes가 된다. 여기에 data payload가 붙는다. 용량이 크다…
IOT에서는 TCP IP를 잘 사용하지 않는다. IOT는 센서들이 데이터를 전달하는데 몇bit 밖에 안된다. 이 몇bit를 전달하기 위해 TCP IP 40bytes를 붙이는 건 배보다 배꼽이 큰 격이다. 오버헤드가 크다. (물론 인터넷 사용하면 쓰겠지만 별도의 네트워크를 사용하는 IOT는 이럴 필요가 없다.)
IP fragmentation, reassembly
network link들은 MTU(Maximum transfer size)를 가지고 있다. 각 link들의 type이 다르고 MTU가 다른 경우가 있어, 경우에 따라서 IP datagram을 쪼갤 수 있게 만들었다.
fragmentation
한 개의 datagram을 여러 개의 datagram으로 쪼개는 것. 만약 한 개의 datagram을 3개로 쪼갠다면, 3개의 header와 3개의 payload가 된다. 이 때 header부분은 동일한 부분도 있지만 flagmentation에 관한 부분은 다르다.
reassembly
쪼개진 datagram을 합치는 것. end host에서 쪼개진 data를 합쳐서 처리할 수도 있다.
4000bytes의 datagram이 있고 link의 MTU가 1500bytes 라고 하자. 각각의 영역들을 살펴보자.
- length : MTU가 1500byte이니 1500byte만큼 잘리게 되었다. 그런데 3개의 datagram의 length의 합이 1500+1500+1040=4040으로 4000bytes보다 40byte가 더 많다. 이것은 1개의 datagram(1개의 header)에서 3개의 datagram(3개의 header)가 되었으니 2개의 header가 추가된 셈이다. 하나의 header는 20byte이므로 2*20 = 40byte만큼 추가되었다.
- ID : 모두 같은 flow에 있으니 ID는 같다.
- fragflag : 1은 쪼갰다는 의미. 쪼개진 datagram에서 0은 이 datagrma이 쪼개진 것 중 마지막 datagram이라는 뜻.
- offset : 0, 185, 370 bytes에서 정보가 시작된다는 뜻이다. offset은 payload/8이다. 1480(header 20byte제외)/8 = 185 으로 offset을 표시했다. 세번째는 +185해서 370부터 시작.
이 4개의 field만 읽어도 정보들을 얻을 수 있음. 최초의 길이 얼마인지 등등
IP addressing
IP 주소 체계는 어떻게 되어있을까. IPv4는 32bit로, IPv6는 128bit로 이루어져 있다. host 또는 router interface는 전부 IP주소를 하나씩 갖고 있다. 예를 들어 IPv4의 IP주소 중, 233.1.1.1은 11011111 00000001 00000001 00000001 가 된다.
- sub network : 위 그림의 파란색 영역. 이 sub network에서는 IP주소가 동일한 부분이 있다. 위에서는 223.1.1 이 하나의 sub network이고 223.1.2가 또 하나의 sub network이다.
- ethernet switch : 라우터와 다르다. ethernet switch는 sub network 내에 들어가는 것이다. 라우터는 이 sub network들을 연결시켜줄 때 사용한다.
- WiFi : sub network 내에 Wifi로 연결되기도 한다.
WiFi와 ethernet switch는 Layer2이다. L2 스위치라고 불린다. 라우터는 L3이다.
Subnet과 host의 구분
위쪽 그림에서 왼쪽 subnet은 223.1.1까지 같다. 32bit중 24bit가 같고, 8bit가 다르다. 이 24bit는 subnet part로 subnet을 구별하고 나머지 8bit는 host part로 이것으로 host를 구별한다. 총 2^8(256)개의 host를 구분할 수 있는 것이다.
Subnet을 알려주기 위해 IP주소는 233.1.1.0/24 이렇게 표시한다. 즉 앞에서부터 24bit가 subnet을 의미한다는 것을 말해주는 것이다. 그리고 나머지 8bit가 host라는 것을 말해준다.
이 그림에서 subnet은 몇 개일까??
6개이다. 라우터와 라우터의 network도 subnet이다.
CIDR (Classless InterDomain Routing)
subnet은 어떤식으로 IP address를 만들어 network를 형성할까?
CIDR은 IP주소의 법칙이다. IP주소를 만드는 체계에서 한가지 포인트는 Classless이다.
address format은 a.b.c.d/x 이다. x는 subnet의 주소개수를 표현한 것이다. 위 예시를 보면 23bit까지가 subnet part이다.
예를 들어 학교에 host IP주소를 만드려는데, 8bit(256개)를 가지고 host 개수를 표현하지 못한다. 그래서 1bit 더해서 9bit(512개)의 host를 둘 수 있게 해 host를 추가적으로 두게 할 수 있다. 즉, host part는 가변적으로 둘 수 있다.
DHCP (Dynamic Host Configuration Protocol)
IP주소는 어떤식으로 부여 받을까?
IP주소는 제한적이여서 보통 집에서 사용하는 IP는 유동적으로 받게 된다. 이 유동주소를 할당하는 방법이 DHCP이다. plug-and-play 라고 말하는데, 컴퓨터를 꽂으면 주소를 가져온다는 뜻이다.
IP주소 부족하니까 network에 접속할 때 IP주소를 한 개 주는 방식이다. network의 모든 client는 항상 IP주소가 필요하지 않다. 이 때는 회수하고 다른 사용자에게 부여한다. (moblie 유저는 DHCP를 쓰지 않는다)
DHCP client-server scenario
1. client가 "server 전체에" DHCP server가 있는지 물어봄. (이 때 destnation IP는 255.255.255.255.x로 보내는데, 이것은 물려있는 모든 network에 보내는 것)
2. DHCP가 msg 받고 내가 DHCP server이고, 너가 사용할 수 있는 IP주소가 하나 있다고 msg를 보냄. 이 때도 dest IP는 255.255.255.255.x이다. 그리고 사용할 수 있는 IP주소를 적어준다.
3. client가 다시 전체한테 OK. 내가 쓸게. 이 정보를 보낸다.
4. DHCP가 최종적으로 ACK를 보낸다.
이 모든 msg의 dest IP는 255.255.255.255.x이다.
DHCP는 보통 먼저 요청한 client에게 주소를 제공한다. 이 때 주소는 first-hop router의 주소를 준다. DNS server에 대한 IP주소, network mask도 알려준다. 이러한 정보들을 알아야 network에 접속할 수 있기 떄문이다.
IP 주소의 관리
IP주소는 어떤 식으로 관리될까?
보통 network는 IP주소를 가지고 subnet을 관리한다.
위 예시에서 ISP가 20bits를 subnet part로 사용한다. 기관들의 subnet part 부분은 23이다. 즉, ISP는 21~23번째 bit로, 총 2^3(8)개의 기관을 관리할 수 있게 된다. 각 기관들은 나머지 bit들로 host들을 관리할 수 있다.
이런 식으로 어떤 IP주소를 계층체계로 구성하면 관리가 용이하다.
ISP는 20개 bit가 자기 숫자에 포함되는 것이라면, 우리 ISP에서 관리하는 8개의 기관 중에 하나에 갈 데이터니까, 나한테도 보내라고 요청할 수도 있다. 라우터가 요청을 받고, 20bit가 맞으면 ISP한테 Forwarding하는 것을 라우터의 알고리즘을 업데이트하게 된다.
이런 식으로 각자 ISP들이 알려주고, 라우터들이 이 정보를 가지고 업데이트 하게 된다.
기관1이 아래쪽으로 옮겨간 상황. 기관 1의 IP주소는 200.23.18.0/23. 앞의 23개 bit가 기관1과 일치하면 나한테 보내라고 요청할 수 있다. 즉, 위쪽으로 보내는 것이 아닌, 아래쪽으로 보내게 된다.
물론 기관들이 모두 위쪽에 있어 한번에 처리하면 좋지만, IP 쪼개다보면 항상 그렇지 않기 때문에 이와 같은 상황이 생기게 된다. 이런 상황들을 감안해서 라우팅 프로토콜을 잘 설계해야 한다.
그렇다면 ISP는 IP주소를 어디서 가져올까?
ICANN(Internet Corporation for Assigned)이라는 글로벌 기구가 있다. 여기서 전체 IP주소에 대한 관리라던지, DNS 등 전체에 대한 관리를 하게 된다.
[참고]
Computer Networking A Top-Down Approach 7-th Edition / Kurose, Ross / Pearson
'IT > 네트워크' 카테고리의 다른 글
[ 네트워크 ] NAT (Network Address Translation) (0) | 2020.05.23 |
---|---|
카페에서 와이파이가 끊기는 이유 (2) | 2020.05.20 |
[ 네트워크 ] Router (0) | 2020.05.14 |
[ 네트워크 ] Network layer (0) | 2020.05.13 |
Wireshark 패킷 분석 (DNS, TCP) (2) | 2020.05.10 |
댓글