IP
Internet Protocol
컴퓨터끼리 통신하기 위해 알아서 만들어진 통신 기법과, 통신 기법을 적용하기 위한 주소를 통칭하는 말. 인터넷의 OSI 7계층 구조에서는 TCP/UDP의 바로 아래의 3계층에 위치한다.
특징[편집 | 원본 편집]
- 네트워크 계층으로서 데이터 링크 계층에서 가져온 패킷을 뭉치거나 반대로 패킷을 만들어 데이터 전송 계층으로 보낸다.
- 여기서 패킷(Packet)은 전송할 데이터를 IPv4 기준 최대 65525바이트 단위까지 적절히 잘라 20~60바이트 정도의 헤더로 묶어놓은 것이다. 데이터그램이라고도 한다. IPv6은 점보그램이라는 더 큰 단위로 묶어 보내는 기능도 있다.
- 안정성이 없다: IP는 패킷을 데이터의 순서대로 보내지도 않고, 패킷을 중복해서 보내기도 하고, 패킷이 잘 도착했는지 직접 확인하지 않는다. 이런 기능은 그 위의 TCP 같은 전송 계층에서 처리된다.
- IPv4에서 32비트의 주소를 사용하며, 네트워크 주소 외에 네트워크 마스크라는 값을 클라이언트마다 설정하여 보통 X.X.X.X/n 형태로 IP를 표시하면 상위 n비트를 네트워크 ID, 하위 (32 - n) 비트를 네트워크에 요청을 하는 호스트 ID로 한다.
- 공유기 같은 지역적인 라우터를 쓰는 경우 호스트 ID 부분을 다시 서브넷 ID와 호스트 ID로 분할하는 경우가 있다. 이를 확장 네트워크 ID라고 한다.
- IPv6은 128비트라 인터넷에서 사용 가능한 IP 총량이 더 크며, 상위 비트 몇 개가 주소 형식 설정값으로 쓰인다. IPv6으로 마이그레이션하는 방법으로 듀얼스택과 터널링이 있다.
- 듀얼스택 체계에서 IPv6의 하위 32비트는 IPv4와 같게 된다. 이를 이용해 IPv6과 IPv4를 쉽게 왕복 가능하다.
- 터널링은 IPv4 내에 IPv6 데이터그램을 두어(캡슐화/역캡슐화 작업) IPv4를 까본 다음에 IPv6 주소 및 데이터 특성 해석이 이루어지는 방식이다. 설정 터널링과 자동 터널링 형태의 구현이 가능하다. 하지만 듀얼스택 체계의 장비가 통신 중간에 필요하고 주소 해석에 필요한 성능 부하와 보안 문제가 있어서 권장되는 방법은 아니나 IPv4 통신에 사용하는 중계 장비를 어느 정도 재사용할 수 있어서 경제적이다.
- IPv4 기준 192.168.X.X처럼 규격 상에 사전에 특정 용도로만 사용 가능하도록 지정된 IP 범위가 있다. 지금 든 예시는 가정용 유무선 공유기가 보통 내부적으로 이용하도록 정한 IP 대역으로 만일 당신의 컴퓨터로 확인한 주소가 저 범위라면 당신은 유무선 공유기를 통해 인터넷에 접속하는 것이다.[1]
- IP 주소는 보통 빅 엔디안(Big Endian)으로 상위 바이트가 먼저 전송되는 방식으로 전송된다. 그래서 POWER 같은 빅 엔디안 방식으로 데이터를 인식하는 CPU라면 모를까, x86이나 ARM 같은 리틀 엔디안 방식으로 데이터를 인식하는 CPU에서는 데이터를 인지하기 위해 바이트 순서를 바꿔야 한다.
IP 헤더와 세그먼트[편집 | 원본 편집]
패킷 내 IP 헤더는 다음 요소들을 가진다. Big-Endian 바이트 순서를 가진다.
- Version(4bit)
- IHL(Header Length, 4bit)
- Type Of Service(8bit): 앞쪽 6비트는 Differentiated Services Code Point(DSCP), 뒤쪽 2비트는 Explicit Congestion Notification(ECN) 코드라고 따로 부르기도 한다.
- Total Length(16bit): 패킷의 총 길이
- Identification(16bit): IP 데이터그램의 ID
- Flags(3bit): 첫 비트는 항상 0, 두번째와 세번째는 패킷의 분할 여부, 분할된 다음 패킷 데이터그램의 존재 여부를 나타낸다.
- Fragment Offset(13bit): 데이터그램에 담을 데이터를 나누어 보낼 때의 offset
- Time To Live(8bit): 패킷 데이터그램 폐기 및 연결 중단 판단까지 거칠 수 있는 라우터의 수. 라우터 간 네트워크 루프를 패킷이 무한히 도는 것을 방지하기 위해 존재한다.
- Protocol Identification(8bit)
- Header Checksum(16bit)
- Source Address(32bit), Destination Address(32bit): 출발지와 목적지 IP 주소
- 만일 IHL의 값이 5을 넘길 경우 그 뒤에 추가 Option 필드가 따라붙으나, 일반적인 것은 아니다.
기타[편집 | 원본 편집]
IP를 까고 다니는 것은 인터넷 상에서 안전하지 못한 행위임에도 불구하고, 대한민국에서는 IP를 다른 사람에게 공개하고 다니는 사람들이 너무나도 많다. Active X가 없는 사이트에서 Tor나 VPN 형식의 프록시를 쓰고 다닌다면 IP로 인해 신상털이 및 해킹 위협을 당할 위험성이 끝도 없이 줄어든다.[2] 위키 사이트에서 계정 생성을 강력히 권장하는 것도 대부분의 위키 사이트가 기본 채용하는 크리에이티브 커먼즈 저작권 정책 때문에 문서 역사 시스템이 계정 없는 익명 유저의 기여는 익명 유저의 IP를 대신 기록하기 때문이다.
NAT(Network Address Translation, 네트워크 주소 변환)라 하여 하나의 IP에 대량의 가상 사설 IP를 임대하기 위해 공유기 등에서 자체 소스 포트를 자신에게 연결된 다른 장치의 포트에 매핑하는 것도 가능하다. 외부의 WAN에서는 하나의 IP로만 통신하지만 내부에서는 포트를 리매핑하는 포트 포워딩(Port Forwarding)을 통해 포트 사용의 자유도를 높일 수 있다. 대신에 공유기 등에 연결된 클라이언트는 WAN에서 나타나는 네트워크 통신 포트가 자신이 보는 포트와 다를 수 있다는 것을 명심해야 한다. 가령 마인크래프트의 멀티플레이 서버를 열려고 하는데 서버 컴퓨터가 공유기에 물려 있는 경우 공유기 외부 WAN에 노출된 포트 번호가 아닌 공유기 내부의 포트 포워딩된 포트값으로 서버의 포트 설정을 해야 하고 서버 주소를 다른 사람에게 공개할 때에는 WAN에 나타나는 포트 번호를 알려줘야 한다.