tcp retransmission 관련.

devmania의 이미지

tcp 네트워크 통신 중에 retransmission 이 빈번하게 발생하여 통신 속도가 느립니다.
그 이유를 모르겠습니다.

사용자가 특정 명령을 내렸을때, 한번의 통신 루틴은
client -> server : 6byte(데이타 요청).
server -> client : 2byte(결과 데이타 전송).
입니다.
위의 루틴을 여러번 수행시에 간혹가다 retransmission 이 발생합니다.

아래의 코드는 아주 간단한 형태로 테스트 하기 위해 새로 작성한 코드입니다.

#include <winsock2.h>
#include <stdio.h>
 
int main(void)
{
	WSADATA wsaData;
	SOCKET s;
	SOCKADDR_IN ServerAddr;
	int Port = 5150;
	char achrData[6] = {0x83, 0x00, 0x34, 0x12, 0x01, 0x00};
	char achrBuffer[2] = {0x00, 0x00};
 
	WSAStartup(MAKEWORD(2,2), &wsaData);
 
	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
	ServerAddr.sin_family = AF_INET;
	ServerAddr.sin_port = htons(Port);
	ServerAddr.sin_addr.S_un.S_addr = inet_addr("192.168.123.203");
 
	connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr));
 
	while(getchar())
	{
		send(s, achrData, 6, 0);
 
		recv(s, achrBuffer, 2, 0);
	}
 
	closesocket(s);
 
	WSACleanup();
 
 
	return 0;
}

wireshark 로 packet 을 확인해 보면, client 에서 6byte 를 server에 전송하고, server로 부터 2byte 의 데이타를
정확히 받았는데도, client 에서 다시 6byte 를 재전송하는 경우가 보입니다. ack flag 도 정확히 서로 받고 끝냈는데도 그런
현상이 보입니다.

답답한 마음에 질문 드립니다.
어떻게 질문을 드려야 할지도 막막해서 생각나는대로 질문 올려봅니다.
좀더 원하시는 정보가 있으시면 답변 주시면 더 올리겠습니다.

* 첨부 파일은 wireshark 의 결과의 스샷입니다.
그림을 삽입하는 방법을 몰라서 , 또 bmp 파일이 첨부되지 않아 압축하여 파일을 첨부하였습니다.

File attachments: 
첨부파일 크기
Package icon tcp retransmission.zip145.75 KB
mhkang의 이미지

retransmission이 발생한다는건 통신 상태가 안좋다는뜻입니다.
loss가 발생하고있다는거죠.
서버/클라이언트 양쪽에서 패킷캡쳐를 해보세요.
양쪽에서 준만큼 받고 받은만큼 줬는지 확인해보는게 젤 확실하겠네요.
캡쳐파일을 올려주시면 잘은 모르지만 아는데까지는 봐드릴수있음ㅎ

nineye의 이미지


서버측에서 상태를 확인해야 할 것 같습니다.
서버에서 timeout을 설정했다면, timeout 이후에는 응답이 있을텐데...
그렇지 않은 것을 보니 mhkang님이 말씀하신 것 같이 통신 상태가 좋지 않은 것이 원인일 수 있겠네요.

_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

댓글 달기

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