TCP 성능 변조 실현 원리 및 프로 세 스 분석
클 라 이언 트 SYN 패키지 의 재 시도 횟수
sysctl -w net.ipv4.tcp_syn_retries=6
관련 소개1 차 재 시 는 1 초 뒤에 발생 한 뒤 이 어 2·4·8·16·32 초 에 총 6 차례 재 시 도 를 두 배로 하고,마지막 재 시 도 는 64 초 를 기다 리 며 여전히 ACK 로 돌아 오지 않 으 면 세 차례 악 수 를 종료 한다.따라서 총 소모 시간 은 1+2+4+8+16+32+64=127 초 로 2 분 이 넘는다.
서버 세 미 연결 풀 크기
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
서버 의 반 연결 풀 이 가득 찬 후에 syncookie 체 제 를 시작 할 지 여부 입 니 다.
sysctl -w net.ipv4.tcp_syncookies=1
관련 소개SYN 세 미 접속 대기 열 이 가득 차 면 기본적으로 연결 을 버 립 니 다.그렇지 않 습 니 다.syncookies 기능 을 켜 면 SYN 대기 열 을 사용 하지 않 고 연결 을 성공 적 으로 만 들 수 있 습 니 다.
syncookies 는 이렇게 합 니 다.서버 는 현재 상태 에 따라 값 을 계산 하여 우리 측 이 보 낸 SYN+ACK 메시지 에 보 냅 니 다.클 라 이언 트 가 ACK 메시지 로 돌아 갈 때 이 값 검증 을 꺼 냅 니 다.합 법 적 이면 연결 이 성공 적 이 라 고 생각 합 니 다.다음 그림 과 같 습 니 다.
서버 SYN+ACK 패키지 의 재 시도 횟수
net.ipv4.tcp_synack_retries=5
관련 소개tcp_synack_retries 의 기본 재 시도 횟수 는 5 회 입 니 다.클 라 이언 트 가 SYN 을 다시 보 내 는 것 과 유사 합 니 다.재 시 도 는 1,2,4,8,16 초 를 거 칩 니 다.마지막 재 시도 후 32 초 를 기다 리 고 ACK 를 받 지 못 하면 연결 을 닫 습 니 다.그래서 모두 63 초 를 기 다 려 야 합 니 다.
서버 전체 연결 대기 열의 크기
min(backlog,/proc/sys/net/core/somaxconn)에 따라 Liux 커 널 2.2 버 전 이후 listen 함수 의 backlog 인 자 는 accept 대기 열의 크기 를 설정 할 수 있 습 니 다.
또한 backlog 매개 변 수 는 Linux 시스템 급 의 대기 열 길이 상한 선 에 도 제한 되 어 있 습 니 다.물론 이 상한 한도 값 은 somxconn 매개 변 수 를 통 해 수정 할 수 있 습 니 다.somxconn 은 커 널 의 매개 변수 이 고 기본 값 은 128 입 니 다.
sysctl -w net.core.somaxconn=32768
4 회 스윙 단계
그 다음 에 우 리 는 먼저 연결 을 닫 는 쪽 을 주동 적 인 측 이 라 고 부 르 고 나중에 연결 을 닫 는 쪽 을 수 동적 인 측 이 라 고 부른다.
네 번 손 을 흔 드 는 절차:
사실 네 번 의 손 흔 들 기 는 두 가지 메시지 만 언급 된다.FIN 과 ACK.FIN 은 Finish 가 연결 을 끝 낸다 는 뜻 으로 FIN 메 시 지 를 보 낸 사람 은 더 이상 데 이 터 를 보 내지 않 고 이 방향의 전송 채널 을 닫 겠 다 는 뜻 이다.ACK 는 Acknowledge 가 확인 한 뜻 으로 상대방 에 게 알 리 는 데 사 용 됩 니 다.당신 측의 전송 채널 이 이미 닫 혔 습 니 다.주동 자가 연결 을 닫 을 때 FIN 메 시 지 를 보 냅 니 다.이때 주동 자의 연결 상 태 는 ESTABLISHED 에서 FIN 으로 변 합 니 다.WAIT1。수 동적 인 측 이 FIN 메 시 지 를 받 은 후에 커 널 은 자동 으로 ACK 메 시 지 를 답장 하고 연결 상 태 는 ESTABLISHED 에서 CLOSE 로 변 합 니 다.WAIT 는 말 그대로 프로 세 스 가 close 함수 로 연결 을 닫 기 를 기다 리 고 있 습 니 다.주동 자가 이 ACK 메 시 지 를 받 은 후 연결 상 태 는 FINWAIT 1 이 FIN 으로 변경WAIT 2,능 동적 인 송신 채널 이 닫 혔 습 니 다.수 동적 인 송신 채널 이 어떻게 닫 혔 는 지 살 펴 보 자.패 시 브 측 이 CLOSE 에 들 어 갈 때WAIT 상태 에서 프로 세 스 의 read 함 수 는 0 으로 되 돌아 갑 니 다.그러면 개발 자 는 close 함 수 를 맞 춤 형 으로 호출 하여 커 널 에서 FIN 메 시 지 를 보 냅 니 다.이때 수 동적 으로 연 결 된 상 태 는 LAST 로 변 합 니 다.ACK。주동 자가 이 FIN 메 시 지 를 받 았 을 때 커 널 은 자동 으로 ACK 에 답장 을 하고 연결 상 태 는 FIN 입 니 다.WAIT 2 TIMEWAIT,Linux 시스템 에서 약 1 분 후 TIMEWAIT 상태의 연결 이 완전히 꺼 집 니 다.반면 패 시 브 측 이 ACK 메 시 지 를 받 으 면 연결 이 꺼 진다.
능 동적 최적화
ACK 대기,FIN 가방 재발 급 횟수
주동 자가 FIN 메 시 지 를 보 낸 후 연결 은 FIN 에 있 습 니 다.WAIT 1 상태 에서 이 상 태 는 보통 수 십 밀리초 내 에 FIN 으로 전환 해 야 한다.WAIT2。상대방 이 돌아 오 는 ACK 를 늦게 받 지 못 할 때 만 netstat 명령 으로 FIN 을 관찰 할 수 있 습 니 다.WAIT 1 상태.이때 커 널 은 정시 에 FIN 메 시 지 를 다시 보 냅 니 다.그 중에서 재발 급 횟수 는 tcp 입 니 다.orphan_retries 매개 변수 제어(주의,orphan 은 고아 라 는 뜻 이지 만 이 매개 변 수 는 고아 연결 에 만 효과 가 있 는 것 이 아니 라 사실상 모든 FINWAIT 1 상태 에서 의 연결 이 모두 유효 합 니 다)기본 값 은 0 입 니 다.8 번 을 말 합 니 다.
net.ipv4.tcp_orphan_retries = 0
고아 연결 수량net.ipv4.tcp_max_orphans = 16384
관련 소개tcp_max_orphans 는 고아 연결 의 최대 수량 을 정의 했다.프로 세 스 가 close 함 수 를 호출 하여 연결 을 닫 으 면 이 연결 은 FINWAIT 1 상태 에서 이 연결 은 이 프로 세 스 와 무관 하 게 고아 연결 이 되 었 습 니 다.Linux 시스템 은 고아 의 연결 이 너무 많아 서 시스템 자원 이 장기 적 으로 점용 되 는 것 을 방지 하기 위해 tcp 를 제공 합 니 다.max_orphans 인자.고아 연결 이 그 보다 많 으 면 새로 추 가 된 고아 연결 은 네 번 더 손 을 흔 들 지 않 고 RST 리 셋 메 시 지 를 직접 보 내 강제 폐쇄 된다.
고아 연결 의 정의:프로 세 스 가 close 로 닫 힌 연결 을 고아 연결 이 라 고 부 릅 니 다.또한 shutdown 함수 도 연결 을 닫 을 수 있 습 니 다.이 두 사람 은 모두 상대방 에 게 FIN 메 시 지 를 보 냅 니 다(shutdown 매개 변 수 는 SHUT 로 전송 해 야 합 니 다.WR 혹은 SHUTRDWR 에서 만 FIN 을 보 냅 니 다)close 호출 후 상대방 이 반 닫 힌 상태 에서 보 낸 데이터 가 주동 적 인 곳 에 도착 하 더 라 도 프로 세 스 가 받 아들 일 수 없다 는 차이 가 있 습 니 다.netstat-p 명령 을 사용 하면 연결 에 대응 하 는 프로 세 스 이름 이 비어 있 습 니 다(프로 세 스 와 무관 합 니 다!).shutdown 함수 가 호출 되면 연결 이 FIN 에 들 어가 도WAIT 1 또는 FINWAIT 2 상 태 는 고아 연결 도 아니 고 프로 세 스 는 데 이 터 를 계속 받 을 수 있 습 니 다.
FIN 을 기다 리 는 시간.
net.ipv4.tcp_fin_timeout = 60
관련 소개연결 이 ACK 를 받 으 면 FIN 에 들 어 갑 니 다.WAIT 2 상태 가 되면 주동 자의 송신 채널 이 닫 혔 다 는 뜻 으로,그 다음 에는 상대방 이 FIN 메 시 지 를 보 내 기 를 기다 리 며 송신 채널 을 닫 을 예정 이다.이때 연결 이 shutdown 함수 로 닫 히 면 연결 은 계속 FIN 에 있 을 수 있 습 니 다.WAIT 2 상태.그러나 close 함수 가 닫 힌 고아 연결 에 대해 서 는 이 상태 가 오래 지속 되 지 않 습 니 다.tcpfin_timeout 은 이 상태 에서 연결 의 지속 시간 을 제어 합 니 다.
TIME_WAIT 관련 매개 변수
관련 소개
TIME_WAIT 는 주동 자가 네 차례 손 을 흔 드 는 마지막 상태 다.수 동적 인 측 에서 보 내 온 FIN 메 시 지 를 받 았 을 때 주동 적 인 측은 ACK 에 답장 을 보 내 상대방 의 전송 채널 이 이미 닫 혔 음 을 확인 하고 연결 이 TIME 에 들 어 갔다 고 밝 혔 다.WAIT 상태,대기 60 초 후 종료.
TIME_WAIT 상태 최대 연결 수
해당 TIMEWAIT 의 연결 수가 이 인 자 를 초과 하면 새로 닫 힌 연결 은 TIME 를 거치 지 않 습 니 다.WAIT 로 바로 닫 습 니 다.
net.ipv4.tcp_max_tw_buckets = 5000
TIME 재 활용 여부WAIT 상태의 포트복용 TIMEWAIT 상태의 포트 입 니 다.서버 가 상류 서버 에 자발적으로 연결 하면 tcptw_reuse 매개 변 수 는 1 로 설정 되 어 있 으 며 클 라 이언 트 의 새로운 연결 을 허용 합 니 다.안전 한 조건 에서 TIME 을 사용 합 니 다.WAIT 상태의 포트 입 니 다.
net.ipv4.tcp_tw_reuse = 1
물론 tcptw_reuse 가 유효 합 니 다.timestamps 인 자 를 1 로 설정 해 야 합 니 다.안전 재 활용 의 선 결 조건 을 만족 시 켜 야 합 니 다(상대방 도 tcp 를 열 어야 합 니 다.timestamps ):net.ipv4.tcp_timestamps = 1
오래된 버 전의 Linux 는 tcp 도 제공 합 니 다.tw_휴지통 매개 변 수 는 TIME 를 요구 하지 않 습 니 다.WAIT 상 태 는 60 초 간 존재 해 데이터 착란 을 초래 하기 쉬 우 므 로 1 로 설정 하 는 것 을 권장 하지 않 습 니 다.net.ipv4.tcp_tw_recycle = 0
그래서 리 눅 스 4.12 버 전에 서 이 인 자 를 직접 취소 했다.기타 설정
시스템 이 열 수 있 는 포트 범위
sysctl -w net.ipv4.ip_local_port_range=1024 65000
시스템 전역 에서 할당 할 수 있 는 최대 파일 핸들 수sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152
echo 2097152 > /proc/sys/fs/nr_open
현재 세 션 이나 프로 세 스 가 파일 핸들 수 를 열 수 있 도록 합 니 다.
ulimit -n 1048576
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UDP 체크섬 이해의 책에서 공부하고 있었습니다만, UDP의 체크섬의 부분이 약간 어려웠으므로 자신 나름대로 정리해 아웃풋 합니다. 소스 포트 번호 대상 포트 번호 체크섬 체크섬 이외의 설명은 불필요하다고 생각하므로 생략합니다. 체크...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.