[네트워크] MTU, MSS, PMTUD

DEV_HOYA·2023년 10월 30일
0

CS

목록 보기
26/55
post-thumbnail

📌 MTU(Maximum Transmission Unit)

  • 패킷으로 쪼개질때 MTU를 기반으로 쪼개짐
  • 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터패킷의 크기
  • 이 크기를 기준으로 데이터는 쪼개져서 패킷화됨
  • 네트워크 경로 상에 있는 장치의 MTU보다 패킷이 크면 그 패킷은 분할 될 수 있음(단편화)

⭐ 패킷이 분할되지 않는 경우

  • 패킷을 분할할 수 없어 네트워크 경로 상에 있는 어떠한 라우터나 장치의 MTU를 초과할 때 분할해서 전달하는 것이 아닌 전달을 아예 하지 않을 수 있다
  • IPv6 : 분할 허용 X
  • IPv4 : flags라는 필드의 bit가 1이 되면 분할 불가능

⭐ 분할과정

  1. IP 패킷의 크기를 다음 라우터의 MTU와 비교
  2. 다음 라우터의 MTU보다 크면 페이로드를 두개 이상의 패킷으로 분할 후 각각 헤더를 붙여줌
  3. 이때 패킷에 순서를 정하게 됨

📌 MSS(Maximum Segment Size)

  • TCP 세그먼트의 크기
  • MTU는 IP헤더와 TCP헤더의 크기까지 합치지만, MSS는 데이터의 크기(payload)만을 가리킨다.
  • 일반적으로 MTU는 1500바이트, MSS는 1460바이트이다. 따라서, 데이터를 보낼때 1460바이트 이하의 크기로 보내야 전달이 가능하다.(TCP의 경우임, 아래 예제는 ICMP여서 값이 다름)

⭐ MTU 확인

ping www.google -f -l 1500

ping www.google -f -l 1472

  • DF는 "Don't Fragment"를 의미
  • ping은 IP헤더(20바이트) + ICMP헤더(8바이트)로 요청을 보내는 것이기 때문에 1500 - 28 = 1472바이트 데이터는 올바르게 송수신 가능
netsh interface ipv4 show interfaces


📌 PMTUD(Path MTU Discovery)

  • 수신자와 송신자의 경로 상에서 장치가 패킷을 누락한 경우 테스트 패킷의 크기를 낮추면서 MTU에 맞게끔 반복해서 보내는 과정
  • IPv4와 IPv6 사용에 따라 작동 방식이 다름

⭐ IPv4

  1. IPv4는 분할을 허용하므로, PMTUD에서는 Don't Fragment 플래그를 켠 시험 패킷을 경로에 보냄
  2. 이후 패킷이 누락되면 ICMP 메세지와 MTU를 같이 돌려 보내고, 소스 장치는 MTU를 낮추고 다른 시험 패킷을 보냄
  3. 패킷이 누락되지 않고 전체 네트워크를 통과할 수 있을때까지 반복

⭐ IPv6

  1. IPv6는 Don't Fragment옵션이 없으므로 해당 플래그를 사용하지 않음
  2. 시험 패킷을 전송, 누락되면 ICMP 메세지를 전송
  3. 이 후 전체 네트워크를 통과할 때 까지 MTU를 줄이는 과정을 반복

0개의 댓글