TCP ACK에 관한 질문 입니다.

yun8085의 이미지

송신측이 서버이고 수신측이 클라이언트 입니다.

TCP 기본 동작을 보면 송신측에서 수신측으로 ACK과 함께 데이터를 전송하게 되면 수신측에서

두번에 한번씩 ACK을 주잖아요?? (또는 일정시간을 기다리는 것으로 알고 있음.)

지금 송신측이 제가 테스트 하고 있는 임베디드 모듈이고

수신측이 windows XP sp3 플랫폼의 PC인데요 ....

송신측에서 파일을 전송하려고 하면 엄청 느리네요~~

그래서 패킷을 분석해 보았더니 송신측에서 하나의 세그먼트를 보내고

수신측에서 ACK을 줄때까지 기다리는 것으로 보입니다.

원인이 송신측에서 세그먼트를 두개 보낸후 ACK을 기다려야 하는데 한번 보내고 기다려서

PC에서 일정시간 기다렸다가 ACK을 보내서 그러는것 같은데 제가 생각하고 있는게 맞는가요???

맞다면 PC측에서 일정시간 이라는 부분을 조절할 수 있나요??

(패킷 분석결과 200ms 기다리는 듯 합니다.)

s.choi의 이미지

송신측에서는 데이터 세그먼트만 보내는 것이고 Ack 은 수신측에서 송신자에게 보내는 것으로 알고 있는데요. 수신측에서 Ack 을 기다린다는 것이 잘 이해가 되지 않습니다. (통상, 수신측은 데이터 세그먼트를 기다리고, 송신측에서 Ack을 기다리는 형식으로 통신이 이뤄지는것으로 알고 있습니다만)

말씀하신 부분으로 유추해보니, 송신측에서 delayed Ack 기능이 enable 되어 있지 않은 것 같습니다. PC에서 일정시간 기다렸다가 Ack 을 보내신다고 하셨고, 그 "일정시간"을 조정할 수 있느냐고 하셨는데, 그 "일정시간" 이라는 것이 아마 TCP delayed-Ack timer 를 말씀하시는 것 같고, 윈도 XP/2000/2003 에서 이 값이 조정 가능합니다.

위의 제 추측이 맞다는 가정하에 설명드리자면, 200 ms 는 XP 머신이 갖고 있는 default TCP timer out 값입니다 (delayed Ack에 관한 타이머). 이는 언제 발생하냐하면 XP 머신이 200 ms 이내에 두번째 TCP 세그먼트 받지 않으면, 이 타이머가 아웃되게 됩니다. 즉, sender측에는 delayed Ack을 다룰수 있게 세팅되어 있지 않는 것 같고 (sender는 두번째 세그먼트를 보내기 전, 첫번째 TCP 세그먼트에 대한 Ack을 계속 기다리고 있고), XP 머신(수신측)은 두번째 세그먼트를 받아야 Ack을 보내게 세팅되어 있어서, XP 머신의 delayed-Ack 타이머가 아웃되는 현상인 것 같습니다 (이는 매 200ms 마다 발생하게 됩니다).

자세한 설명은 http://support.microsoft.com/kb/328890 를 보시면 됩니다.
(여기 잘 읽어보시면 레지스트리 값을 이용하여 타이머 값도 바꿀수 있습니다.)

요약하여 말씀드리면,
(1) 임베디드 쪽의 TCP에서 delayed Ack을 다룰수 있게 설정을 변경하시거나
(2) 아니면, XP 쪽에 delayed Ack 기능을 꺼 놓으시거나
(3) 아니면, XP 머신의 timer 값을 조정하시면 될것 같습니다.

하지만, (3)번은 추천드리고 싶은 방법이 아니고, (1)번 방법이 가장 바람직 할 것 같습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.