IP(Internet Protocol)는 Internet Protocol Suite Internet 계층에서 고정 길이 주소로 식별되는 출발지 호스트로부터 목적지 호스트까지 데이터그램을 전달하는 프로토콜이다. 각 데이터그램을 이전·이후 데이터그램과 무관한 독립적인 단위로 다루는 비연결형(connectionless) 프로토콜이며, 확인응답이나 재전송 없이 헤더 체크섬만으로 오류를 검출할 뿐 전달을 보장하지 않는다[1] — 신뢰성이 필요한 통신은 이 위에서 TCP가 별도로 확보한다.
주소 체계: IPv4와 IPv6
지금까지 가장 널리 쓰인 버전은 32비트 주소를 쓰는 IPv4다[1]. 연결되는 호스트 수가 늘며 32비트로는 감당할 수 없을 만큼 주소 수요가 커지자, 128비트 주소를 쓰는 IPv6가 후속으로 개발됐다[2] — 주소 공간이 개로 늘어난다.
표기 방식도 다르다. IPv4 주소는 32비트를 8비트씩 4구간으로 나눠 각 구간을 0~255 범위의 10진수로, 점(.)으로 구분해 적는다(예: 문서화용으로 예약된 대역인 192.0.2.1[3]). IPv6 주소는 128비트를 16비트씩 8구간으로 나눠 각 구간을 16진수로, 콜론(:)으로 구분해 적고, 연속된 16비트 구간이 모두 0이면 그 구간 전체를 ::로 한 번만 생략할 수 있다 — 몇 개의 구간이 생략됐는지 알 수 없어 복원이 모호해지므로 주소 하나에 ::는 두 번 이상 쓸 수 없다[4]. 예컨대 문서화용으로 예약된 2001:0db8:0000:0000:0000:ff00:0042:8329[5]는 2001:db8::ff00:42:8329로 줄여 쓸 수 있다.
데이터그램 형식
IPv4 데이터그램은 20~60바이트 헤더에 페이로드가 이어지는 구조로, 전체 길이는 Total Length 필드(16비트)가 표현할 수 있는 최대 65,535바이트까지 가능하다. 헤더 길이가 20~60바이트로 가변인 이유는 대부분 쓰이지 않는 가변 길이 Options 필드(최대 40바이트) 때문이다[1].
IPv6는 반대 방향으로 단순화했다. 옵션을 가변 헤더에 끼워 넣는 대신, 40바이트 고정 크기의 기본 헤더(base header)만 두고 추가 정보는 Next Header 필드로 연결되는 별도의 확장 헤더로 뺐다. 기본 헤더 뒤에는 역시 최대 65,535바이트의 페이로드가 이어진다[2].
라우팅
IP는 데이터그램에 실린 목적지 주소를 이용해 출발지에서 목적지까지 전달을 이어간다 — 경로상의 게이트웨이(라우터)마다 이 주소를 보고 다음 전달 방향을 결정한다[1]. 다음 홉으로 실제 프레임을 실어 보내려면 그 구간에서 쓰는 하드웨어 주소가 필요한데, IP 주소를 하드웨어 주소로 바꾸는 절차는 ARP가 담당한다. 데이터그램 처리 중 발생한 오류나 상태를 보고하는 데는 ICMP가 쓰인다.