TCP 접속을 시도할 때 SYN 패킷을 보내는데, 응답이 없으면
3, 9, 21, 45, 93초 에 재전송을 하더군요.
좀더 짧은 간격으로 보내고 싶은데...
조정할 수 있는 방법이 없나요?
조언부탁드립니다.
일단 커널수준의 패치없이는 불가능합니다.(혹시, 커널 네트워크 파라메터를 지원하는 운영체제라면 가능할지도?...)
user level에서 가능하게 하는 테크닉으로는 전형적으로 다음과 같이
2가지정도의 방법이 있겠습니다.
1) alarm()을 사용한다.
이 방법은 모든 블록킹(blocking) 시스템 호출의 블록킹을 깨는 방법으로 사용가능한데요.
"모든 유닉스 시스템호출중 블록킹 호출은 성공, 실패 또는 시그널에 의해 블록킹에서 탈출한다" 라는 사실을 응용하는 것입니다.
socket() Api들중 connect(), accept(), read(), write()등은 블록킹 호출이지요. 디폴트로 대부분의 운영체제에서요.
이 블록킹 호출을 탈출시키려면, 다음 3가지조건중 하나인데, 특히 connect()에서요.
(1) connect()가 빠르게 되서 연결이 원하는 빠른 시간내에(?) 이뤄졌다.
(2) connect()호출 자체가 실패했다.
(3) 시그널을 받았다.(임의의 시그널입니다)
이중 (3)시그널 즉, alarm()을 이용하면 시그널이 원하는 시간대에 발생할테고, connect()는 탈출되겠지요. 탈출이유는 시그널 받아서......
이때, 다시 connect()를 타이머(알람)주고 걸면되겠지요?
2) select()를 사용한다.
이는 기본적으로 non-blocking으로 세팅한 이후에 시도하는 테크닉입니다.
음,...... 스티븐스의 유닉스네트워크 프로그래밍 2nd edition에 connect_nonb()함수가 구현되어 있으니(이름이??nonb_connect()던가?) 이 비스무리한 것이 있었던것같은데요.
거기를 참조해보시지요. 훌륭한 책이라서 더 쉽게 잘 설명되어 있을듯합니다.
Re: TCP 접속시 SYN 패킷 재전송 타이머
일단 커널수준의 패치없이는 불가능합니다.(혹시, 커널 네트워크 파라메터를 지원하는 운영체제라면 가능할지도?...)
user level에서 가능하게 하는 테크닉으로는 전형적으로 다음과 같이
2가지정도의 방법이 있겠습니다.
1) alarm()을 사용한다.
이 방법은 모든 블록킹(blocking) 시스템 호출의 블록킹을 깨는 방법으로 사용가능한데요.
"모든 유닉스 시스템호출중 블록킹 호출은 성공, 실패 또는 시그널에 의해 블록킹에서 탈출한다" 라는 사실을 응용하는 것입니다.
socket() Api들중 connect(), accept(), read(), write()등은 블록킹 호출이지요. 디폴트로 대부분의 운영체제에서요.
이 블록킹 호출을 탈출시키려면, 다음 3가지조건중 하나인데, 특히 connect()에서요.
(1) connect()가 빠르게 되서 연결이 원하는 빠른 시간내에(?) 이뤄졌다.
(2) connect()호출 자체가 실패했다.
(3) 시그널을 받았다.(임의의 시그널입니다)
이중 (3)시그널 즉, alarm()을 이용하면 시그널이 원하는 시간대에 발생할테고, connect()는 탈출되겠지요. 탈출이유는 시그널 받아서......
이때, 다시 connect()를 타이머(알람)주고 걸면되겠지요?
2) select()를 사용한다.
이는 기본적으로 non-blocking으로 세팅한 이후에 시도하는 테크닉입니다.
음,...... 스티븐스의 유닉스네트워크 프로그래밍 2nd edition에 connect_nonb()함수가 구현되어 있으니(이름이??nonb_connect()던가?) 이 비스무리한 것이 있었던것같은데요.
거기를 참조해보시지요. 훌륭한 책이라서 더 쉽게 잘 설명되어 있을듯합니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기