| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- 신혼 여행
- 생성 패턴
- github
- amazon ecs
- terraform
- 실용주의 프로그래머
- 경로 계획 알고리즘
- 커머스
- AWS 비용 절감
- AWS
- study
- 지표
- leetcode
- DevOps
- MAPF
- 논문 정리
- 청첩장 모임
- Til
- Go-lang
- Playwright
- 디자인 패턴
- 구조 패턴
- 회고
- docker
- PostgreSQL
- 14일 공부
- 티스토리챌린지
- 오블완
- Rust
- ssh
- Today
- Total
밤 늦게까지 여는 카페
네트워크 이슈들은 어떻게 재현할 수 있을까요? - Linux "tc" 간단 사용기 본문
혹시 네트워크 이슈를 경험해보신 적 있으실까요?
저는 서비스를 개발하면서 네트워크 이슈 때문에 고생을 많이 했습니다... ㅜㅠ
이번에는 네트워크 이슈를 재현하는데 도움이 되는 리눅스 tc를 소개시켜드리겠습니다.
0. 네트워크 이슈의 어려운 점
1) 나중에 보냈던 요청에 대한 응답이 먼저 오는 아주 귀여운 경우부터 2) 상대방에게 요청은 전달되었는데 나는 응답을 못 받는 경우, 3) http 요청 코드에서 갑자기 멈추는 경우 등
경험했던 모든 네트워크 이슈들은 매번 저를 당황시켰습니다... 게다가 문제를 재현하는 것도 아주 어려습니다.
네트워크 이슈로 의심되면 로그를 잔뜩 추가하고 5일동안 프로그램은 실행시켜둔 뒤 문제가 재현되길 기다리곤 했습니다.
혹은 테스트를 진행하는 컴퓨터의 랜선을 뽑았다 꽂았다, 와이파이 연결을 끊었다 맺었다를 반복했습니다 ㅋㅋㅋ
이런 방식으로 네트워크 이슈들을 해결하려고 하니 너무 비효율적이었습니다...
1. Linux "tc"
어느 날 네트워크 이슈를 재현하는 중에 팀원분이 리눅스에 좋은 툴이 있다고 알려주셨습니다.
호다닥 찾아보니 tc라는 툴이 있더라고요!
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/linux-traffic-control_configuring-and-managing-networking#doc-wrapper
- https://man7.org/linux/man-pages/man8/tc.8.html
- 멍청하면 몸이 고생한다더니...
tc는 리눅스 커널의 트래픽 컨트롤 설정을 변경할 때 사용되는 도구입니다.
여기서 말하는 트래픽 컨트롤은 리눅스에서 네트워크 인터페이스로 들어온 패킷을 처리하는 부분입니다.
네트워크 인터페이스로 들어오고 나가는 패킷의 필터링, 처리 순서, 손실률을 조절할 수 있어서
잘만 사용하면 대부분의 네트워크 이슈를 재현할 수 있습니다.
2. 사용 예시
tc를 제대로 사용하려면 알아야 할 개념과 옵션, 파라미터가 정말 많아서 막막했습니다.
하지만 제가 겼었던 네트워크 이슈들은 패킷을 랜덤하게 드랍시키는 것만으로 재현할 수 있었습니다.
이는 다음 명령어로 수행 가능합니다!
sudo tc qdisc add dev {네트워크 인터페이스 ID} root netem loss {손실률%}
혹시 네트워크 인터페이스가 여러 개 있으신가요?
일반적으로 ip route 명령어를 입력했을 때, default 항목에 있는 인터페이스 ID를 입력하면 됩니다.
ip route 입력했을 때 다음과 같이 출력된다면 eth0 이 입력해야 할 네트워크 인터페이스 ID 입니다.

그리고 손실률%에는 패킷의 몇%를 드랍시킬지 적으면 됩니다.
만약 "eth0으로 들어오고 나가는 패킷의 50%를 드랍시키고 싶다"면 다음과 같이 명령어를 실행하면 됩니다!
sudo tc qdisc add dev eth0 root netem loss 50%
만약에 패킷 드랍률을 바꾸고 싶다면 change 명령을 이용하면 됩니다.
sudo tc qdisc change dev eth0 root netem loss 100%
이제 tc 툴을 다 사용해서 패킷 드랍률을 0%로 바꾸려면 어떻게 해야 할까요?
change 명령어를 이용해서 0%로 바꿀수도 있지만 delete 명령어를 이용해서 설정을 제거할 수도 있습니다.
sudo tc qdisc del dev eth0
tc 툴을 이용해서 네트워크 이슈를 재현하는데 정말 많은 도움을 받고 있습니다.
하지만 랜덤하게 패킷을 드랍시키는 것도 어느 정도의 비효율성은 남아 있습니다.
- 더 빠르게 문제를 재현하고, 처리하고 싶다는 끝없는 욕심
나중에 조금 더 정확하고 빠르게 테스트를 진행해야 하는 일이 생긴다면 다른 옵션들도 공부하게 될 것 같습니다.
혹시 리눅스 traffic control에 관심이 있으시다면 다음 문서 추천드립니다!
'유용한 툴 > 네트워크' 카테고리의 다른 글
| 네트워크 문제 있을 때는 일단 ping 부터!+ping이 안되면 어떡하죠? feat. curl, tcping (0) | 2024.10.01 |
|---|