TCP 접속시 SYN 패킷 재전송 타이머

young93의 이미지

안녕하세요

TCP 접속을 시도할 때 SYN 패킷을 보내는데, 응답이 없으면
3, 9, 21, 45, 93초 에 재전송을 하더군요.
좀더 짧은 간격으로 보내고 싶은데...
조정할 수 있는 방법이 없나요?

조언부탁드립니다.

mach의 이미지

young93 wrote:
안녕하세요

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()던가?) 이 비스무리한 것이 있었던것같은데요.
거기를 참조해보시지요. 훌륭한 책이라서 더 쉽게 잘 설명되어 있을듯합니다.

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.