본문 바로가기

컴퓨터 사이언스/네트워크

[모바일 컴퓨팅] IP (Internet Protocol)

IP

- 네트워크 레이어 프로토콜

- 현재 버전은 Version 4 (IPv4). RFC 891에 명시되어있다.

- 라우터와 호스트 둘 모두에게 구현되어있는 가장 높은 레이어 프로토콜이다.

 

IP service

- IP는 unreliable connectionless best effort service

Unreliable : 손실된 패킷을 복구하려는 시도를 하지 않는다.

Connectionless : 각 패킷(데이터그램)은 독립적으로 처리된다.

IP는 패킷들의 논리적 순서에 대해 알지 못한다. (순서를 보장해주지 않는다.)

Best Effort : 서비스에 대해 보장해주지 않는다. (no throughput guarantee, no delay guarantee)

- 때문에, 더 상위의 레이어 프로토콜은 중복 패킷, 잃어버린 패킷에 대한 처리를 해주어야 한다.

- 패킷은 순서를 어기고 전송될 수 있다.

- one-to-one(unicast), one-to-all(broadcast), one-to-several(multicast) 지원

- IP multicast는 IGMP, multicast routing과 같은 별도의 프로토콜이 더 필요하다.

 

IP Header

20 bytes <= Header Size < 2^4 * 4 bytes = 64 bytes

20 bytes <= Total Length < 2^16 bytes = 65536 bytes

 

Version :

- 보통 4 (for IPv4), 6은 IPv6

- Header Length : IP header length, 곱하기 4 bytes를 해준다. 보통 5 (for a 20-byte IPv4 header)

 

DS/ECN field :

- Type-of Service (TOS) field라고 불리었었다.

- Differentiated Service (6 bits): 특정한 서비스 레벨에 사용된다. ex) more fast manner, priority

하지만, 지금은 지원되지 않는다.

- Explicit Congestion Notification (2 bits): IP 패킷에 캡슐화된 TCP 프로토콜이 ECN 기능을 사용한다고 알려주는 역할

 

Total length :

패킷 바이트의 숫자

- 16bits가 할당되므로, 최대 사이즈는 65,535 bytes이다. 2^16 - 1

데이터는 65535에 IP header size 20을 빼줘야하므로 최대 65515 bytes

 

Flags :

- 첫 비트는 항상 0으로 set

- DF bit (Do not fragment) : 패킷의 사이즈가 너무 클 때, fragment하지 않고, 패킷을 드랍하고 icmp 메시지를 보내게 함

- MF bit (More framgents) : 해당 패킷은 조각 중에 하나이고 해당 하는 조각들이 더 있음을 알려준다.

 

Maximum Transmission Unit (MTU)

- IP datagram의 최대 크기는 65535이다. 하지만 데이터 링크 프로토콜은 일반적으로 훨씬 더 작은 한계를 가진다.

- 이더넷 프레임은 최대 1500 bytes의 페이로드를 가진다.

- 최대 IP datagram 크기에 제한을 주는 데이터 링크 프로토콜을 MTU라고 부른다.

Ethernet: 1500, FDDI: 4352, 802.3:1492 ... PPP는 각 엔드 포인트끼리 협상한다.

 

Fragmentation

- MTU가 다른 라우트를 할 때, 데이터그램은 여러개의 데이터그램으로 나누어진다.

- Fragmentation은 sendor, 중간 라우터에서 실행될 수 있다.

- 같은 데이터그램이 여러번 나뉘어질 수 있다.

- Reassemble은 목적지 호스트가 한다.

- fragment된 데이터그램들은 같은 Identification field를 갖는다.

- Flag (DF, MF), fragment offest, total length, checksum이 변하게 된다.

 

Time-to-Live (TTL) Field

- 포워딩 루프가 형성되면 패킷은 영원히 그 루프를 돌고 있을 것이다.

- 이 패킷들이 축적되면 패킷들은 라우터의 모든 자원을 소비할 것이다.

때문에, TTL field가 사용된다.

- Sender는 특정한 값을 TTL filed로 set한다.

- 각 라우터는 TTL field를 1씩 줄인다. (1 hop에 1씩 감소)

- TTL 값이 0에 도달하게 되면 데이터그램을 drop하고, source IP address로 ICMP를 사용해 time exceeded 메세지를 전송하게 된다.

 

Protocol

- 상위 레이어의 프로토콜을 명시한다.

- 수신 호스트에서 de-multiplexing하는데 중요하다.

 

Checksum

- IP header의 모든 16-bit words를 1's complement로 변환한다.

1011/1000/0101/0111 -> 1011 + 1000 + 0101 + 0111 = 11111 -> 10000 -> 0001

end-around carry : 초과된 앞에 값을 뒤로

- 라우터는 TTL을 1씩 줄여주기 때문에 IP header가 바뀌게 된다 때문에 라우터마다 계속 checksum을 다시 계산해주어야 한다.

-> checksum이 맞지 않으면 패킷을 무시한다.

 

IP address

- Destination address : 수신 호스트의 unique identifier였지만, 현재는 NAT로 인해 그렇지 않다.

어느 곳으로 포워딩 될지 결정하는데 도움을 준다.

- Source address : 송신 호스트의 unique identifier

수신자가 source address를 보고 수신 여부를 결정할 수 있다.

수신자가 송신자에게 회신할 수 있게 해준다.

 

Options

- 보안 제한사항, 라우트 경로 저장(자신의 ip address를 헤더에 저장하는 라우터),

timestamp(ip address와 시간을 헤더에 저장하는 라우터), source routing(통과할 수 있는 라우터 목록, 통과해야되는 라우터 목록)

 

Padding

- 헤더가 4bytes로 끊어지도록 패딩

 

IPv6

- IP address가 16bytes(=128bits)로 이루어진다.

- IPv4는 최대 2^32, IPv6는 최대 2^128

- 8rodml 16-bit integer로 표기

CEDF:BP76:3245:4464:FACE:2E50:3025:DF12

:0000:은 :: 로 표기 될 수 있다.

::80:8F:89:90 -> ::128.143.137.144

 

IP를 이용한 공격

- option의 동작과, frament reassemble 등을 이용

MF 비트를 가진 데이터그램을 보내, 자원 소비

- header length나 버전 넘버 등을 수정하여 라우터를 고장내거나, 성능을 저하시킨다.

- IP spoofing

송신자 ip 주소를 타겟 주소로 바꿔 보내, redirect를 타겟이 받도록 함

ingress filtering, egress filtering을 이용해 방지