Red Hat Training
A Red Hat training course is available for RHEL 8
34.5. MPTCP 하위 흐름 모니터링
다중 경로 TCP(MPTCP) 소켓의 라이프사이클은 복잡할 수 있습니다. 기본 MPTCP 소켓이 생성되어 MPTCP 경로가 검증되고 하나 이상의 하위 흐름이 생성되고 결국 제거됩니다. 마지막으로 MPTCP 소켓이 종료됩니다.
MPTCP 프로토콜을 사용하면 iproute
패키지에서 제공하는 ip
유틸리티를 사용하여 소켓 및 하위 흐름 생성 및 삭제와 관련된 MPTCP 관련 이벤트를 모니터링할 수 있습니다. 이 유틸리티는 netlink
인터페이스를 사용하여 MPTCP 이벤트를 모니터링합니다.
이 절차에서는 MPTCP 이벤트를 모니터링하는 방법을 설명합니다. 이를 위해 MPTCP 서버 애플리케이션을 시뮬레이션하고 클라이언트가 이 서비스에 연결됩니다. 이 예제의 관련 클라이언트는 다음 인터페이스 및 IP 주소를 사용합니다.
-
서버:
192.0.2.1
-
클라이언트(Ethernet 연결):
192.0.2.2
-
클라이언트(WiFi 연결):
192.0.2.3
이 예제를 단순화하기 위해 모든 인터페이스가 동일한 서브넷에 있습니다. 이는 요구 사항이 아닙니다. 그러나 라우팅이 올바르게 구성되어 있고 클라이언트가 두 인터페이스를 통해 서버에 연결할 수 있는 것이 중요합니다.
사전 요구 사항
- 두 개의 네트워크 인터페이스가 있는 RHEL 클라이언트(예: 이더넷 및ECDHE 포함)
- 클라이언트는 두 인터페이스를 통해 서버에 연결할 수 있습니다.
- RHEL 서버
- 클라이언트와 서버 둘 다 RHEL 8.6 이상을 실행합니다.
절차
클라이언트와 서버 모두에서 연결별 하위 흐름 제한을
1
로 설정합니다.# ip mptcp limits set add_addr_accepted 0 subflows 1
서버에서 MPTCP 서버 애플리케이션을 시뮬레이션하려면 TCP 소켓 대신 적용된 MPTCP 소켓을 사용하여
netcat
(nc
)을 수신 모드에서 시작합니다.# nc -l -k -p 12345
-k
옵션을 사용하면 처음 허용된 연결 후nc
가 리스너를 닫히지 않습니다. 이는 하위 흐름의 모니터링을 보여주는 데 필요합니다.클라이언트에서 다음을 수행합니다.
가장 낮은 메트릭으로 인터페이스를 식별합니다.
# ip -4 route 192.0.2.0/24 dev enp1s0 proto kernel scope link src 192.0.2.2 metric 100 192.0.2.0/24 dev wlp1s0 proto kernel scope link src 192.0.2.3 metric 600
enp1s0
인터페이스에는wlp1s0
보다 낮은 메트릭이 있습니다. 따라서 RHEL은 기본적으로enp1s0
을 사용합니다.첫 번째 터미널에서 모니터링을 시작합니다.
# ip mptcp monitor
두 번째 터미널에서 서버에 대한 MPTCP 연결을 시작합니다.
# nc 192.0.2.1 12345
RHEL은
enp1s0
인터페이스와 관련 IP 주소를 이 연결의 소스로 사용합니다.모니터링 터미널에서
ip CloudEventtcp 모니터
명령이 로그됩니다.[ CREATED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345
토큰은 MPTCP 소켓을 고유 ID로 식별하고 나중에 동일한 소켓에서 MPTCP 이벤트를 연관시킬 수 있습니다.
서버에 대한
nc
연결이 실행 중인 터미널에서 Enter 를 누릅니다. 이 첫 번째 데이터 패킷은 연결을 완전히 설정합니다. 데이터가 전송되지 않은 한 연결이 설정되지 않습니다.모니터링 터미널에서
ipECDHEtcp는 이제 로그를 모니터링합니다
.[ ESTABLISHED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345
선택 사항: 서버의 포트 4.6.145
에
대한 연결을 표시합니다.# ss -taunp | grep ":12345" tcp ESTAB 0 0 192.0.2.2:36444 192.0.2.1:12345
이 시점에는 서버에 대한 하나의 연결만 설정되었습니다.
세 번째 터미널에서 다른 끝점을 생성합니다.
# ip mptcp endpoint add dev wlp1s0 192.0.2.3 subflow
이 명령은 이 명령에서 클라이언트의 IRQ 인터페이스의 이름 및 IP 주소를 설정합니다.
모니터링 터미널에서
ipECDHEtcp는 이제 로그를 모니터링합니다
.[SF_ESTABLISHED] token=63c070d2 remid=0 locid=2 saddr4=192.0.2.3 daddr4=192.0.2.1 sport=53345 dport=12345 backup=0 ifindex=3
locid
필드에는 새 하위 흐름의 로컬 주소 ID가 표시되고 연결이 NAT(네트워크 주소 변환)를 사용하는 경우에도 이 하위 흐름을 식별합니다.saddr4
필드는ipECDHEtcp 엔드포인트 add 명령의 끝점의
IP 주소와 일치합니다.선택 사항: 서버의 포트 4.6.145
에
대한 연결을 표시합니다.# ss -taunp | grep ":12345" tcp ESTAB 0 0 192.0.2.2:36444 192.0.2.1:12345 tcp ESTAB 0 0 192.0.2.3%wlp1s0:53345 192.0.2.1:12345
이제 명령은 다음 두 개의 연결을 표시합니다.
-
소스 주소
192.0.2.2
와의 연결은 이전에 설정한 첫 번째 MPTCP 하위 흐름에 해당합니다. -
소스 주소
192.0.2.3
이 있는wlp1s0
인터페이스를 통한 하위 흐름에서의 연결입니다.
-
소스 주소
세 번째 터미널에서 끝점을 삭제합니다.
# ip mptcp endpoint delete id 2
ipECDHE
tcp 모니터 출력의
엔드포인트locid
필드에서 ID를 사용하거나 ipECDHEtcpshow 명령을 사용하여 끝점
ID를 검색합니다.모니터링 터미널에서
ipECDHEtcp는 이제 로그를 모니터링합니다
.[ SF_CLOSED] token=63c070d2 remid=0 locid=2 saddr4=192.0.2.3 daddr4=192.0.2.1 sport=53345 dport=12345 backup=0 ifindex=3
nc
클라이언트가 있는 첫 번째 터미널에서 Ctrl+C 눌러 세션을 종료합니다.모니터링 터미널에서
ipECDHEtcp는 이제 로그를 모니터링합니다
.[ CLOSED] token=63c070d2
추가 리소스
-
ip-mptcp(1)
man page - NetworkManager에서 여러 기본 게이트웨이를 관리하는 방법