본문 바로가기

Computer Science/네트워크

06. 멀리 있는 컴퓨터 간의 통신 - IP 프로토콜 구조

IPv4 프로토콜

IPv4가 하는 일

  • 네트워크 상에서 데이터를 교환하기 위한 프로토콜
  • 데이터가 정확하게 전달될 것을 보장하지 않는다
  • 중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있다 (악의적으로 이용하면 DoS 공격)
  • 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장

다른 네트워크의 특정 대상을 찾는 IPv4 프로토콜

  • 보통 IP Option은 거의 사용하지 않고 20 Bytes 사용
  • Header는 20 ~ 60bits인데 주어진 건 4칸? (4bit - 최대로 표현할 수 있는 수 15) => Header / 4  수를 씀
    일반적으로 5 사용
  • TOS는 현재 사용하지 않음 => 0
  • Total Length: Header + Payload의 길이
  • Identification와 IP Flags, Fragment Offset은 하나의 셋트라고 생각 
    • Identification: 잘게 잘라서 온 데이터를 알아볼 수 있도록 하는 ID
    • Flag Flags: 3bit로 이루어져 있음
      • x: 사용하지 않음
      • D: 데이터를 조각내지 않고 통으로 보낼 때 설정 (최대 전송단위보다 클 경우 데이터 전송 안됨)
      • M: 조각화가 되어있을 경우, 최대 전송단위보다 더 커서 뒤에 데이터가 있을 경우 1로 설정됨
    • Fragment Offset: 데이터 시작 부분부터 떨어진 순서 (조각난 데이터의 순서) / 8 되어 있음
  • TTL: 패킷이 살아있는 시간 (3계층 Router를 지날 때마다 1씩 차감됨)
    • 운영체제마다 다르게 설정됨, 이걸로 상대방 컴퓨터 운영체제를 유추할 수 있음
      • windows 128
      • linus 64
  • Protocol: 상위 프로토콜이 뭔지 알려줌
    • ICMP (3계층): 01
    • TCP (4계층): 06
    • UDP (4계층) 11 (십진수로 17)
  • Header Checksum: 앞 부분을 검증하는 용도


 

ICMP 프로토콜

ICMP가 하는 일

  • Internet Control Message Protocol  인터넷 제어 메세지 프로토콜
  • 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메세지를 전송 받는데 주로 사용
  • 프로토콜 구조의  Type과 Code를 통해 오류 메세지를 전송 받음

특정 대상과 내가 통신이 잘되는지 확인하는 ICMP 프로토콜

  • Type: 카테고리
    • 기본
      • 0: Echo Reply (응답)
      • 8: Echo (요청)
    • 뭔가 잘못됐을 때
      • 3: Destination Unreachable (목적지까지 가지를 못함 ex 상대방 방화벽)
      • 11: Time Exceded (목적지까지는 갔는데, 응답 x)
    • 보안
      • 5: Redirect
  • Code: Type에서 분류한 것의 소분류


실습

wireshark

ICMP 확인

IPv4 확인


라우팅 테이블

어디로 보내야 하는지 설정되어 있는 라우팅 테이블

다른 네트워크 대역을 찾아가기 위한 지도

 


다른 네트워크와 통신 과정

내 컴퓨터에서 보낸 패킷이 다른 네트워크의 컴퓨터까지 이동 과정

요청 과정

요청을 받은 B는 역과정으로  A에게 응답을 보냄

 


실습

cmd에서 아래 커맨드 입력

netstat -r

 


IPv4의 조각화

조각화란?

  • 큰 IP 패킷들이 적은 Maximum Transmission Unit(MTU)(보통 1500 byte)를 갖는 링크를 통하여 전송되려면 여러개의 작은 패킷으로 쪼개어(조각화)되어 전송돼야 함
  • 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환 필요
  • 일단 조각화 되면, 최종 목적지에 도달할 때까지 재조립되지 않는 것이 일반적
  • IPv4에서는 발신지 뿐만 아니라 중간 라우터에서도 IP 조각화가 가능
  • IPv6에서는 IP단편화가 발신지에서만 가능
  • 재조립은 항상 최종 수신지에서만 가능

여러 개의 패킷으로 조각화된 패킷

실제로는 보통 한 번만 조각화됨


실습

예시 문제

  • 보내려는 데이터 크기: 2379
  • MTU: 980
  • 몇개의 패킷으로 쪼개지는가?
  • 첫번째 패킷의 데이터 크기는 몇인가?
  • 마지막 패킷의 데이터의 크기는 몇인가?

예시 풀이

  • 헤더를 제외한 페이로드의 최대 크기: 980 – 20 = 960
  • 필요한 패킷의 수 = 2379 / 960 = 2/48 => 3개의 패킷 필요
  • 첫 번째 패킷의 데이터 크기: 헤더를 제외한 960 + 헤더 20 = 980
  • 마지막 패킷의 데이터 크기 = 남은 데이터 2379 - 960 - 960 = 459 + 헤더 20 => 479

참고자료

https://www.youtube.com/watch?v=_i8O_o2ozlE&list=PL0d8NnikouEWcF1jJueLdjRIC4HsUlULi&index=9

위 강의를 보고 정리한 글입니다.