[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/네트워크

[Network] IPv4 프로토콜 / ICMP 프로토콜

inu 2021. 4. 1. 22:28
반응형

IPv4 프로토콜

  • 네트워크 상 데이터를 교환하기 위한 프로토콜
  • 데이터가 정확하게 전달되는 것을 보장하지는 않는다. (4계층 TCP에서 보완)
  • 중복된 패킷을 전달하거나 패킷 순서를 잘못 전달할 가능성 존재 (악의적으로 이용시 Dos 공격)

IPv4 프로토콜 구조

  • Version : IP 프로토콜 버전 (4버전 표기, 6버전도 있지만 구조자체가 다르다)
  • HLEN : Header Length. '헤더길이/4'의 값이 들어간다. (일반적으로 5)
  • Type of Service : 데이터의 중요도를 나타내는 파트로 예전엔 사용했지만 현재는 사용하지 않는다. (따라서 0)
  • Total Length : 페이로드까지 합쳐진 전체 길이
  • Identification : 각각의 조각화된 데이터들이 하나의 데이터임을 의미하는 ID값
  • Flags : x, Dont Flagmentation, More Flagmentation 으로 패킷 조각화를 설정한다. (Dont Flagmentation은 강제로 패킷 조각화를 금지시키는 것이고, More Flagmentation은 패킷 조각화를 계속한다는 의미이다.)
  • Flagment Offset : 조각화된 데이터의 데이터순서를 맞춰주는 값이다. 첫 시작부분으로부터 떨어진 정도를 나타낸다.
  • TTL (Time To Live) : 패킷이 존재할 시간을 지정. 오류가 나서 특정 네트워크 대역에서 영원히 머물게되는 것을 방지한다.
  • Protocol : 상위 프로토콜이 무엇인지 알려준다. (ICMP : 1, TCP : 6, UDP: 17)
  • Header Checksum : 헤더에 오류가 있는지 확인하는 파트. (손실 방지)
  • Source IP Address : 출발지 IP주소
  • Destination IP Address : 목적지 IP주소
  • IP Option : 추가적으로 붙을 수도, 붙지 않을 수도 있는 옵션 (옵션당 4바이트 추가)

ICMP 프로토콜

  • Internet Control Message Protocol (인터넷 제어 메세지 프로토콜)
  • 네트워크 컴퓨터 위의 운영체제에게 오류 메세지를 전송받는데 주로 사용됨.
  • 프로토콜 구조의 Type과 Code가 이를 가능하게함

ICMP 프로토콜 구조

  • Type : 메세지 타입 선택 (0~30번까지 다양함. 0,8 / 3,11 / 5가 주로 쓰이는 메세지 타입이다.)
  • 0 : 메시지 응답
  • 8 : 메세지 확인 요청
  • 3 : 목적지에 도달할 수 없다 (목적지까지 아예 가질 못한 것 -> 경로상문제)
  • 11 : 요청시간이 만료되었다 (목적지까지 갔지만 응답을 받지 못한 것 -> 상대방문제, 대표적으로 방화벽)
  • 5 : 원격지에 있는 상대방의 라우팅테이블을 원격으로 수정
  • Code : 추가적인 메세지 정보 (Type이 대분류, Code가 소분류라고 생각하면 된다.)
  • Checksum : 헤더에 오류가 있는지 확인하는 파트 (손실 방지)

라우팅 테이블

  • 경로를 지도처럼 저장해놓는 것. 해당 테이블에 존재하지 않는 대역은 찾아갈 수 없다.
  • 게이트웨이를 설정해놓으면 라우팅 테이블에 존재하지 않는 것은 게이트웨이 쪽으로 넘긴다
  • netstat -r 로 라우팅 테이블 정보 확인 가능

다른 네트워크와 통신 과정

  • 다른 대역의 A와 B가 통신할때를 가정해보자.
  • A의 자신의 라우팅 테이블에 B의 네트워크 대역이 존재해야 통신이 가능하다.
  • A는 요청하는 프로토콜을 작성해서 보낸다. (ICMP : type 8 , 요청으로 작성 / IPv4 / Eth : 목적지 맥주소는 가까운 곳에서 갈 수 있는 곳까지만 작성. 즉, 게이트웨이 맥주소를 작성.)
  • cf. 만약 게이트웨이의 맥주소도 알 수 없을 경우 ARP 프로토콜을 통해 알아오게 된다.
  • 공유기는 이를 전송받아 자신의 라우팅 테이블을 확인한다. 그 후 Eth 프로토콜의 내용을 자신에게 가까운 대역에 전송되도록 바꿔서 다시 작성한다.
  • 이런 작업이 반복되다가 상대방의 게이트웨이까지 도착하고, 해당 게이트웨이도 다시 Eth 프로토콜을 다시 작성해 B로 보내주게 된다. (상대방의 게이트웨이 라우팅 테이블에는 B의 정보가 담겨있을 것이기 때문)
  • B는 응답하는 프로토콜을 작성해서 보낸다. (ICMP : type 0, 응답 / 그 외 과정은 유사)

IPv4의 조각화

  • 큰 IP패킷들이 적은 MTU(Maximum Transmission Unit, 데이터 최대 전송단위)를 갖는 링크를 통해 전송되려면 여러개의 작은 패킷으로 조각화되어야 한다.
  • 즉 목적지까지 전달하는 과정에서 각 라우터마다 전송에 적합하도록 변환하는 과정이 필요
  • 조각화된 패킷은 최종 목적지까지는 재조립되지 않는 것이 일반적임
  • IPv4에서는 중간 라우터에서도 IP 조각화가 가능하지만 IPv6에서는 발신지에서만 가능하다.

IPv4 조각화의 예

  • 각 조각화 패킷에는 IPv4 헤더의 용량(위의 경우 20byte)도 포함하여 고려되어야 한다.
  • cf. Offset은 패킷용량/8 로 표기됨.
  • 보통 MTU가 1500이기 때문에 조각화된 패킷에 이더넷 헤더 용량이 추가된 1514byte의 데이터가 많다.

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

반응형

'💻 CS > 네트워크' 카테고리의 다른 글

[Network] UDP 프로토콜  (0) 2021.04.05
[Network] 포트  (0) 2021.04.04
[Network] ARP  (0) 2021.03.17
[Network] IP주소  (0) 2021.03.13
[Network] Ethernet 프로토콜  (0) 2021.03.08