[네트워크] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다

ppmyor·2022년 9월 20일
1

CS-네트워크

목록 보기
6/11
post-thumbnail

IPv4 프로토콜

IPv4가 하는 일

  • 네트워크 상에서 데이터를 교환하기 위한 프로토콜
  • 데이터가 정확하게 전달될 것을 보장하지 않는다.(데이터가 중간에 누락되거나, 잘못되어서 깨질 수 있음) 이는, 다른 계층(4계층 등)에서 보완해줄 수 있다.
  • 중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있다.(악의적으로 이용되면 DoS 공격이 됨)
  • 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장한다.

IPv4 프로토콜의 구조

(마지막 IP Option은 붙을 수도 있고 안 붙을 수도 있는 옵션이기 때문에 토막나있음)
다른 네트워크의 특정 대상을 찾는 IPv4 프로토콜(20byte, 만약 옵션이 붙게 되면 하나씩 붙을 때 마다 +4byte, 최대 10개의 옵션이 붙을 수 있음)

  • Version: IP 프로토콜의 버전을 씀.(4가 옴, 6는 위의 프로토콜 구조 모양이 다름)
  • IHL(Header Length): 4bit -> 2진수 4개로 표현할 수 있는 최대 크기는 15
    하지만 IPv4의 최소 길이는 20byte, 최대 길이는 60byte이기 때문에 해당 공간 안에 쓰지 못함. 따라서, 4를 나눠서 표기함. (ex) 20/4 = 5(16진수) -> 0101) 옵션이 하나씩 늘어날 때 마다 1씩 증가함.(옵션이 4byte이기 때문)
  • TOS(Type of Service): 지금은 쓰이지 않기 때문에 0으로 비워짐(16진수로 0 0), 예전에 나왔을 때에는 데이터의 형식에 대한 내용, 중요도 등을 표기함.
  • Total Length: Header 뿐만 아니라 payload 까지의 길이. 즉, 전체의 길이.
  • Identification, IP Flags, Frgment Offset: 데이터가 큰 것을 보낼 때 최대 전송 범위가 있기 때문에 잘라서 보냄. 그 때, 쪼개진 것들을 알아볼 수 있도록하는 값들.
  • Identification: 쪼개진 것들이 하나였다는 것을 알아볼 수 있도록 동일한 것끼리 동일한 ID를 부여
  • IP Flags(xDM): 3bit로 이루어짐. 첫번째 bit는 미사용(0). 2번째 bit는 D(Don't Fragmentation, 패킷을 보내는 사람이 데이터를 안쪽에서 보내겠다고 명시.) M(More Fragmentation, 조각화를 해서 보낼 때 첫번째 패킷 뒤에 다른 패킷이 있음을 명시적으로 알려줌. 즉, 최대전송단위보다 크게 보낸다면 해당 bit가 1로 세팅이 된다고 볼 수 있다. 아닐 시 0으로 세팅.).
    IP Fragmentation, IP Segmentation IP 단편화, IP 조각화, IPv4 단편화, IPv6 단편화
  • Fragment Offset: 13bit로 이루어짐. 잘게 쪼갠 것을 원래대로 복구하려고 할 때 데이터의 순서를 알아볼 수 있게 Offset을 지정. 가장 처음으로부터 얼마나 떨어져있는지를 나타냄으로써 순서를 알아볼 수 있도록 함.
  • TTL(Time To Live): 패킷이 살아있을 수 있는 시간을 지정. 계층의 장비를 하나씩 넘어갈 때 마다 1씩 감소. TTL의 값이 0이 되는 순간 패킷을 폐기.(윈도우 128, 리눅스 64)
  • Protocol: Ethernet type과 동일한 부분. 상위 프로토콜이 무엇인지 알려줌.(ICMP(3계층, 01로 세팅), TCP(4계층, 06으로 세팅), UDP(4계층, 17로 세팅))
  • Header Checksum: 헤더의 오류가 있는지 없는지를 체크.(값과 해당 값을 계산한 값을 전달받은 뒤 값들을 다시 계산해서 전달받은 계산한 값과 동일한지 검사)
  • Source Address: 출발지 IP 주소(4byte)
  • Destination Address: 도착지 IP 주소(4byte)
  • IP Option

참고: IPv6의 구조

ICMP 프로토콜

ICMP가 하는 일

ICMP(Internet Control Message Protocol, 인터넷 제어 메세지 프로토콜)
네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지를 전송 받는 데 주로 쓰인다. 프로토콜 구조의 Type과 Code를 통해 오류 메시지를 전송 받는다. 대표적으로 사용하는 곳이 상대방과 통신이 되는지 안되는지 확인하기 위한 용도로 많이 쓰인다.

ICMP 프로토콜의 구조

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

  • Type: 카테고리 중 대분류, 0, 3, 8, 10, 11 ... 등 Message Type 들이 있다. 8번은 요청, 0번은 응답, 3번은 Destination Unreachable(가는 경로 상 문제), 11번은 Time exceed(상대방 쪽 문제, 방화벽 등). 해당 코드로 네트워크가 안될 때 message를 통해 왜 안되는지에 대한 이유를 알 수 있다. 5번은 ICMP redirect(원격지에 있는 상대방의 라우팅 테이블을 ICMP를 통해 수정할 때 사용)
  • Code: 카테고리 중 소분류

라우팅 테이블

내가 보낸 패킷은 어디로 가는가

netstat -r

어디로 보내야 하는지 설정되어 있는 라우팅 테이블
지도 같은 개념으로 라우팅 테이블에 적혀있는 부분만 찾아갈 수 있고, 적혀있지 않은 부분은 찾아갈 수 없음
보통 라우팅 테이블을 작성할 때 기본 값을 넣어줌.(기본 게이트웨이 ..)

다른 네트워크와 통신 과정

다른 네트워크까지 내 패킷의 이동 과정

보낼 라우팅 테이블에 해당 패킷을 받을 네트워크 대역이 있어야 전송이 가능
[따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - 라우팅 테이블 및 전송 과정

IPv4의 조각화

조각화란?

큰 IP 패킷들이 적은 MTU(Maximum Transmission Unit, 1500 byte)를 갖는 링크를 통하여 전송되려면 여러 개의 작은 패킷으로 쪼개어/조각화되어 전송되어야 한다. 만약 MTU 보다 크면(1500byte 보다 크면) 조각화되어 전송됨.
즉, 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환이 필요하다. 일단 조각화되면, 최종 목적지에 도달할 때까지 재조립되지 않는 것이 일반적이다.

  • IPv4에서는 발신지 뿐만 아니라 중간 라우터에서도 IP 조각화가 가능
  • IPv6에서는 IP 단편화가 발신지에서만 가능
  • 재조립은 항상 최종 수신지에서만 가능

MF와 Offset을 확인하면서 조각화를 진행하며, offset은 data를 8로 나누어서 진행.
이 때 IP 프로토콜에 세팅되는 ID 값은 동일하다.
(data 값을 조각화 할 때 IP header(20byte) 붙는 것 주의하기.)

큰 데이터를 전송하는 패킷이 조각화하는 과정


IPv4가 붙은 다음 MTU로 거르고, 맨 마지막에 Ethernet protocol까지 인캡슐레이션 되어서 전송되는 순서로 진행됨.
flag를 쓰는 것은 3bit인데 2진수 4자리 당 16진수 1자리이기 때문에 flag 값이 2가 세팅

참고

해당 내용은 [따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - IP 프로토콜 구조
, [따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - ICMP 프로토콜, [따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - ICMP 프로토콜, [따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - IPv4, ICMP프로토콜 실습, [따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - 라우팅 테이블 및 전송 과정,[따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - 라우팅 테이블 확인 실습, [따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - 조각화 이론,[따라學IT] 06. 멀리 있는 컴퓨터끼리는 이렇게 데이터를 주고받는다 - 조각화 실습의 강의와 개인 공부를 함께 정리 한 내용입니다.

profile
유영하는 개발자

0개의 댓글