IPv4 Header 형식
통상적으로 (상기 그림의 Options가 별도로 붙지 않는 이상) IPv4 Header의 크기는 20bytes이다.
상기 그림의 20bytes 부분이 header 부분이라고 생각하면 된다.
길이는 총 32bit이다.
•
첫번째 행
◦
Version
▪
IPv4의 헤더 형식이기 때문에 4bit를 갖는다.
◦
IHL(Internet Header Length)
▪
packet 중 Header의 값을 이야기한다.
이 값은 보통 5이고, 전체 길이는 = 32bit,
즉 4bytes이기 때문에 5 * 4bytes 하여 헤더는 20bytes의 length를 가지는 것이다.
◦
TOS(Type Of Service)
▪
서비스의 우선 순위를 제공한다.
◦
Total length
▪
packet의 길이
▪
16bit이기 때문에 = 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 ID와 host 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 계층 이하로 내려가지 않는다.