LabHub

네트워크 기초 — 리눅스 VM 에서 손으로 · TCP·UDP·ICMP · 실습

ping 이 실제로 보내는 것과 MTU

LabHub 에서 이어서 보기

이 실습은 VM 에서 돕니다

네임스페이스 둘(pa·pb)을 veth 로 잇고 그 위에서 ICMP 와 UDP 를 봅니다.
2번째 실습과 같은 모양이지만 이번엔 프레임이 아니라 패킷 크기와 오류 메시지가 주인공입니다.

목표

ping 이 보내는 ICMP echo 를 잡고, MTU 를 넘는 패킷이 조각나거나 거부되는
것을 보고, UDP 가 닫힌 포트를 어떻게 알려 주는지(ICMP port unreachable) 확인합니다.

왜 중요한가

"ping 은 되는데 큰 파일만 멈춘다", "SSH 는 되는데 웹 페이지가 반쯤 뜨다 만다" —
거의 언제나 MTU 입니다. 작은 패킷은 통과하고 큰 패킷만 어딘가에서 버려지는데,
DF 비트 때문에 조각도 못 내고, 그 사실을 알려 줄 ICMP 는 방화벽이 막고 있는
것이 흔한 사고 형태입니다. VPN·오버레이 네트워크·터널이 헤더를 덧붙일 때마다
이 문제가 되살아나므로, 1500 과 1472 가 어디서 오는 숫자인지 손으로 세어 봅니다.

단계

1. 네임스페이스 pa·pb 와 veth pa0pb0 를 만들어 10.60.0.1/24·10.60.0.2/24 를 붙이고 서로 ping 이 되게 하세요.
2. pa 에서 pbping -c 3 한 결과를 /root/icmp/ping.txt 에 저장하세요.
3. pa0 에서 ICMP 를 캡처하며 ping 한 번을 보내, echo request 와 echo reply 가 담긴 출력을 /root/icmp/echo.txt 에 저장하세요.
4. ping -M do 로 조각을 금지한 채 크기를 바꿔 가며 통과하는 최대 페이로드를 찾아 /root/icmp/mtu.txtmtu=·max_payload= 두 줄과 실패 메시지를 저장하세요.
5. 조각을 허용한 채 페이로드 3000 바이트 ping 을 캡처해 조각난 패킷이 보이는 출력을 /root/icmp/frag.txt 에 저장하세요.
6. pb 에 UDP 9001 을 듣는 nc -lu 를 띄우고(받은 것은 /root/icmp/udp.txt 로) pa 에서 hello-udp 를 보내세요.
7. pa 에서 pb 의 닫힌 UDP 포트 9999 로 데이터그램을 보내며 캡처해, udp port 9999 unreachable 이 보이는 출력을 /root/icmp/unreach.txt 에 저장하세요.
8. pa0 의 MTU 를 1400 으로 낮추고 /root/icmp/report.mdmtu=1400·max_payload= 두 줄과 함께 그 수가 왜 그렇게 나오는지, 그리고 조각화가 왜 문제가 되는지를 적으세요.

참고

단계 8개

  1. 두 대를 잇는다
  2. ping 세 번
  3. echo 를 잡는다
  4. 조각 금지
  5. 조각내기
  6. UDP 는 핸드셰이크가 없다
  7. 닫힌 UDP 포트는 ICMP 로 답한다
  8. MTU 를 낮추고 정리