///
Search

L3 - 3. IP 헤더 형식, 서브넷 마스크와 CIDR, Brodcast IP 주소, Host 자신을 가르키는 IP 주소

IPv4 Header 형식

통상적으로 (상기 그림의 Options가 별도로 붙지 않는 이상) IPv4 Header의 크기는 20bytes이다. 상기 그림의 20bytes 부분이 header 부분이라고 생각하면 된다.
길이는 총 32bit이다.
첫번째 행
Version
IPv4의 헤더 형식이기 때문에 4bit를 갖는다.
IHL(Internet Header Length)
packet 중 Header의 값을 이야기한다. 이 값은 보통 5이고, 전체 길이는 252^5 = 32bit, 즉 4bytes이기 때문에 5 * 4bytes 하여 헤더는 20bytes의 length를 가지는 것이다.
TOS(Type Of Service)
서비스의 우선 순위를 제공한다.
Total length
packet의 길이
16bit이기 때문에 2162^{16} = 65535
위의 값에서 헤더 길이 20bytes를 빼면 상기 그림의 65515bytes의 값이 나온다.
때문에 이론상 IP Packet은 64KB가 가장 큰 수이다.
두번째 행 - 단편화
단편화란?
어떤 네트워크를 갔더니 packet의 MTU가 1300KB밖에 안되는 경우가 있다면 packet을 이에 맞게 잘라주어야 함 ⇒ 이 과정이 단편화이다.
세번째 행
TTL(Time to Live)
이라는 단위를 만날때마다 감소하는데, 이 값이 0이 되면 이 packet은 버려진다.
Protocol
L3 Packet Payload 내부에 또 다른 Header가 올 수 있다. 이런 경우, 이 안에 있는 header를 어떻게 해석해야하는지에 대한 설명이 protocol에 저장되어 있다.
Protocol마다 고유 번호가 존재
TCP, UDP
Header checksum
네트워크로 데이터가 송신되는 과정에서 손상이 일어날 것을 대비하여 검사하는 값.

서브넷 마스크와 CIDR

ipconfig(윈도우) or ifconfig(Mac) 입력 시 네트워크 설정 보기 가능

Subnet Mask

서브넷 마스크를 하는 이유는? 브로드캐스트 영역(네트워크)를 나누기 위함 입니다.
한 네트워크에 수 많은 호스트가 있을 경우 원활한 통신이 불가능해지게 됩니다.
이를 해결하기 위해서 네트워크를 적절하게 나누어 주셔야 합니다. 또한 네트워크를 적절하게 구분지어주기 때문에 IP 주소를 아끼는 효과가 있습니다.
네트워크를 나눈다 = 네트워크 ID의 범위와 호스트 ID를 나눠 자원을 효율적으로 분배
192.168.0.10위와 같은 IP주소를 기준으로 이해해보려고 한다.
IP주소의 구조가 24bit(Network IP)8bit(Host IP)로 나뉘어진다
위의 IP 주소를 2진수로 표현하면 다음과 같다.
1100 0000 1010 1000 0000 0000 | 0000 1010 → 192.168.0.10
1111 11111 1111 1111 1111 1111 | 0000 0000 → 255.255.255.0
위의 2진수를 비트 AND 연산하면 1100 0000 1010 1000 0000 0000 | 0000 0000이렇게 표현할 수 있다. ⇒ 192.168.0.0(보통 마지막 host ID는 떨어진다)
Subnet Mask란?
32bit 숫자로 '0'의 비트는 호스트 부분을 나타내고 '1'의 비트는 네트워크 부분을 나타낸다. 이러한 방식으로 서브넷 마스크는 IP 주소를 네트워크 및 호스트 주소와 분리한다.
이 subnet mask를 기준으로 network IDhost ID를 잘라내는 것.
서브넷 마스크는 자체 32비트 숫자를 이용하여 IP주소를 마스킹하기 때문에 '마스크'라는 단어가 이용되었다.
Subnet
네트워크가 작은 조각으로 쪼개져 있는 경우를 뜻한다.
즉, 작은 네트워크라고 할 수 있다.
성능 개선을 위해 효율적으로 자원을 분배하는 것을 Subneting이라고 한다.
C Class Network에서 또 자르는 활동 자체를 뜻한다.
Host ID 부분을 보면 0000 0000으로 되어있는데, 이 부분을 00 | 00 0000 으로 또 자르는 것이다.
Mask 연산 → 중요
bit 단위로 AND 연산을 해서 잘라내는 것(Host 쪽은 0으로 clear) Mask 연산을 통해서 얻은 결과 Network ID가 Packet의 Network ID와 일치한다면 '우리 네트워크로 유입되는 거구나.' 라고 판단을 한다.
IP 주소 클래스
A Class
상위 8bit를 Network ID + 이후 24bit를 Host ID로 보는 것
B Class
상위 16bit를 Network ID + 이후 16bit를 Host ID로 보는 것
C Class
상위 24bit를 Network ID + 이후 8bit를 Host ID로 보는 것
이러한 IP 주소 클래스를 잘라내기 위한 방법론으로 Subnet Mask가 사용이 되었다. 잘라낸 후 같다, 다르다를 Mask연산을 한 후 결과 비교 하는 방식으로 사용되었다. 최근에는 컴퓨터 성능이 좋아지니 이러한 개념이 불편해져서 CIDR 개념이 나오게 되었다.

CIDR(Classless Inter-Domain Routing)

IP 주소를 할당하고 패킷을 라우팅하는 방식
이름부터 Classless이다.
위에서 설명한 IP Class가 없는 개념이 도입된 것이다. CIDR 방식에서는 IP 주소를 다음과 같이 표기한다.
192.168.0.10/24위의 IP주소 (네트워크 주소와 호스트 식별자로 구성)
→ '/를 기준으로 좌측의 24bit를 Network ID라고 한다.'라고 규정을 한다는 뜻으로 해석할 수 있다.
→ CIDR가 '/24'의 경우 위와 같이 앞에서부터 24비트 이후에 오는 4번째 옥텟을 전부 사용할 수 있다는 표현. 하나의 옥텟은 8비트로, 2의 8제곱인 256개이기 때문에 192.168.0.0/24일때, 192.168.0.0 ~ 192.168.0.255까지 사용이 가능하다.
이전에는 MASK연산을 통해서 그 결과 비교를 했다면 현재의 CIDR 방식에서는 ==의 관계 연산을 사용해서 찾아내는 방식을 사용한다.

Broadcast IP 주소

1111 1111 : Host ID 부분을 모두 1로 채우면(FF가 되면) 192.168.0을 사용하는 network에서 브로드캐스트 주소로 사용된다.
Broadcast는 전체에 다 보낸다는 뜻으로 이해하면 된다.
이는 모든 네트워크 장비 전체에 모두 방송을 하기 때문에 효율이라는 관점에서는 Broadcasting을 자주 할수록 효율은 떨어진다.
그렇기 때문에 broadcast 도달 범위를 일정 수준에서 통제해야 한다.
사용할 수 있는 Host IP 주소는 254가지 이하이다.
Host ID는 총 8bit이기 때문에 256가지
사용 못하는 2가지 Host IP
255.255.255.0 즉, 0은 subnet mask 결과와 일치하게 되고,
255는 broadcast에서 사용하기 때문에 2가지를 뺀 254가지를 사용 가능
추가적으로 게이트웨이 혹은 스위치 host IP도 사용을 못한다 (게이트웨이는 1을 많이 사용)

Host 자신을 가리키는 IP 주소

인터넷에 연결된 컴퓨터인 Host가 내가 나에게 접속(연결) 해야만 할 때, 이 주체는 Process이다.
이 프로세스가 여러 개가 작동하는데, 내 프로세스들 간 통신이 필요할 때가 있다.
그 때 사용할 수 있는 주소가 바로 127.0.0.1이다. 이를 Loop Back Address라고 부른다.
이는 구조적으로 어떻게 이루어질까?
내 PC에서 작동 중인 두 개의 프로세스가 서로 정보를 주고 받으려고 한다. (IPC = Inter Process Connection)
Client, Server라는 두 개의 프로세스가 있고 192.168.0.10 이라는 IP 주소를 사용하고 있다고 가정하자.
이 때, Server의 Socket은 수신대기를 하고 있다.
외부에서 연결이 들어오는 경우라면 L1 계층부터 네트워크를 타고 들어오겠지만, 그게 아니라 외부 연결이 아니라 내부로의 연결일 경우 L3 계층의 IP 계층에서 바로 Client → Server간의 연결이 이루어지는 것이다.
여기서 문제는 IP주소는 변경될 수 있기 때문에 IP주소를 특정하지 말고, 127.0.0.1에 연결하는 것이다.
그러면 IP 주소가 무엇이 됐든 항상 3계층의 IP를 통해서 내부 통신이 이루어지도록 한다는 것이다.
실제로 packet이 L2, L1 계층 이하로 내려가지 않는다.