IP 주소에는 32비트 IPv4체계와 128비트 IPv6체계가 있습니다.
IPv4 주소는 4개의 옥텟으로 구성되는데 이는 8비트단위로 나눠집니다.
IP주소는 10진수로 표기하므로 각 옥텟은 0~255까지의 값을 가질 수 있습니다.
IP주소는 네트워크 주소와 호스트 주소로 나눠지는데, 이를 구분하는 경계점은 구정되어있지 않습니다.
IP주소는 필요한 호스트 IP의 갯수에 따라서 네트워크 크기를 다르게 할당할 수 있습니다.
이를 Class 체계라고 합니다.
A 클래스 : 네트워크 주소 256개 / 호스트 주소 16,777,216개
B 클래스 : 네트워크 주소 65,536개 / 호스트 주소 65,536개
C 클래스 : 네트워크 주소 16,777,216개 / 호스트 주소 256개
A 클래스는 첫번째 옥텟, B클래스는 두번째 옥텟, C 클래스는 세번째 옥텟에 네트워크 주소와 호스트 주소를 나누는 구분자를 가지고 있습니다.
이를 서브넷 마스크라 합니다.
클래스를 통해서 네트워크주소와 호스트주소를 나누면 얻을 수 있는 이점이 있습니다.
네트워크 주소와 호스트주소를 나누는 구분점이 고정되어있으면 모든 네트워크는 같은 호스트 IP 숫자를 갖게 됩니다. 하지만 이를 나누는 구분점이 고정되어있지 않다면, 네트워크에서 사용할 호스트 IP의 숫자에 따라서 클래스를 사용하면 주소비용을 절약할 수 있을 것입니다.
IP주소의 맨 앞 옥텟의 주소를 보면 클래스를 주소를 구분할 수 있습니다.
앞 옥텟의 주소
0~127(0 0000000 ~ 0 1111111) : A 클래스, 127의 경우 자기자신의 의미하는 루프백 주소로 사용되므로 실제로는 1.0.0.0~126.255.255.255까지의 범위를 가집니다.
128~191(10 000000 ~ 10 111111) : B 클래스
192~223(110 00000 ~ 110 11111) : C 클래스
- 내 IP를 2진수로 표현한다.
- 서브넷 마스크를 2진수로 표현한다.
- 2진수 AND 연산으로 서브네팅된 네트워크 주소를 알아낸다.
- 호스트 주소 부분을 2진수 1로 모두 변경해 브로드캐스트 주소를 알아낸다.
- 유효 IP범위를 파악한다. 서브네팅된 네트워크 주소+1은 유효 IP 중 가장 작은 IP이다.
- 브로드캐스트 주소-1은 유효 IP 중 가장 큰 IP이다.
- 2진수로 연산되어 있는 결괏값을 10진수로 변환한다.
- 서브넷 마스크를 2진수로 변환한다.
- 현재 서브넷이 가질 수 있는 최대 IP개수 크기를 파악한다. 2^6 = 64
- 64의배수로 나열하여 기준이 되는 네트워크 주소를 파악한다. 첫 블록은 0부터 시작한다. 각 네트워크의 마지막 주소가 브로드캐스트 주소가 된다. 이 주소는 다음 블록 네트워크 주소의 -1 수이다.
0~63 / 64~127 / 128~191 / 192~255- 103.9.32.146에서 호스트 주소 146이 속한 네트워크를 선택한다.
128~191- 필요한 주소를 정리한다.
네트워크 주소 : 103.9.32.128(첫 번째 숫자)
브로드캐스트 주소 : 103.9.32.191(마지막 숫자)
유효 IP 범위 : 103.9.32.129 ~ 103.9.32.190(네트워크 주소와 브로드캐스트 주소 사이)
네트워크 설계자는 네트워크 설계 시 다음 두가지 고민을 가집니다.
- 서브넷된 하나의 네트워크에 IP를 몇 개나 할당해야 하는가?(또는 PC는 몇 대나 있는가?)
- 서브넷된 네트워크가 몇 개나 필요한가?
회사 네트워크 설계를 예로 서브넷 마스크를 어떻게 사용하는지 살펴보겠습니다.
회사는 총 12곳의 지사가 있습니다.
각 지사는 PC, 복합기, IP카메라를 운영하기 위해 최대 12개의 IP가 필요합니다.
- 서브넷된 하나의 네트워크에 12개 IP를 할당해야 한다.
- 네트워크는 2진수의 배수로 커지므로 4, 8, 16, 32, 64, 128, 256개 단위로 네트워크를 할당할 수 있다. 12개의 IP를 수용할 수 있는 가장 작은 네트워크는 16개이므로, 16개짜리 네트워크를 할당한다.
- 16개 짜리 네트워크는 네트워크 주소와 브로드캐스트 주소를 사용할 2개 IP를 제외해야 하므로 실제로 사용할 수 있는 IP는 14개이다. 이 유효 IP 개수는 필요한 12개에 포함되므로 사용 가능하다.
- 16개 짜리 네트워크 12개를 확보한다. 16의 배수를 0부터 나열해 네트워크 주소를 확인한다.
- 총 16개의 네트워크 중 12개 네트워크를 할당한다.
각 계층에서 정의하는 정보
상위 프로토콜 지시자 정보
- 출발지에서 시퀀스 번호를 0으로 보냅니다(SEQ = 0)
- 수신 측에서는 0번패킷을 잘 받았다는 표시로 ACK에 1을 적어 응답합니다. 이때 수신측에서는 자신이 처음 보내는 패킷이므로 자신의 패킷에 시퀀스 번호 0을 부여합니다.
- 이 패킷을 받은 송신 측은 시퀀스 번호를 1로 (수신 측이 ACK번호를 1번패킷을 달라고 요청하였으므로), ACK 번호는 상대방의 0번 시퀀스를 잘 받았다는 의미로 시퀀스번호를 1로 부여해서 다시 송신합니다.
SYN : 연결 시작 용도. 연결이 시작될 때 SYN 플래그에 1로 표시해 보냅니다,
ACK : ACK 번호가 유효할 경우 1로 표시해 보냅니다. 초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1로 표기됩니다.
FIN : 연결 종료 시 1로 표시됩니다. 데이터 전송을 마친 후 정상적으로 양방향 종료시 사용합니다.
RST : 연결 종료 시 1로 표시됩니다. 연결 강제 종료를 위해 연결을 일방적으로 끊었을 때 사용합니다.
URG : 긴급 데이터인 경우 1로 표시해 보냅니다.
PSH : 서버 측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시할 때 사용합니다.
ARP 패킷은 송신자 MAC주소, 송신자 IP 주소, 대상자 MAC주소, 대상자 IP주소의 네 가지 필드가 중요합니다.
이 네 가지 필드를 이용해 ARP가 어떻게 동작하는지 살펴보겠습니다.
서버 A에서 서버 B로 ping을 보내려 할 때, 서버 A에서는 3계층의 IP 주소까지만 캡슐화를 할 수 있고, MAC 주소는 모르기 때문에 2계층에서는 인캡슐레이션을 진행할 수 없습니다.
서버 A는 목적지 서버 B의 MAC주소를 알아내기 위해서 ARP요청을 네트워크에 브로드캐스트합니다.
ARP 패킷을 네트워크에 브로드 캐스트할 때 아래 그림과 같이 필드를 채웁니다.
APR 패킷은 일반 2~3계층 패킷과 달리 출발지 IP/MAC, 전송자 IP/MAC, 대상자IP/MAC으로 필드를 구분해 표현합니다.
출발지 MAC : 자신의 MAC 주소
목적지 MAC : 브로드캐스트 주소(FF-FF-FF-FF-FF-FF)
전송자 MAC : 자신의 MAC 주소
전송자 IP : 자신의 아이피
대상자 MAC : 00-00-00-00-00-00
대상자 IP : 대상자의 IP 주소
2계층의 목적지가 브로드캐스트이기에 ARP패킷은 같은 네트워크 안에 있는 모든 단말로 보내지고, 이를 수신한 단말은 ARP프로토콜 내용을 확인합니다.
이때 ARP프로토콜의 대상자IP가 자신이 아니면 ARP 패킷을 버리고, 자신이라면 ARP 요청을 처리하고 그에 대한 응답을 보냅니다.
ARP응답을 보낼 때는 송신자와 대의 위치가 바뀝니다. ARP 요청을 처음 보냈던 서버A와 달리 서버B에서는 ARP 요청을 수신하면서 이미 A서버의 정보를 이용해 대상자 MAC, IP주소를 채울 수 있습니다. 그리고 자신의 MAC, IP 주소를 전송자 MAC, IP주소로 채워 응답합니다.
응답 시에는 출발지와 도착지 MAC이 명시되어있으므로 유니 캐스트입니다.
서버 A는 서버 B로 부터 응답받은 ARP 정보를 캐시 테이블에 갱신합니다. 이 캐시테이블은 정해진 시간 동안 서버 B와 통신이 없을 때까지 유지됩니다.
ARP 캐시 테이블이 갱신된 후에는 상대의 MAC주소를 알고 있으므로 도착지 MAC 주소필드에 입력하여 패킷을 보낼 수 있습니다.
- IP 주소 충돌 감지
- 상대방의 ARP테이블 갱신
- 고가용성 용도의 클러스터링, VRRP, HSRP