tcp retransmission 관련.
글쓴이: devmania / 작성시간: 월, 2009/05/11 - 5:01오후
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:
| 첨부 | 파일 크기 |
|---|---|
| 145.75 KB |
Forums:


캡쳐를 양쪽에서 해보세요
retransmission이 발생한다는건 통신 상태가 안좋다는뜻입니다.
loss가 발생하고있다는거죠.
서버/클라이언트 양쪽에서 패킷캡쳐를 해보세요.
양쪽에서 준만큼 받고 받은만큼 줬는지 확인해보는게 젤 확실하겠네요.
캡쳐파일을 올려주시면 잘은 모르지만 아는데까지는 봐드릴수있음ㅎ
서버측...
서버측에서 상태를 확인해야 할 것 같습니다.
서버에서 timeout을 설정했다면, timeout 이후에는 응답이 있을텐데...
그렇지 않은 것을 보니 mhkang님이 말씀하신 것 같이 통신 상태가 좋지 않은 것이 원인일 수 있겠네요.
_________________________________________________________
nineye's blog
_________________________________________________________
nineye's blog
댓글 달기