프로그래밍/삽질

TCP 연결 시도할 때 RST, ACK 패킷이 되돌아오는 경우

휘진! 2018. 1. 26. 00:03

개인 프로젝트로 C#서버와 안드로이드 클라이언트 간의 TCP 통신을 구현하고 있었다.

컴퓨터에서 안드로이드 이뮬레이터로 localhost로의 통신은 잘 되는데,

apk파일 추출해서 휴대폰에 설치하여 할 때는 이상하게 통신이 되지 않았다.

 

그래서 WireShark로 패킷을 분석해봤는데

 

 

연결을 시도할 때 SYN 패킷은 제대로 전송이 됐는데

서버 컴퓨터에서 SYN 패킷을 받고 RST, ACK 필드가 설정된 패킷을 그대로 클라이언트에게 넘겨줬다.

서버를 꺼둔 상태에서도 똑같은 현상이 일어났다.

분명 서버는 켜둔 상태였고 netstat -na의 결과도 해당 포트에서 LISTENING 상태였는데, 뭐가 문제였을까

 

 

 

 

 

// 종단점
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port);

// 소켓 생성
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// 바인드
listenSocket.Bind(endPoint);

 

 

 

위의 코드는 C#에서 서버 초기 세팅할 때의 코드인데

빨갛게 칠한 저 부분을 IPAddress.Parse("127.0.0.1")로 설정해서 생긴 문제였다.

즉 서버측에서 127.0.0.1로만 포트를 열어둔 것이었다.

 

 

 

자세히 확인해보니 netstat -na의 결과도 위의 사진과 같이 로컬주소 127.0.0.1, 외부주소 0.0.0.0으로만 LISTENING 상태였다.

그래서 같은 컴퓨터에서 서버, 클라이언트를 동작할 때만 통신이 되었었다.