네트워크 (6) | 3계층 프로토콜(IP, ICMP)

Jihun Kim·2021년 10월 20일
0

네트워크

목록 보기
6/13
post-thumbnail

IPv4

다른 LAN 대역과 통신할 때 IPv4를 이용한다.


IPv4가 하는 일

  • 다른 네트워크와 데이터를 교환하기 위한 프로토콜
  • 하지만, 데이터가 정확하게 전달되는 것을 보장하지는 않는다.
    👉 즉, 데이터가 누락될 수 있어서 4계층에서 이를 보정해 준다.(신뢰성 있는 통신은 4계층(TCP))
    👉 단순히 멀리 있는 곳에 보낼 뿐이다.

IPv4 구조

  • 총 20바이트로 이루어져 있으며 IP Option이 붙을 수도 있고 아닐 수도 있다.
    👉 만약 붙으면 4바이트씩 붙으며 최대 10개의 옵션이 붙을 수 있어서 만약 붙으면 IPv4는 최대 60바이트까지 가능하다.(IPv4: 20~60바이트)
    👉 일반적으로는 옵션 없이 사용된다.
  1. 버전: IP 프로토콜의 버전(1바이트)
    👉 4와 6이 가능한데 4가 온다고 생각하면 된다.(IPv6는 모양이 다르기 때문에 IPv4만 가능하다고 보면 된다.)
  2. Header Length(1바이트): 4bit이므로 최대 15까지 가능하다. 실제로 사용헤더의 길이는 20~60까지 가능하기 때문에 여기에는 '나누기 4'를 해서 저장하게 된다.
    👉 즉, 20/4 = 5 ~ 60/4 = 15
    👉 따라서, 일반적으로는 5가 온다고 생각하면 된다.
  3. TOS(Type of Service): 예전에 쓰였으나 현재는 쓰이지 않아 0으로 비워둔다.
  4. Total Length: 헤더의 길이 + 페이로드의 길이
    👉 상위 계층에서부터 encapsulation 되어 내려온 데이터의 길이와 합친 전체의 길이를 뜻한다.
  5. Identification + IP Flags + Fragment Offset:
    👉 데이터가 큰 것을 보낼 때 최대 전송 단위가 있기 때문에 잘게 잘라서 보내는데, 이 때 사용되는 값들이다. 즉, 쪼개진 값들을 알아볼 수 있게 하는 것들이다.
  • Identification: 쪼개져서 온 데이터를 받는 쪽에서는 쪼개서 온 데이터를 합쳐야 하는데 그러려면 쪼개져 전달되어 온 패킷들이 원래는 하나였다는 것을 알아볼 수 있어야 한다. 따라서 각 패킷에 id를 똑같이 준다. 그러면 같은 id를 가진 것들만 다시 합칠 때 사용하게 되는 것이다. 이것이 바로 identification!
  • IP Flags: 3비트(x D M)로 이루어져 있으며 첫 번째 것(x)은 안쓰고 두 번째 것(D)은 'Don't fragmentation'을 의미하며 세 번 째 것(M)은 'More fragmentation'을 의미한다.
    👉 D: 데이터를 보내는 사람이 데이터를 '쪼개서 보내지 않겠다'고 명시하는 것인데, 이렇게 지정하면 전송이 안된다... 따라서 거의 쓰지 않는다.
    👉 M: 조각화 하여 보낼 때 첫 번째 패킷 뒤에 나 말고 다른 패킷이 더 있다고 상대방에게 알려주는 역할을 한다. 따라서, 최대 전송 단위 1500보다 큰 데이터가 전송되면 무조건 M이 1로 세팅된다.(조각화가 안됐으면 0)
  1. Fragment Offset: 잘게 쪼갠 데이터를 복구하려면 데이터의 순서가 있는데, 전송은 1->2->3 순서대로 하더라도 받는 쪽에서는 다른 데이터도 받으니 순서가 꼬일 수 있다. 따라서 순서를 알아볼 수 있게 Offset을 지정한다. 이는 어느 기준으로부터 얼만큼 떨어져 있는 지를 의미한다. 즉, '시작부분'으로부터 얼만큼 떨어져 있는 지를 의미한다. 그러면 받는 쪽에서는 offset 값을 확인해 원래대로 데이터를 만들 수 있게 된다.
  2. Time To Live(TTL): 패킷이 살아있을 수 있는 시간
    👉 패킷의 이동 경로가 잘못 되어 데이터가 잘 전달되지 않을 수 있다. 그러면 패킷이 사라져야 한다.
    👉 3계층 장비(라우터)를 하나 넘어갈 때마다 1씩 줄어들게 된다.
    👉 0이 되는 순간 네트워크 장비는 해당 패킷을 다른 사람에게 전달하지 않고 버린다.
    👉 운영체제마다 설정하는 값이 다르다.(윈도우는 128, 리눅스는 64)
  3. 프로토콜: 상위 프로토콜이 뭔지 알려준다. IP 프로토콜 입장에서 상위 프로토콜로 올 수 있는 것에는 ICMP(3계층-> 01로 세팅됨(10진수는 1)), TCP(4계층->06으로 세팅됨(10진수는 6)), UDP(4계층->11로 세팅됨(10진수는 17))
  4. Header Checksum: 헤더에 오류가 있는지 없는지 확인하는 값
    👉 헤더의 여러 필드들을 이용해 값을 계산한 뒤 Header Checksum에 넣어서 패킷을 보내는데, 받는 쪽에서는 본인이 계산한 것과 Header Checksum의 값이 일치하는 지를 비교해 본다.
  5. 출발지 IP 주소(source): 4바이트
  6. 목적지 IP 주소(Destination): 4바이트

ICMP

Internet Control Message Protocol(인터넷 제어 메시지 프로토콜)
상대방과 통신이 되는지 확인하기 위해 사용함
👉 오류 메시지를 전송 받는 데 주로 사용됨

ICMP 프로토콜 구조

  • 8byte로 이루어짐
  1. Type: 카테고리
  • 0, 8: 8번이 요청이고 0번이 응답
    👉 통신확인 요청할 때 8번, 이에 응답할 때 상대방이 0번으로 보내줌
  • 3, 11: 3번은 'Destinatioin Unreachable" 11번은 "Time exceeded"(요청 시간 만료)
    👉 3번은 가는 경로상의 문제가 있는 것(라우터 경로 설정이 잘못 되었을 때)
    👉 11번은 목적지까지 갔으나 응답을 못하는 것(상대방 방화벽이 켜져있을 때)
  • 5: 원격지에 있는 상대방의 라우팅 테이블을 ICMP로 수정할 때 사용(옛날에 사용하던 것)
    👉 남의 것을 수정할 수 있기 때문에 보안상 문제가 생겨서 요새는 잘 사용되지 않음
  1. Code: 해당 카테고리의 소분류
  2. Checksum: IPv4에서와 동일하게 헤더에 오류가 있는지 확인하기 위해 사용된다.
profile
쿄쿄

0개의 댓글