net.ipv4.tcp_syn_retries

rigil의 이미지

안녕하세요.
기본적인 질문입니다만...
net.ipv4.tcp_syn_retries 옵션을 사용하면, 일정한 시간과 일정한 IP별로 보내고 받는 syn이 횟수를 제한할수 있다고 알고 있는데요.
일정한 시간이 어느정도인지 알고 싶습니다.
검색을 해보았으나..없더군요.
혹시 제가 못찾은거라면, 죄송합니다.
그럼 이만~

mach의 이미지

rigil wrote:

...
net.ipv4.tcp_syn_retries 옵션을 사용하면, 일정한 시간과 일정한 IP별로 보내고 받는 syn이 횟수를 제한할수 있다고 알고 있는데요.
...

man tcp(매뉴얼 페이지)

Quote:
tcp_syn_retries
The maximum number of times initial SYNs for an active TCP
connection attempt will be retransmitted. This value should not
be higher than 255. The default value is 5, which corresponds to
approximately 180 seconds.

잡담을 잠시 섞으면요.

socket레벨에서(user level) connect()를 호출할때, connect()는 원격지에
SYN 패킷을 보내게됩니다.(그리고는 SYN+ACK받고, ACK보내지요 아시다시피)
이때, 잘~되는 시나리오 말고, 안되는 시나리오를 생각해 볼 수 있겠습니다.
SYN을 보냈는데(connect()호출), 감감 무소식이면 열받겠지요.
이 책임은 커널이(운영체제가) 져야 하는부분이니 말입니다.
그래서 운영체제는 SYN+ACK나 RST(거부)같은 SYN에 대한 응답 패킷이 오지 않는 경우를
생각합니다(정확히는 TCP/IP스택부분이겠지요)
방법은 당연히, 타임아웃을 걸고 제한시간까지 안오면 다시보낸다. 왜냐, 중간에
SYN이 소실될 수도 있으니까....
그럼 얼마를 타임아웃으로 걸것이며, 또한, 도대체 몇번이나 다시 시도해야 하는가?
라는 문제가 또 발생하네요.

해결책은 원격지와 연결확립시 특히, active open(connect()라는 것을 할때),
tcpsyn에 대한 retry를 몇번할까?라는 문제를 푸는것도 그중 하나이겠지요.

또하나는, 취향인데요, 난 삼세판 만할거다. 난 5번 할거다. 이런 식으로
사용자 별로 튜닝을 할 수 있어야 할것이라는 것입니다. 유닉스(리눅스)는
오픈시스템(개방형시스템)이니까요. 소위 커널 파라메터로 말입니다.

여기까지 읽으시고, 다음은 man tcp를 보시기 바랍니다. man page를 보면
제가 얘기한 것보다는 보다 정확하고, 많은 지식을 얻으실것으로 보입니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

익명 사용자의 이미지

rigil I definitely agree with your words.