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