[컴퓨터 네트워크] IP(Internet Protocol) & Fragmentation

신현식·2022년 10월 11일
1

컴퓨터 네트워크

목록 보기
4/34

Unrealiable and Connectionless datagram protocol이다.
즉 패킷의 완전한 전달을 보장하지 않으면서 전송전에 미리 연결을 설정하지 않는다. 또한 error & flow control 기능이 전혀 없는 best-Effort 서비스이다. 데이터그램 서비스는 독립적으로 전송되며 각 네트위크 상에 접속해 있는 노드의 주소를 지정해서 데이터를 전송할 목적지를 지정하고 목적지의 주소를 가지고 패킷을 전송하기 위해 최적의 경로를 설정해주는 역할을 한다.

📌IP Datagram 형식

  • VER(version): ip프로토콜의 버전을 나타낸다.(현재 버전 IPv4이기에 0100을 표현)
  • HLEN(Header Length): 헤더의 최소길이는 20 byte, 최대길이는 60byte이다. 기본값은 5
  • Service Type: 데이터그램이 라우터에 의해서 어떻게 다뤄지는지 정의한다. 3bit의 우선권(precedence) 필드와 4bit의 TOS(Type of Service) 필드, 그리고 값이 0인 사용되지 않은 1bit로 구성된다.
    우선권 필드에서 어떤 데이터를 먼저 보낼지에 대한 우선순위를 알려준다. 111은 빠른처리를 의미하고 000은 느린 처리를 의미한다. TOS는 라우터가 어디로 길을 선택할지 도움을 준다. 4개중에 하나를 선택해서 라우터의 선택을 보조해준다.
  • Total Length: 데이터의 길이는 total length - header length이다. 2^16-1인 65535 bytes까지 표현 가능하다.
  • Flag & Flagmentation offset: IP데이터그램의 단편화에 대한 정보를 위해 데이터그램이 쪼개질 수 있는지에 대한 여부, 데이터그램이 조각났을때 뒤에 다른 조각이 있는지에 대한 여부를 판단한다.
    단편화는 정보 송수신 시에 임의의 긴 데이터를 통신 프로토콜이 관리하기에 적절한 크기로 분할하는 것이다. offset은 단편화된 조각들을 하나의 데이터그램으로 합칠때 전체 데이터그램에서의 위치를 표시한다.
  • TTL(Time to Live): sender에서 목적지까지 몇개의 라우터를 거칠지 판단한다. 데이터그램이 라우터를 떠날때 TTL의 값은 1씩 줄어든다. 만약 0이 된다면 라우터는 데이터그램을 discard한다.
  • Protocol: IP 데이터그램의 사용자 데이터에 입력된 상위 계층의 프로토콜을 표시한다. 1,6,17을 기억하면 된다.
  • Checksum: IP 헤더안에 에러를 탐색하는데 사용한다. 에러가 발생하면 IP를 discard한다.
  • Source address: 발신지의 ip주소가 저장된다.
  • Destination address: 목적지의 ip주소가 저장된다.

📌Fragmentation(단편화)

  • MTU 보다 큰 데이터그램은 전송이 불가능 하기 때문에 MTU 보다 작은 크기로 만들어 주는 과정이다. 최대 전달 단위는 MTU(Maximum Transmission Unit)이라고 하며 단편화 되는 데이터그램의 크기는 MTU보다 작아야 한다. (MTU 보다 클 경우 전송이 불가능)
    재조립(Reassembly) 란, 최종 목적지에 도착한 데이터그램 단편들을 수신자가 보낸 데이터그램으로 다시 조립하는 과정이다. 목적지의 호스트에 의해서 조립된다.
    Flag: 데이터그램의 상태나 진위를 나타내기 위한 변수, 데이터그램의 헤더에 들어가는 플래그는 D와 M으로 구성, 3bit 중 2bit만 사용한다.
    D : Do Not Fragment (D값이 1이면 단편화를 하지 않고, 0이면 단편화를 한다. 최소전송단위보다 큰 데이터를 1하면 데이터를 discard하고 ICMP를 보낸다.)
    M : More Fragment (M값이 1이면 마지막 단편이 아니고, 0이면 마지막 단편이다.)

📌Fragmentation offset

  • 단편화를 위해서 필요한 3가지 필드이다. 예를 들어서 Fragmetation을 확인해 보자면 데이터그램의 크기가 4000byte이고 MTU는 1500byte라고 하자.

  • 데이터그램의 크기가 4000Byte이므로 (IP Header: 20 byte, Payload: 3980byte)라고 이해할 수 있다. 이 데이터그램이 최대 1500Byte로 쪼개져야 한다. 그러나 1500Byte로 쪼개진 각 데이터그램에도 "헤더"가 각각 붙어야 한다. 따라서 1500Byte는 (헤더 20바이트 + Payload 1480 바이트)로 구성되어야 한다.
    데이터 필드의 부분인 3980 Byte를 1480 Byte로 쪼갠다면 1480, 1480, 1020 Payload 크기를 가진 데이터그램 세 조각으로 나눌 수 있다. 세 조각으로 나누어진 데이터그램 하나하나를 자세히 살펴보자.

    첫 번째 데이터그램의 Length는 1480+20(헤더)가 붙은 1500이 된다. ID는 특정 값인 'X'를 가지며 마지막 조각이 아니기 때문에 Flag의 값은 M='1'이 된다. 첫 번째 데이터그램이기 때문에 Offset은 0이다.

    두 번째 데이터그램의 Length는 1480+20(헤더)가 붙은 1500이 된다. ID는 특정 값인 'X'를 가지며 마지막 조각이 아니기 때문에 Flag의 값은 M='1'이 된다. 첫번째 데이터그램에서 이미 원래 데이터그램인 1480Byte를 전송했다. 두번째 데이터그램의 시작 부분은 1480부터이다. 그러나 표현할 때는 1480이라 표현하지 않고 이를 8로 나눈 수인 1480/8=185로 표현한다. (8로 나누는 이유는 그냥 오프셋 단위가 8이기 때문이다.)

    세 번째 데이터그램의 Length는 1040+20(헤더)가 붙은 1060이 된다. ID는 특정 값인 'X'를 가지며 마지막 조각이기 때문에 Flag의 값은 M='0'이다. 앞선 데이터그램에서 2960 Byte를 전송했다. 세 번째 데이터그램은 2960Byte를 표현하기 위해 2960/8=370이 된다.

    각 datagram은 헤더가 20byte씩을 차지한다. 즉 처음 datagram도 헤더가 20byte를 차지하므로 Payload는 3980byte이다. 또한 MTU는 1500byte이므로 1500, 1500, 1040으로 쪼개서 보내는 게 효율적이다. 1500+1500+1040은 4040인데 계산이 잘못된 거 아니냐고 할 수 있지만, 각 datagram이 모두 20byte의 헤더를 포함한다는 것을 생각하면 된다. 처음 datagram의 datafield가 3980이므로 1480+1480+1020=3980으로 딱 맞는다.

    이렇게 세 개의 조각을 받은 수신자는 이를 Offset 순서에 맞춰 재결합하여 원래의 데이터그램으로 복원시킨다. 해당 각각 쪼개지는 데이터그램에 각각 헤더를 붙여야 하기 때문에 MTU-20Byte를 해줘야한다는 사실을 꼭 염두해야 한다.
    추가로 중간의 Fragment를 또 쪼갤 수도 있다. 두번째 데이터그램를 1480byte짜리를 800byte와 680byte 두개로 더 쪼갠다고 해보자. 그렇게 됬을때 800byte짜리는 flag는 M='1', offset은 185이다. 680byte짜리는 flag는 M='1', offset은 285이다.
    만약 중간의 데이터 그램이 사라진다면 처음 데이터그램을 받았을때 타이머를 구동하였는데 시간이 끝날동안 안오게 되면 받았던 데이터그램도 모두 discard한다.

profile
전공 소개

0개의 댓글