- 동대문부자재시장
- openwrt
- openwrt nat 테이블 확인하기
- nat 정의
- C
- openwrt nat table
- Linux
- C언어
- 프로그래머스 c언어
- nat 적용
- 리눅스
- 나트랑 일정
- 제주도
- openwrt nat
- openwrt netfilter
- WiFi6
- Wireless
- nat table 확인하기
- openwrt nf_conntrack
- ubuntu
- 자이언트얀
- 네트워크
- menuconfig
- hostapd
- 취미생활
- WiFi
- nf_conntrack
- programmers level2 C
- 나트랑 여행 경비
- 비즈팔찌
- Today
- Total
Mandoo’s WLAN story
[OpenWRT] TCP open fail 시 재전송 횟수 확인 본문
C언어로 만들어진 클라이언트에서 서버에게 TCP연결을 요청했을 때 실패하는 경우 syn패킷을 재전송하는 횟수를 확인 및 세팅 할 수 있다.
net.ipv4.tcp_syn_retries를 세팅하면된다.
TMI) 이 값은 커널 파라미터인데, 기본적으로 6으로 세팅되어 있는 듯 하다. (openwrt 기준)
1. 현재 설정된 재전송 횟수 확인
아래 커맨드를 입력해 재전송 횟수를 확인한다.
sysctl -a | grep "net.ipv4.tcp_syn_retries"
sysctl net.ipv4.tcp_syn_retries
2. tcpdump를 이용해 재전송 횟수 확인
이 값이 실제로 재전송에 쓰이는 값인지 확인해보자.
일부로 무의미한 주소를 이용해 connect 에러를 내고, tcpdump를 이용해 실제로 전송되는 패킷의 갯수를 확인했다.
tcpdump -i rmnet_data0 host 123.123.123.123&
tcp_syn_retries 만큼 재전송을 시도한다.
(실제로 재전송되는 패킷은 6개이고, 1개는 최초 전송 패킷이다.)
테스트 시 재전송 주기는 다양하다.
2초 간격으로 재전송을 시도 할 때도 있고, 3-4초 간격일 때도 있고 재전송 주기가 매번 다를 때도 있다.
3. 재전송 횟수 수정
아래와 같이 커맨드를 입력한다.
재전송횟수는 무조건 1 이상이어야 한다.
0으로 설정 할 경우 SYN 패킷 전송 후 서버로부터의 응답을 기다리지 않고 즉시 연결 실패로 판단하기 때문이다.
(openwrt 기준)
sysctl -w net.ipv4.tcp_syn_retries=1
위에서 확인한 방법으로 세팅이 저장되었는지 확인한다.
sysctl net.ipv4.tcp_syn_retries
다시 무의미한 주소로 tcp connect을 시도하면 아래와 사진과 같이 1회만 재전송을 시도하는 것이 확인된다.
4. 소스코드에서 수정
나는 sysctl net.ipv4.tcp_syn_retries 값이 3으로 세팅된 펌웨어를 만들어야 하기 때문에 커널 소스코드에서부터 변경을 해주었다!
펌웨어의 전체 소스코드는 다들 다를테니 공통된 경로만 써놓겠다!
linux-4.4/include/net/tcp.h
tcp 헤더파일에 보면 6으로 선언되어있다!
나는 이 값을 3으로 세팅해서 펌웨어를 만들었당!
#define TCP_SYN_RETRIES 3 /* This is how many retries are done
'Mandoo's IT Story > OpenWRT' 카테고리의 다른 글
[OpenWRT]OpenWRT에서 logrotate 사용하기 (0) | 2022.09.14 |
---|---|
[OpenWRT] openwrt에서 mac주소 변경하는 방법 (0) | 2022.08.31 |
[OpenWrt] Openwrt Network 설정 (0) | 2021.11.11 |