MSS (Maximun Segment Size)
- MSS는 TCP 상에서 전송할 수 있는 사용자의 데이터(
payload
) 크기를 말한다. - MSS는 TCP 헤더를 제외한 데이터의 크기이다.
- MSS는 TCP(L4) 계층에서 데이터의 크기를 말한다.
- 위의 사진을 보면, TCP 헤더를 제외한 데이터 부분을 MSS라고 말한다.
MTU (Maximun Transmission Unit)
- MTU는 네트워크에서 전송 될 수 있는 최대 패킷의 크기를 말한다.
- MTU는 IP(L3) 계층에서 패킷이라고도 불리운다.
- MTU에서 IP 헤더와 TCP 헤더를 제외하면 그것이 바로 MSS가 된다.
- MTU를 패킷이라고 부른다.
- 참고로 L2는 프레임이라는 용어로 부른다.
설정된 MTU 크기를 확인하는 방법
ip link
라는 명령어를 치면 현재 리눅스 환경에서 설정된 MTU 값을 확인할 수 있다.- MTU 값이 1500 BYTES 으로 잡혀 있는 것을 확인할 수 있다.
패킷을 보내고 이를 트레이싱 해보자
-
패킷을 보내기 위해서
ping
이라는 도구를 통해서 구글 DNS 서버 (8.8.8.8)에 요청을 보내보자. -
ping -M do -s 68 8.8.8.8
이 명령어는 서버에 68 바이트를 보내는 것이다.
-
사진을 보면 데이터는 68바이트를 보냈지만 실제로는 96 바이트가 전송된 것을 확인할 수 있다. 이유는 데이터에 헤더 부분이 포함되었기 때문이다.
-
추가로
ping -M do -s 1500 8.8.8.8
명령어로 패킷의 최대 크기인 1500 MTU 만큼 데이터를 전송해본다.
-
에러가 발생하는 것을 확인해볼 수 있는데, 그 이유는 헤더가 포함되었기 때문이다. 하지만 이 에러는 커널 레벨에서 발생한 것은 아니고
ping
도구에서 발생시킨 것이다. -
이를 확인해보기 위해서,
ping
보다 많은 기능을 지원하는hping3
도구를 이용해서 테스트 해보겠다.
sudo tshark -i enp0s3 -f icmp -Y "ip.dst == 8.8.8.8 or ip.src == 8.8.8.8"
- 위의 명령어를 이용해서 패킷을 캡처하고 아래 명령어를 다른 터미널에서 입력을 해본다.
sudo hping3 -d 2000 --icmp 8.8.8.8
-
위와 같은 결과를 확인해 볼 수 있다. 자세히 살펴보면, 패킷이 정상적으로 전송이 된 것을 확인해볼 수 있지만 서버로 부터 응답이 오지 않는 것을 확인할 수 있다. 이로서 구글 도메인 서버에 요청할 수 있는 최대 패킷 크기는 1500 bytes 라는 것을 확인할 수 있었다.
-
그리고 2000 바이트를 데이터로 전송을 하였는데 MTU는 최대 1500 바이트이다. 따라서 패킷이 쪼개져서 전송되고 있다는 것을 확인할 수 있다.
참고 문헌
>> Home