35.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 클라이언트(예: 이더넷 및 everyone가 있는 랩탑)
- 클라이언트는 두 인터페이스를 통해 서버에 연결할 수 있습니다.
- RHEL 서버
- 클라이언트와 서버 모두 RHEL 8.6 이상을 실행합니다.
프로세스
클라이언트와 서버 모두에서 연결별 추가 하위 흐름 제한을
1
로 설정합니다.ip mptcp limits set add_addr_accepted 0 subflows 1
# ip mptcp limits set add_addr_accepted 0 subflows 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서버에서 MPTCP 서버 애플리케이션을 시뮬레이션하려면 TCP 소켓 대신 강제 MPTCP 소켓을 사용하여 수신 대기 모드에서
netcat
(nc
)을 시작합니다.nc -l -k -p 12345
# nc -l -k -p 12345
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -k
옵션을 사용하면 첫 번째 수락된 연결 후 해당nc
가 리스너를 닫지 않습니다. 하위 흐름의 모니터링을 보여주는 데 필요합니다.클라이언트에서 다음을 수행합니다.
가장 낮은 메트릭으로 인터페이스를 식별합니다.
ip -4 route
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow enp1s0
인터페이스에는wlp1s0
보다 낮은 메트릭이 있습니다. 따라서 RHEL은 기본적으로enp1s0
을 사용합니다.첫 번째 터미널에서 모니터링을 시작합니다.
ip mptcp monitor
# ip mptcp monitor
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 두 번째 터미널에서 서버에 대한 MPTCP 연결을 시작합니다.
nc 192.0.2.1 12345
# nc 192.0.2.1 12345
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL은
enp1s0
인터페이스와 관련 IP 주소를 이 연결의 소스로 사용합니다.모니터링 터미널에서
ip mptcp 모니터
명령이 다음을 기록합니다.[ CREATED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345
[ CREATED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 토큰은 MPTCP 소켓을 고유 ID로 식별하고 나중에 동일한 소켓에서 MPTCP 이벤트의 상관 관계를 지정할 수 있습니다.
서버에 대한 실행 중인
nc
연결이 있는 터미널에서 Enter 를 누릅니다. 이 첫 번째 데이터 패킷은 연결을 완전히 설정합니다. 데이터가 전송되지 않은 한 연결이 설정되지 않습니다.모니터링 터미널에서
ip mptcp 모니터
는 다음을 기록합니다.[ ESTABLISHED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345
[ ESTABLISHED] token=63c070d2 remid=0 locid=0 saddr4=192.0.2.2 daddr4=192.0.2.1 sport=36444 dport=12345
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 서버의 포트
12345
에 대한 연결을 표시합니다.ss -taunp | grep ":12345"
# ss -taunp | grep ":12345" tcp ESTAB 0 0 192.0.2.2:36444 192.0.2.1:12345
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 시점에서 서버에 대한 하나의 연결만 설정되었습니다.
세 번째 터미널에서 다른 끝점을 생성합니다.
ip mptcp endpoint add dev wlp1s0 192.0.2.3 subflow
# ip mptcp endpoint add dev wlp1s0 192.0.2.3 subflow
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 이 명령에서 클라이언트의 everyone 인터페이스의 이름과 IP 주소를 설정합니다.
모니터링 터미널에서
ip mptcp 모니터
는 다음을 기록합니다.[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
[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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow locid
필드는 새 하위 흐름의 로컬 주소 ID를 표시하고 연결이 NAT(네트워크 주소 변환)를 사용하는 경우에도 이 하위 흐름을 식별합니다.saddr4
필드는ip mptcp endpoint add
명령의 끝점 IP 주소와 일치합니다.선택 사항: 서버의 포트
12345
에 대한 연결을 표시합니다.ss -taunp | grep ":12345"
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제 명령에서 두 개의 연결을 표시합니다.
-
소스 주소
192.0.2.2
와의 연결은 이전에 설정한 첫 번째 MPTCP 하위 흐름에 해당합니다. -
소스 주소
192.0.2.3
을 사용하여wlp1s0
인터페이스를 통해 하위 흐름에서 연결합니다.
-
소스 주소
세 번째 터미널에서 끝점을 삭제합니다.
ip mptcp endpoint delete id 2
# ip mptcp endpoint delete id 2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ip mptcp 모니터 출력의
명령을 사용하여 끝점 ID를 검색합니다.locid
필드의 ID를 사용하거나ip mptcp
endpoint show모니터링 터미널에서
ip mptcp 모니터
는 다음을 기록합니다.[ 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
[ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nc
클라이언트가 있는 첫 번째 터미널에서 Ctrl+C 눌러 세션을 종료합니다.모니터링 터미널에서
ip mptcp 모니터
는 다음을 기록합니다.[ CLOSED] token=63c070d2
[ CLOSED] token=63c070d2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow