네트워킹 프로그래밍을 하고 있는데...

gnoygnas의 이미지

MicroC/OS-II에서 WAT TCP를 사용해서 프로그래밍을 하고 있는데, 문제가 많이 발생하네요...

우선 접속과정부터 문제가 있습니다..ARP를 하는데 제대로 서버를 찾지 못하고 ARP가 이뤄졌더라도 그 이후의 SYN, SYN+ACK, ACK 과정이 불안정합니다.. 10번에 한번 접속이 이뤄질까 말까하고요..

한가지 궁금한 것은 검은색 부분으로 된 곳인

[TCP dup ACK 38#1] ~~

이것의 의미입니다.

정상적인 Server / Client 의 app를 캡춰해보면 이런부분이 나오질 않더군요...뭔가 문제가 있으니까 나오겠죠?

이더리얼로 캡춰한 그림을 첨부합니다.

이러저런 조언 부탁드리겠습니다..^^
감사합니다.

File attachments: 
첨부파일 크기
Image icon problem.jpg431.46 KB
익명 사용자의 이미지

재전송하고 있는 부분인데요.

상대가 못받았다고 판단해서(!) 재전송하고 있습니다.
판단한 원인은 모르겠군요. 타임아웃, 손실, 등등이 그 판단 원인 중 하나일 듯 합니다.

gnoygnas의 이미지

답변 감사합니다..

SYN에 대한 패킷을 나름대로 분석해보았습니다.
정상적인 경우와 현재 문제가 생기는 경우의 패킷을 보면 약간 틀린점이 있더군요..

정상적인 경우에 보이지 않았던 trailer 부분(0x0000)이 ethernet 프레임 맨 끝에 붙고, TCP 헤더에서 option&padding 부분에서 몇몇 항목이 나타나지 않았습니다...

맨 끝에 있는 option과 padding에서 각각의 항목들이 무슨 의미를 가지고 있는지 궁금합니다..이쪽부분이 문제가 있지 않을까 추측하고 있긴 한데, 아직 내공이 없어서...ㅡ,.ㅡ

1. Maximum Segment size (1460 bytes) : 02 04 05 b4
2. SACK Permitted : 04 02
3. Time Stamp : 08 0a 00 a8 b5 b1 00 00 00 00
4. NOP : 01
5. Window Scale : 03 03 00

정상적인 경우의 패킷

0000  00 11 22 33 44 77 00 0c  29 25 1e 21 08 00 45 00   .."3Dw.. )%.!..E.
0010  00 3c ee f8 40 00 40 06  c6 b0 c0 a8 01 dc c0 a8   .<..@.@. ........
0020  01 e6 04 29 21 24 c5 9c  5b 49 00 00 00 00 a0 02   ...)!$.. [I......
0030  16 d0 af 97 00 00 02 04  05 b4 04 02 08 0a 00 a8   ........ ........
0040  b5 b1 00 00 00 00 01 03  03 00                     ........ ..      


 ''' ETHERNET '''
 * Destination H/W Address : 00 11 22 33 44 77 
 * Source H/W Address : 00 0c 29 25 1e 21
 * Type : 08 00

 ''' IP '''
 * 버전(Version) : 4
 * IHL(헤더 길이) : 5 - 20바이트를 의미함
 * 서비스 유형(TOS) 플래그  : 00 
 * 전체 길이(패킷 길이, 혹은 데이터그램 길이) : 00 3c 
 * 식별(identification) : ee f8  <-- 용도를 정확하게 이해할 것
 * 플래그 4
 * 프래그먼트 오프셋(Fragment offset) : 0 00 
 * 생존기간(TTL) : 40
 * 프로토콜 : 06
 * 헤더 체크섬(Checksum) : c6 b0 
 * 송신지 주소(Source Address) : c0 a8 01 dc 
 * 목적지 주소(Destination Address) : c0 a8 01 e6 

 ''' TCP '''
 * 송신지 포트(Source Port) : 04 29 
 * 목적지 포트(Destination Port) : 21 24 
 * 일련 번호(Sequence Number)  : c5 9c  5b 49 
 * 확인 번호(Acknowledgement Number) : 00 00 00 00 
 * 헤더 길이, 혹은 오프셋 : a0
 * 예약(Reserved) : 
 * 제어 플래그(Control Flags) : 02
 * 윈도우 크기(Window Size) : 16 d0
 * 체크섬(Checksum)  : af 97
 * Urgent Pointer(16 bits) : 00 00
 * Option & padding : 02 04  05 b4  |  04 02  |  08 0a 00 a8 b5 b1 00 00 00 00  |  01  |  03  03 00
   1. Maximum Segment size (1460 bytes) : 02 04 05 b4
   1. SACK Permitted : 04 02
   1. Time Stamp : 08 0a 00 a8 b5 b1 00 00 00 00
   1. NOP : 01
   1. Window Scale : 03 03 00

문제가 있는 경우의 패킷

0000  00 0c 29 25 1e 21 00 08  76 23 34 45 08 00 45 00   ..)%.!.. v#4E..E.
0010  00 2c 00 01 00 00 fe 06  37 e0 c0 a8 01 be c0 a8   .,...... 7.......
0020  01 dc 21 24 21 24 fb 14  00 00 00 00 00 00 60 02   ..!$!$.. ......`.
0030  10 00 c5 de 00 00 02 04  05 b4 00 00               ........ ....    


 ''' ETHERNET '''
 * Destination H/W Address : 00 0c 29 25 1e 21 
 * Source H/W Address : 00 08  76 23 34 45 
 * Type : 08 00
 * Trailer : 00 00 <-- 맨 끝 부분 2바이트

 ''' IP '''
 * 버전(Version) : 4
 * IHL(헤더 길이) : 5 - 20바이트를 의미함
 * 서비스 유형(TOS) 플래그  : 00 
 * 전체 길이(패킷 길이, 혹은 데이터그램 길이) : 00 2c 
 * 식별(identification) : 00 01 <-- 용도를 정확하게 이해할 것
 * 플래그 0
 * 프래그먼트 오프셋(Fragment offset) : 0 00 
 * 생존기간(TTL) : fe
 * 프로토콜 : 06
 * 헤더 체크섬(Checksum) : 37 20 
 * 송신지 주소(Source Address) : c0 a8 01 be 
 * 목적지 주소(Destination Address) : c0 a8 01 dc 

 ''' TCP '''
 * 송신지 포트(Source Port) : 21 24
 * 목적지 포트(Destination Port) : 21 24 
 * 일련 번호(Sequence Number)  : fb 14 00 00 
 * 확인 번호(Acknowledgement Number) : 00 00 00 00 
 * 헤더 길이, 혹은 오프셋 : 60
 * 예약(Reserved) : 
 * 제어 플래그(Control Flags) : 02
 * 윈도우 크기(Window Size) : 10 00
 * 체크섬(Checksum)  : c5 de
 * Urgent Pointer(16 bits) : 00 00
 * Option & padding (4 bytes): 02 04  05 b4
   1. Maximum Segment size (1460 bytes) : 02 04 05 b4

One must, In fact, Love your pursuit
My home is below...Well, just go own your gait!

댓글 달기

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