Computer Science/네트워크

[컴퓨터네트워크] 03. Network Layer Protocols(1) - 네트워크 계층 프로토콜

lumana 2024. 4. 10. 23:22

Network Layer Protocols(1) - 네트워크 계층 프로토콜


네트워크 계층 프로토콜

  • 1 main Protocol : IPv4
    • Packetizing
      • 패킷 포워딩
      • packet delivery
  • 3 auxiliary protocols
    • GPT : 주요 네트워크 프로토콜을 보조하기 위해 디자인된 프로토콜
    • ICMPv4 : IPv4 에러 처리
    • IGMP : 멀티캐스팅
    • ARP : IP-MAC 주소 매핑

Datagram 포맷

  • Datagram
    • Packets of the IP
    • Packets of the connectinless protocol : IP Datagram, UDP datagram
    • GPT : 독립적인 패킷 기반의 데이터 전달 메커니즘을 사용하는 네트워크 기술
    • GPT : Datagram이 라우팅되는 과정은 비연결형이고 각 패킷은 독립적으로 라우팅됩니다.
  • 데이터그램은 두 가지 부분으로 구성된 가변 길이 패킷임
    • Header
      • 20-60 바이트(가변)
        • 라우팅과 전달에 필요한 정보(SA, DA, 상위 계층의 프로토콜 정보, Length, Checksum 등등)
    • Payload(data)
      • GPT : 페이로드는 사용자 또는 애플리케이션 데이터가 실려 있는 datagram의 부분
    • 서비스 데이터 : TCP, UDP, ICMP, IGMP, RIP, OSPF, BGP ...

IPv4 고정 Header Field

  • Version Number
    • 4-bit(VER)
    • 0100(IPv4), 0111(IPv6)
  • Header Length
    • 4-bit(HLEN)
    • 데이터그램 헤더의 총 길이 (HLEN에 4를 곱한 바이트 수)
    • ex) 0101 : 5, 54 = 20*바이트**
    • 헤더는 대체로 20바이트, 나머지는 옵션 헤더
  • Service Type : Type of service(TOS)
    • 8-bit
    • 데이터 패킷의 처리 우선순위를 나타내는 QoS(Quality of Service) 매개변수를 정의
  • Total Length
    • 16-bit
    • 헤더와 데이터를 합친 IP datagram을 바이트 단위로 나타낸 길이
  • Identification(16bit), Flags(3bits), and Fragmentation Offset(13bits) : 단편화
    • GPT : 이 필드들은 IP 데이터그램이 네트워크상에서 분할될 때 필요한 정보를 제공합니다. 단편화 과정에서 각각의 조각들을 재조립하는 데 사용됩니다.
  • TTL : Time to Live
    • 8bits
    • 각 IP 패킷은 네트워크에서 일정 시간 동안만 존재할 수 있습니다
      • TTL 필드는 패킷이 라우터를 거칠 때마다 감소하여, 이 값이 0이 되면 패킷을 폐기함
  • Protocol : 페이로드 데이터 종류(TCP, UDP, ICMP, ...)
    • 8bits
  • Header checksum
    • 16bits
  • SA와 DA
    • 각각 32bits
  • 총 160bits(20바이트)
  • 이 후에는 Options와 padding에 관한 bit가 붙음
    • padding은 IPv4 헤더의 길이를 32의 배수로 맞춤 (32bit, 즉 4byte의 배수)
      • Options이 14byte라면, Pading은 2byte(00 00)가 붙는다
    • 0 - 40byte

프로토콜 필드의 값을 이용한 Multiplexing과 demultiplexing

  • 데이터그램 헤더의 Protocol 필드에는 패킷이 어떤 트랜스포트 계층 프로토콜을 사용하는지를 나타내는 식별자를 포함하고 있음
    • ICMP : 01, IGMP : 02, TCP : 06, UDP : 17, OSPF : 89
    • GPT : 예를 들어, 프로토콜 필드 값이 TCP를 나타내는 06이라면, 해당 데이터그램은 TCP 프로토콜 스택으로 전달됩니다.

예제(1)

  • IPv4 패킷이 도착. 처음 8비트가 01000010 --> 수신측에서 버린 이유?
    • 패킷에 오류가 있기 때문
    • 좌측 0100은 버전 IPv4를 가리킴 (정상)
    • 다음 4비트 0010 값은 헤더의 길이를 담고 있는데, 2X4 = 8바이트이다
      • 헤더의 최소길이는 20바이트 이므로, 송신 중에 오류가 생긴 패킷임

예제(2)

  • IPv4 패킷의 HLEN 값이 1000(2진수) 일 때, 이 패킷에 있는 헤더 옵션의 길이?
    • HLEN 값이 8이므로, 패킷 헤더의 길이는 32바이트임
    • 기본 헤더인 20바이트를 제외하면 12바이트가 옵션 헤더임을 알 수 있다.

예제(3)

  • IPv4 패킷의 HLEN 값이 5이고, total length 필드의 값이 0028(16진수) 일 때, 이 패킷에 담겨진 데이터 길이?
    • HLEN 값이 5이므로, 헤더의 길이는 20바이트
    • total length 필드의 값이 40바이트이므로, 데이터 길이는 40 - 20 = 20(byte)

예제(4)

  • 수신된 IPv4 패킷의 처음 데이터 열이 45000028000100000102...(16진수) 일 때
    • 이 패킷이 드롭되기 전에 얼마나 더 갈 수 있는가?
      • 페이로드 데이터는 어떤 데이터인가?
        • Protocol 필드는 10번째 옥텟이므로 02(16진수)
        • 상위계층 프로토콜은 IGMP이다
    • * TTL 필드는 9번째 옥텟이므로 01(16진수) * 16진수 각 자리가 4bit이므로, 16진수 두 자리로 하나의 옥텟을 나타낼 수 있음 * 01이므로 다음 라우터에서 폐기됨

예제(5)

  • IPv4 패킷의 체크섬 계산
    • 16비트 워드로 분할
    • 모든 워드의 합 계산
    • Wrapped sum 계산: 16비트를 초과하는 자리올림을 뒷자리에 더해줍니다
    • 1의 보수계산 
체크섬 값을 제외한 헤더의 모든 필드 값을 더한 다음, 
올림값(wrapped sum)을 뒷자리에서 더해주고, 결과의 반전(1의 보수)값이 체크섬이 된다. 
이 값을 헤더의 Checksum 필드에 넣어 줌 
Wrapped Sum = Sum mod FFFF Checksum = FFFF - Wrapped Sum
  • GPT : 목적지에서는 동일한 방식으로 합을 계산하여 모든 비트가 1이 되어야 합니다(체크섬과 합쳐서). 만약 모든 비트가 1이 아니라면, 이는 데이터 전송 중 오류가 발생했다는 것을 의미함
    • ex) wrapped sum이 0000 0000 0000 0001이고, checksum이 1111 1111 1111 1110인 경우 오류가 발생하지 않은 거임

단편화

  • 데이터그램은 여러 다른 네트워크를 통과할 수 있다.
  • 라우터가 데이터그램을 수신하면 캡슐을 풀고, 처리하고, 다시 캡슐화하여 프레임을 만들어 보낸다.
    • GPT : 라우터에서의 단편화
      • 라우터가 데이터그램을 수신하면, 해당 라우터의 아웃바운드 링크 MTU에 맞게 데이터그램을 단편화합니다.
      • 각 단편은 원본 데이터그램의 일부를 담고 있으며, 같은 식별자를 가지고 있습니다.
  • 데이터의 포맷은 물리계층에서 사용되는 프로토콜에 의해 달라진다.
  • LAN과 WAN을 연결하는 라우터의 경우, LAN 포맷으로 수신된 데이터를 WAN 포맷으로 구성하여 전송한다.
  • Reassembly는 목적지에서만 가능
    • GPT : Reassembly(재조립):
      • 단편화된 패킷들은 목적지에서만 다시 재조립됩니다.
      • 중간 라우터들은 패킷을 재조립하지 않습니다.

GPT 설명

  • 단편화는 데이터그램이 더 작은 패킷으로 나누어져서 각각이 네트워크를 통과할 수 있도록 하는 과정입니다.
  • 이 과정은 다양한 네트워크들이 다른 최대 전송 단위(MTU, Maximum Transmission Unit)를 가지고 있기 때문에 필요합니다
    • 이더넷(1500바이트)이나 와이파이(2300바이트)의 경우 IP packet의 양이 제한되어 있기 때문에 이를 통해 전송되려면 이를 통해 전송이 가능한 정도의 크기로 fragment를 해야 한다

Figure 19.5

  • 데이터그램이 헤더, 페이로드, 그리고 트레일러를 포함한 프레임으로 캡슐화되는 과정을 보여줍니다
  • "Header"는 프레임의 시작 부분을 나타내고, "Trailer"는 끝 부분에 위치하는 오류 검사 정보를 포함할 수 있습니다.
  • MTU는 "Frame Payload"의 최대 사이즈를 나타내며, 이 크기를 초과하지 않도록 데이터그램을 단편화해야 할 수도 있습니다.

Fragmentation Fields

  • Identification(식별자) (16bit)
    • 원본 데이터그램을 유일하게 식별하는 16비트 필드임. 1씩 증가
      • GPT : 단편화 과정에서 같은 데이터그램에서 파생된 모든 단편들은 같은 식별자 값을 가집니다
  • Flags (3bit)
    • Reserved(not used)
      • * GPT : 세 개의 비트 중 첫 번째 비트는 예약되어 있으며 사용되지 않습니다
    • D : 1이면 단편화 금지
      • * GPT : D 비트는 "Don't Fragment"를 의미하며, 이 비트가 1로 설정되면 해당 데이터그램은 단편화되지 않습니다.
    • M : 1이면 단편화된 패킷. 0이면 끝 혹은 단편화 안된 패킷
      • * GPT : M 비트는 "More Fragments"를 의미하며, 이 비트가 1로 설정되어 있으면 이후에 더 많은 단편이 올 것임을 의미하고, 0이면 마지막 단편이거나 단편화되지 않은 패킷임을 나타냅니다.
  • Fragmentation offset (13bit)
    • 8비트 단위의 오프셋
      • GPT : 각 단편이 원본 데이터그램에서 어디에 위치하는지를 나타내는 13비트 필드입니다.
      • GPT : 원본 데이터그램에서 해당 단편이 시작하는 부분을 가리킵니다.

Figure 19.6

  • 4000바이트 짜리 packet을 1400바이트의 이더넷으로 전송할 때, 원점으로 부터 얼마나 떨어져 있는지 offset으로 표기한다

Figure 19.7

  • 1400으로 세 조각을 내서 보내는 경우
  • 2번째 packet이 간 path는 MTU가 1400보다 더 작다면 이를 더 잘게 쪼개서 보내야 한다.
  • 수신 측에서는 같은 identification을 갖고 있는지, 0으로부터 얼만큼 offset이 되어있는지를 확인하여 이를 수신할 때 assembly 하게 된다.

예제(1)

M 비트가 0인 패킷이 수신됨. 
이 패킷이 첫 프래그먼트인가, 마지막 프래그먼트인가, 중간 프래그먼트인가? 
프래그먼트로 분할되었는지 알 수 있는가?
  • M 비트가 0이면, 더 이상의 후속 프래그먼트가 없다는 의미 => 마지막 프래그먼트임.
  • 하지만, 원래의 패킷이 분할되었는지는 알 지 못함.
    • 분할되지 않은 프래그먼트는 마지막 프래그먼트로 인식.

예제(2)

M 비트가 1인 패킷 수신. 이 패킷이 첫 프래그먼트인가, 마지막 프래그먼트인가, 중간 프래그먼트인가? 
프래그먼트로 분할되었는지 알 수 있는가?
  • M 비트가 1이라면, 나중에 마지막 프래그먼트가 올 예정임.
  • 이 패킷은 처음, 혹은 중간의 프래그먼트이고, 마지막은 아님.
    • 처음인지 중간인지는 다른 정보를 더 살펴보아야 함 (fragmentation offset의 값).

예제(3)

M 비트가 1이고 fragmentation offset 값이 0인 패킷 수신.
이 패킷은 처음, 중간, 혹은 마지막 패킷인가?
  • 처음 fragment임

예제(4)

offset 값이 100인 패킷 수신. 이 패킷의 첫번째 데이터는
분할되기 전의 전체에서 몇 번째 데이터인가? 이 패킷의
마지막 데이터는 또 몇 번째인지 알 수 있는가?
  • 첫 바이트의 번호를 알기위해서는 offset 값에 8을 곱한다.
    • 즉, 첫 번째 바이트 번호는 800이다.
  • 마지막 데이터의 번호는 패킷의 길이를 알기 전에는 알 수 없다.

예제(5)

offset 값이 100이고, HLEN 값이 5인 패킷 수신. 
total length 필드 값이 100. 
이 패킷의 첫번째 바이트와 마지막 바이트의 번호는?
  • 첫 바이트 번호는 100 × 8 = 800.
  • total length가 100 바이크이고, header length 가 20 바이트이므로 (5 × 4), 이 데이터그램에는 80 바이트의 데이터 있음.
  • 첫 바이트 번호가 800이므로, 마지막 바이트 번호는 879

Options

  • IPv4 데이터그램의 헤더는 2개의 파트로 구성
  • Fixed part
    • 20 바이트 고정
  • Variable part
    • 최대 40 바이트 (4의 배수 값)
    • 네트워크 테스팅과 디버깅에 사용
    • 2 종류 : single-byte option, multiple-byte option

Single/Multiple-byte option

  • Single-byte option
    • No operation(NOP) : 옵션사이의 채움으로 사용
      • GPT : 옵션 사이의 간격을 채우는 데 사용되며, 헤더의 정렬을 맞추기 위해 필요합니다.
    • End of Options(EOOL) : 옵션 끝에서 패딩으로 사용
      • GPT : 옵션 리스트의 끝을 나타내고, 이 옵션 다음에는 패딩만이 올 수 있습니다.
  • Multiple-byte option
    • Record route : 최대 9개까지의 경로 기록
      • Strict source route : 지정된 경로만 허용
        • GPT : 패킷이 특정 경로를 따라갈 것을 요구합니다. 지정된 경로만을 정확히 따라야 합니다.
      • Loose source route : 지정된 경로로 가고, 일부 다른경로 허용
        • GPT : 패킷이 특정 경로를 포함하여 전송될 수 있지만, 지정된 경로 외에 다른 경로를 이용할 수도 있습니다.
      • Timestamp : 라우터의 데이터그램 처리시간 기록
        • GPT : 패킷이 경유하는 라우터에서 처리 시간을 기록합니다. 라우터의 타임스탬프와 함께 주소가 기록될 수 있습니다
    • GPT : 패킷이 경유하는 라우터의 주소를 기록합니다. 최대 9개의 라우터 주소를 저장할 수 있습니다.

Security of IPv4 Datagram

  • 초기 IPv4 프로토콜에서 보안은 없었음
  • 세 가지 보안 이슈
    • packet sniffing : 내용 보기. 암호화로 방어 가능
    • Packet modification : 패킷이 중간에 변조되는 경우. data integrity mechanism으로 검출가능
    • IP spoofing : 다른 사람인것처럼 행동하거나, 다른 컴퓨터의 주소를 도용
      • Origin authentication mechanism으로 방지가능
  • IPSec (IP Secirity) : 종단간 연결형 서비스로 IP 패킷 보호
    • 알고리즘과 키 정의
    • 패킷 암호화
    • Data Integrity
    • Origin Authentication(출처 인증)