- MPTCP는 RFC 8684 기반의 TCP 확장으로, 하나의 연결이 여러 네트워크 인터페이스를 동시에 써서 대역폭·지연·장애 대응을 개선함
- 여러 경로를 병렬로 쓰는 구조라 대역폭 집계, 낮은 지연 경로 선호, 경로 장애 시 다른 경로로의 재주입이 가능함
- Linux에서는
IPPROTO_MPTCP로 소켓을 만들고 일반 TCP 연결인 subflow를 구성하며, 상대나 중간 장비가 지원하지 않으면 단일 경로 TCP로 자동 하향 전환됨 - 경로 관리는 Linux v5.19 기준 커널 내장 방식과
mptcpd같은 사용자 공간 데몬 방식이 있고, Linux v6.8 기준 패킷 스케줄러는net.mptcpsysctl로 제어되는 하나만 있음 - Linux v6.10 기준 기능은
socket()지원, TCP 하향 전환, 커널/사용자 공간 경로 관리, TCP 소켓 옵션, MIB·ss진단·tracepoint 디버그 기능까지 포함함
MPTCP가 바꾸는 TCP 연결 방식
- Multipath TCP(MPTCP) 는 표준 TCP의 확장으로, RFC 8684에 정의됨
- 하나의 MPTCP 연결은 여러 인터페이스를 동시에 사용해 TCP 패킷을 보내고 받을 수 있음
- 여러 인터페이스의 대역폭을 집계하거나 지연 시간이 가장 낮은 인터페이스를 우선할 수 있음
- 한 경로가 끊기면 트래픽을 다른 경로로 매끄럽게 재주입해 장애 전환을 수행함
- 일반 TCP가 한 번에 하나의 경로를 쓰는 것과 달리, MPTCP는 5G와 Wi‑Fi 같은 여러 경로를 subflow로 함께 사용할 수 있음
대표 사용 사례
-
끊김 없는 핸드오버
- 기존 연결을 유지한 채 한 경로에서 다른 경로로 전환할 수 있음
- Apple은 2013년부터 스마트폰에서 주로 이 이유로 Multipath TCP를 사용함
-
최적 네트워크 선택
- 지연 시간, 손실, 비용, 대역폭 같은 조건에 따라 사용 가능한 경로 중 “가장 좋은” 경로를 고름
-
네트워크 집계
- 여러 경로를 동시에 사용해 처리량을 높일 수 있음
- 고정망과 모바일 네트워크를 결합해 파일을 더 빠르게 전송하는 방식이 예시임
Linux에서 연결이 성립되는 방식
- Linux 전용
IPPROTO_MPTCP프로토콜로 새 소켓을 만들면 subflow 또는 path가 생성됨 - subflow는 하나의 인터페이스를 통해 데이터를 전송하는 일반 TCP 연결임
- 이후 호스트 간 협상을 거쳐 추가 subflow를 만들 수 있음
- 기반 TCP subflow의 TCP option 필드에는 상대 호스트가 MPTCP 사용을 감지할 수 있도록 새 필드가 추가됨
- 이 필드에는 상대에게 MPTCP 사용을 알리는
MP_CAPABLE옵션 등이 들어감
- 이 필드에는 상대에게 MPTCP 사용을 알리는
- 상대 호스트나 중간의 middlebox가 MPTCP를 지원하지 않으면 반환되는
SYN+ACK패킷의 TCP option 필드에 MPTCP 옵션이 없음- 이 경우 연결은 일반 TCP로 하향 전환되어 단일 경로로 계속됨
경로 관리자와 패킷 스케줄러
- MPTCP는 내부적으로 Path Manager와 Packet Scheduler가 subflow 생성, 주소 공지, 전송 경로 선택을 나눠 처리함
-
Path Manager
- Path Manager는 subflow의 생성부터 삭제까지 관리하고 주소 공지도 담당함
- 일반적으로 클라이언트 측이 subflow를 시작하고, 서버 측은
ADD_ADDR와REMOVE_ADDR옵션으로 추가 주소를 공지함 - Linux v5.19 기준
net.mptcp.pm_typesysctl knob으로 두 가지 path manager를 제어함- type
0: 커널 내장 방식이며 모든 연결에 같은 규칙을 적용함.ip mptcp와 관련됨 - type
1: 사용자 공간 방식이며mptcpd같은 데몬이 제어하고 연결별로 다른 규칙을 적용할 수 있음
- type
-
Packet Scheduler
- Packet Scheduler는 다음 데이터 패킷을 보낼 때 사용할 subflow를 선택함
- 사용 가능한 대역폭을 최대화하거나, 지연 시간이 더 낮은 경로만 고르거나, 설정에 따른 다른 정책을 적용할 수 있음
- Linux v6.8 기준 패킷 스케줄러는 하나만 있으며,
net.mptcp의 sysctl knob으로 제어됨
Linux v6.10 기준 기능
- Linux v6.10 기준 MPTCP는 다음 기능을 제공함
socket()시스템 호출에서IPPROTO_MPTCP프로토콜 지원- 상대나 middlebox가 MPTCP를 지원하지 않을 때 MPTCP에서 TCP로 하향 전환
- 커널 내장 또는 사용자 공간 path manager를 사용하는 경로 관리
- TCP 소켓에서 일반적으로 쓰이는 소켓 옵션
- MIB 카운터,
ss명령이 사용하는 diag 지원, tracepoint를 포함한 디버그 기능
- 자세한 변경 사항은 ChangeLog에서 확인할 수 있음
커뮤니케이션과 관련 프로젝트
- 커뮤니케이션 채널
- 메일링 리스트: mptcp@lists.linux.dev, plain text only
- Archives
- Info
- 구독은 mptcp+subscribe@lists.linux.dev로 빈 plain text 이메일을 보내고 challenge 이메일에 답장하는 방식임
- IRC: libera.chat의 #mptcp
- 온라인 Meetings
- Blog
- Fediverse
- 메일링 리스트: mptcp@lists.linux.dev, plain text only
- MPTCP 커뮤니티 구성원이 유지하는 프로젝트
- MPTCP 관련 개선이 포함된 프로젝트
- iproute2:
ip mptcp명령용 - Network Manager: v1.40부터 MPTCP 기능 포함
- Multipath TCP applications: 인기 TCP 애플리케이션의 MPTCP 업데이트를 조율하는 프로젝트
- iproute2: