-
[Network] 전달한 패킷이 네트워크 장치가 수용할 수 있는 크기보다 크다면? (MTU, MSS, PMTUD)Network Basis 2025. 1. 18. 20:23
들어가기전에
OSI 7 Layer 의 2계층인 Data Link Layer 에서는 Ethernet 프로토콜을 사용한다.
네트워크 장치들이 모두 OSI 7계층 모델을 사용하는 것은 아니지만, 네트워크 통신을 수행하는 장치들은 OSI 모델의 계층 중 일부를 사용하거나 참고한다.
LAN(Local Area Network)을 구성하기 위해 네트워크 카드(NIC), 스위치, 라우터, 허브, 액세스 포인트 등과 같은 네트워크 장치가 사용되는데, 이러한 네트워크 장치를 통하여 데이터가 전달된다.
우리는 전송할 데이터를 쪼개어 전송하게 되는데 쪼개어진 데이터를 *패킷이라고 칭하며, 일반적으로 패킷의 크기가 클수록 대역폭(Bandwidth)을 효과적으로 사용할 수 있다.
난 효율적인게 좋아!
우리집 인터넷은 1Gbps 라구!
굳이 데이터를 잘라서 보내서 오버헤드를 만들지 말고 한방에 보내버리면 완전 빠르겠구만!
컴퓨터에서 내보낸 패킷은 1GB지만, 다른 노드까지 향하는 길목에는 여러 네트워크 장치들이 있다.
해당 네트워크 장치들이 어느정도 크기의 데이터를 한번에 받을 수 있는지도 중요하다.
* 보통 대부분의 네트워크 장치들은 1500 바이트를 받을 수 있도록 만들어져 있다.
네트워크 장치가 데이터 링크 계층(OSI 2계층)에서 허용하는 최대 페이로드 크기를 *MTU 라고 하며, 네트워크 경로 상에 있는 아무 장치나 MTU 보다 패킷이 크면 그 패킷은 분할될 수도 있다.
IPv6 은 분할을 허용하지 않으며, IPv4 는 헤더의 플래그 값에 따라 분할여부가 결정된다.
어쩔 수 없네.. 1500바이트로 보내야겠다.
직접 1500 바이트로 데이터를 보내게되면 패킷이 도달하지 못하는 것을 확인할 수 있다.
이유는 필자가 사용한 bash 는 사용자를 위한 Application 이며, 때문에 ping 의 -s 옵션인 데이터의 크기는 보통 유저입장에서는 헤더를 포함하지 않은 순수한 payload 의 데이터 크기로 인식되기 때문이다.
이를 설명하기 위한 개념이 MTU(Maximum Transmission Unit) 와 MSS(Maximum Segment Size) 이다.
MTU 와 PDU
누군가는 MTU 를 네트워크 계층 트랜잭션 에서 통신할 수 있는 가장 큰 프로토콜 데이터 단위 (PDU)의 크기라고 정의하기도 한다. (나무위키 참조)
사실 앞서 설명한 MTU 의 정의인 데이터 링크 계층(OSI 2계층)에서 허용하는 최대 페이로드 크기가 시초의 정의라고 필자는 생각하지만, 중요한건 증명이 아니라 PDU 가 무엇을 설명하고 싶어서 나온 용어인가이다.
헤더나 부가정보를 제외한 순수 데이터의 크기를 측정하고 공유하고 싶기에 해당 용어가 생겨났다고 본다.
앞서 OSI 7 Layer 의 2계층인 Data Link Layer 에서는 Ethernet 프로토콜을 사용한다고 설명하였다.
또한, 3계층인 Network Layer 에서는 IP 프로토콜을 사용한다.
MTU 와 MSS
위 이미지는 Ethernet 프로토콜의 PDU 인 프레임의 구성을 보여주고 있으며 검색을 하면 흔하게 접할 수 있는 이미지이다.
MTU 는 참조정보(헤더,FCS)가 아닌 순수 데이터를 측정하기 위해 태어난 단위라고 앞서 설명하였다.
그래서 Ethernet MTU 는 Ethernet 프로토콜의 참조정보를 제외한 크기를 나타내지만, IP MTU 는 이상하게도 IP 헤더를 포함한 크기로 측정한다.
MTU 의 정의가 데이터 링크 계층(OSI 2계층)에서 허용하는 최대 페이로드 크기가 정의의 시초였다고 생각하는 이유가 바로 IP MTU 때문이다.
MSS(Maximum Segment Size)는 용어에서 보이듯 세그먼트를 사용하는 4계층의 PDU의 관한 용어이다.
Maximum Segment Size 라는 영문을 보면 알 수 있듯이 MTU 와 같은 뜻을 담고 있지만 계층을 구분하고 싶어 생겨난 단어라는 것을 짐작할 수 있다.
즉, MSS 의 정의는 Transport 계층(OSI 4계층)에서 허용하는 최대 페이로드 크기이다.
때문에 Ethernet MTU 와 동일하게 4계층까지의 부가정보(헤더 등)를 제외한 데이터의 크기를 나타낸다.
그래서 사용자가 사용하는 Application 에서는 MTU 가 1500 인 서버에 데이터를 보내고 싶다면, 헤더 값을 고려하여 1500 보다 작게 보내야 한다.
참고로 ping의 경우 IP 헤더(20바이트) + ICMP 헤더(8바이트)로 요청을 보내는 것이기 때문에 MSS는 1472 까지 가능하다.
데이터를 보낼 때 항상 실험을 해야된다면 너무 비효율적인 것 같은데.. 🤢
그렇다. 내 주변 LAN 의 구성이야 사용자가 노력해서 알 수 있다고 하지만, 데이터를 보낼 서버의 LAN 은 사용자가 어떻게 매번 조사를 하겠는가. 애초에 도착지점까지의 모든 장치의 MTU 를 미리 알 수 있다하더라도, 유지보수 이후 MTU 가 변경된다면 무슨소용인가.
이를 해결하기 위한 기술이 PMTUD(Path MTU Discovery) 이며 경로 MTU를 동적으로 탐색하여 데이터를 분할하지 않고 최적 크기의 패킷으로 전송되도록 조정하는 역할을 수행한다.
하지만 대충 봐도 알 수 있듯이 초기 MTU 탐색 과정에 비용이 발생하고, 경로상에 있는 네트워크 장치들은 응답값에 ICMP 메시지를 작성하고 그 안에 MTU 를 넣어 반환하게 되는데 보안상의 이유로 ICMP 메시지를 차단하는 네트워크가 있을 수도 있다.
이에 대해 자세히 설명하게 되면 포스팅이 길어지기에 여기에서 마친다.
패킷의 크기에 대하여
오해가 있을까봐 첨언합니다.
패킷의 크기가 크면 당연히 slice 과정과 merge 과정의 오버헤드는 물론 헤더의 중복에 대한 오버헤드도 줄일 수 있다는 장점등이 있다.
반대로 작다면 손실된 패킷에 대한 재전송에 대한 부담이 적어진다는 점과 혼잡한 네트워크 속에서 대역폭을 나눠쓰기 때문에 네트워크 혼잡을 완화할 수 있다는 장점등이 있다.
패킷이 커요! 패킷이 작아요! 장점 1. 헤더 오버헤드 감소
2. CPU 부하 감소
3. 전송 속도 감소1. 패킷 손실 시 재전송 부담 감소
2. 네트워크 혼잡 완화
3. 네트워크 경로상의 Fragmentation 방지
4. 지연 시간 감소
5. 오류 확산 방지
6. 일부 프로토콜에서 헤더 압축 효율성 증가적합한 환경 고속 데이터 전송과 효율성이 중요한 곳
ex) 데이터 센터 네트워크, 고속 전송 네트워크, 클라우드 및 파일 서비스, VPN/터널링 환경호환성 문제, 네트워크 안정성 및 경로 MTU 탐색비용 감소
ex) 인터넷 연결이 불안정한 지역, 무선 네트워크, 실시간 애플리케이션, 혼잡한 네트워크, VPN/터널링 환경
MTU (Maximum Transmission Unit)
- 정의:
네트워크에서 데이터 링크 계층(OSI 2계층)에서 허용하는 최대 페이로드 크기
MSS (Maximum Segment Size)
- 정의:
네트워크에서 전송 계층(OSI 4계층)에서 허용하는 최대 페이로드 크기
728x90'Network Basis' 카테고리의 다른 글
[Network] 노드와 네트워크 장치, 링크와 회선 (0) 2025.01.17 [Network] CSR, SSR 개념 및 장단점 비교 (1) 2023.04.08 [Network] HTTP GET 요청의 QueryParameter 를 List 로 보내기 (0) 2023.03.12 [Network] DNS 동작원리 간단정리 (+ nslookup) (0) 2023.03.12 [CORS] Origin 헤더는 언제 추가될까? (feat. 흔히 저지르는 실수들) (0) 2022.12.19 - 정의: