9. Internet Protocol(IP)

나는컴공생·2024년 6월 5일

Computer Network

목록 보기
1/4
  • Network Layer protocol
  • IP 상 packet = datagram
  • Packet Delivery Model(host - router - router - host)
    • connectionless (IP 전달 할 때 연결되어있을 필요가 없다)
    • Best-effort(unreliable)
      • packets들은 손실될 수 있고,
      • 보낸 순서가 이상하게 바뀔수도 있고,
      • 중복으로 전달 될 수 있고,
      • 오랜시간동안 지연될 수 있다.
  • 만약, Network Layer가 없다면 물리적으로 host들이 연결된 경우만 통신 가능합니다. 라우터를 사용하여 "multihop" 통신을 가능하게 합니다.
  • IP는 모든 라우터들에게 요구되어지는 프로토콜입니다.(hourglass model)

IP Packet Format

  • Header(20~60 byte) + Data(Payload)
  • 20 bytes = 4byte 5 = 32bits 5
  • VER(4): 0100[4] / 0110[6]
  • HLEN(4): header 크기
    • 단위가 word이므로, 실제 byte크기는 4를 곱해야한다.
    • ex) 60byte -> 1111[15], 20byte -> 0101[5]
  • Service Type(8):
    • Service Class(Old)
      • Precedence(3): 패킷의 우선순위
        • 라우터가 패킷을 드랍할 때 가장 낮은 우선순위를 사용한다.
      • TOS bits(4): service 유형
        • 데이터그램을 어떻게 처리할지 정의하는 서비스 유형(TOS) 를 나타낸다.
        • 지연을 최소화/비용을 최소화/normal/처리량 최대 등
    • Service Class(Revised)
      • DSCP(6): 우선순위 기존 0~7에서 더 세분화
      • ECN(2): 데이터 길막힘 알려줌
  • Total length(16): header + data의 byte 길이=datagram size

  • Identification(16):
  • Flags(3):
  • Fragmentation offset(13):

  • Time to live(8): packet의 수명
    • 라우터 1개 거칠때마다 1씩 감소되며, 0인 경우 drop된다.
    • 라우팅 오류로 무한 루프인 경우 자원이 되는 현상을 방지한다.
    • data 가까운 곳만 보낼래! TTL=2 (범위 정하기 가능)
  • Protocol(8): transport, 즉 상위 계층의 protocol
    • TCP : 6 / UDP : 17
    • 이 데이터가 TCP/UDP로부터 온거야~!!
  • Header checksum(16): 오류 감지
    • 송신) header 나머지 bit 다 채우고 난뒤, 계산된 값
    • 수신) 수식 다시 계산, checksum과 같으면 header 정상 도착

  • Source IP address(32)
  • Destination IP address(32)

  • Option:
    • HLEN 값 최소 5
    • HLEN값 = 1000 -> 40byte -> option field가 20byte!

ex) HLEN = 5, total length = 0x0028
-> header=20byte, total length=40byte
-> data = 40 - 20 = 20byte
ex) IPv4 packet 앞부분: 0x45000028000100000102
16진수 1자리 = 4bit

  • 4/5/00/0028:
    • 버전 4, 헤더크기 20byte, service class:normal, total length 40byte
  • 0001/0000
  • 01/02: TTL->1, Protocol->2

IP Fragmentation

: 데이터그램의 크기가 data link layer가 처리할 수 잇는 크기보다 클 경우 근원지 호스트나 라우터에서 쪼갠다.
(단편화된 데이터그램은 더 작은 MTU가진 네트워크에서 다시 단편화 될 수 있다.즉, 여러번 단편화 가능)
중간 라우터에서는 단편호된 데이터그램을 처리하게 제어하거나 어느 경로로 전송 될지 모른다.
최종 목적지 호스트에서 재조립한다!

MTU

  • Maximum Transfer Unit(최대 전송 단위)
  • data link layer가 처리할 수 있는 IP packet의 최대 크기
    • frame size가 너무 크면, 오류 발생가능성이 높고, 검출을 못하기 때문에 MTU보다 큰 경우는 나눠서 보내줘~
  • datalink Protocol마다 다른 MTU 가진다.
    ex) Ethernet MTU: 1500byte
    • IP datagram = header(20) + data(1480)
    • IP가 단편화할때, data 1480byte를 나눠야한다.

Fragmentation How?

:IP 패킷이 MTU보다 크다면, payload를 여러개의 패킷으로 나눈다.
단, IP header는 각 fragment에 붙어야한다!
ex) MTU = 1500이면 header 크기 제외하면, 1480이 최대 data크기

-> 목적지 호스트에서 재조립하기 위해서는, 단편화하는 호스트나 라우터는 flag, offset, 식별자를 저장합니다.
-> packet total length와 checksum도 변한다!
-> 단편 하나라도 다 도착안하면, 패킷 다 버린다.

  • Identification(16):

    • 같은 패킷의 모든 fragment들은 같은 식별자를 갖는다.
    • 식별자를 통해 패킷을 전송한 근원지 호스트를 구분한다.
  • Flag(3): unused(1) + D(1) + M(1)

    • D: Do not fragment
      • 1: 단편화 해서는 안된다. 근데 MTU가 작아서 단편화를 하지 않으면 보내지 못하는 상황이라면, 그냥 패킷 버린다.
    • M: More fragments
      • 0: 내가 마지막 fragment이거나, 나는 원래 단편화 안된 패킷
      • 1: 나 뒤에 fragment 더 있다.
  • Fragmentation offset(13):

    • 전체 datagram에서 해당 단편의 offset
    • data 에서의 offset만 따짐!!(header 제외)
    • 8 byte단위!!!
      ex) 4000 = 1400 + 1400 + 1200으로 단편화
      • 0000-1399: offset = 0000/8 = 0
      • 1400-2799: offset = 1400/8 = 175
      • 2800-3999: offset = 2800/8 = 350
        ex) fragment offset=370이면, 370*8 = 2960 byte부터 시작하는 단편이구나~
  • ex)

  • ex)

    • 패킷이 도착햇는데, M = 0이면, 이게 마지막 단편이거나 오직 하나의 단편이다.(frag 되었을수도, 안되었을수도)
    • 패킷이 도착햇는데, M = 1이면, 무조건 frag되고, 마지막 단편이 아니다.
    • fragmentation offset = 0, M = 1이면, 이 단편이 가장 첫번째 단편이고, 다른 단편들이 더 있다.
    • fragmentation offset = 100이면, 이 단편의 데이터
      부분의 offset은 100*8 = 800 byte이다.
    • fragmentation offset is 100, HLEN is 5, and total length is 100. What is the first and last position of this fragment in the original packet? (the first and the last bytes)
      • HLEN=header 크기는 5*4 = 20 byte
      • total length = 100 byte
      • data length = 80 byte
      • offset = 100 -> 100*8 = 800 byte
      • 처음: 800, 끝: 880879
    • HLEN = 5, 패킷 크기 5140 bytes, MTU = 1500이면 어떻게 단편화 되는가?
      • header=20byte
      • 전: 5140 = 20(header) + 5120(data)
      • 후: (20+1480) + (20+1480) + (20+1480) + (20+680)

0개의 댓글