W5500 TCP client 라우터 방화벽 접속안됨 문의

W5500 을 tcp client 모드로 사용하여tcp 서버에 접속하는 형태로 사용 중입니다.

w5500칩 + ARM 으로 board를 제작하여 기본 접속 및 데이터 송수신 까지 확인 하였습니다.

문제는 사무실이 학교 망을 사용하는데 외부의 서버(서버A라 칭함)에 접속이 안되는 현상입니다.
학교망 내에 IPTIME 공유기를 사용중이며 공유기 아래에 제 PC와 w5500 보드가 있습니다.
W5500보드가 사무실에서 서버A로 접속이 안됩니다.
W5500보드를 학교망 내가 아닌 집에 갖고 가면 서버A에 잘 접속 합니다.
간단히 생각해보면 W5500 패킷을 학교망(라우터 등이겠죠.)에서 막고 있다고만생각이 드는데.
추가적으로 사무실 PC에서 TCP 클라이언트 프로그램을 이용해 서버A에 접속은 또 잘 됩니다.(외부로 나가는 패킷을 모두 막는것은 아닌것 같고 뭔가 패킷내 라우터의 성질을 건으리는 잘못된 값이 있지 않나 추측 중)
혹시나 해서 사무실에서 ARDUINO W5100 쉴드(펌웨어가 다르지만)로 서버A에 접속해도 이또한 접속이 잘 됩니다.

(맥 어드레스나, #define DCHP_HOST_NAME “AABBCCDD\0” 바꿔 가며 테스트 해보아도 안되는건 동일)

펌웨어를 디버깅해보면if(connect(sn,server_ip,server_port)==SOCK_OK); 요 함수에서 서버 연결을 하지 못해 타임아웃으로 리턴값이 0이 되는 상황 입니다.
TCP는 잘 모르는데 Wireshark 으로 아두이노 쉴드로 제 PC에 접속하는 패킷과 제작한 W5500 보드의 접속하는 패킷을 비교해 봐도 거의 대동소이 해 보입니다.
다만
제작한 W5500보드는 src port: 9000, Dst Port: 9000
아두이노 쉴드보드는 Src port:49153 Dst Port:9000 이게 좀 다르네요.(무슨 의미인지 모르겠지만)

네트워크 담당자에게 문의할 상황은 되지 못하며, 작성 내용이 빈약한 다는 것은 알고 있으나
혹여 우선적으로 의심해 봐야할 부분이나, 점검해 볼수 있는 부분에 대해 도움을 받을수 있을까 하고 문의글 남깁니다.

안녕하세요

wireshark 확인이 가능하시다면 우선
W5500보드에서
ARP Request패킷이 나가는것과, Response를 받는지
받았다면
SYN 패킷이 나가는 것과, 서버로부터 SYN 패킷에 대한 응답이 있는지 확인해보시는게 좋을 것 같습니다.

image
ARP Response 패킷에서 아두이노와 W5500에서의 Sender MAC address가 일치하는지 확인 부탁드립니다.

아두이노로 서버 A에 접속했을때(연결이 잘되는상황)와 W5500으로 서버 A에 접속했을때(연결이 안되는상황)의 패킷을 becky@wiznet.io로 보내주시면 확인해드리겠습니다.

공유기 내에서 w5500보드가 제 PC에 tpc로 접속되어 있는 상황에서 패킷을 뽑아보면 아래와 같습니다.
W5500 = d0:50:99:54:65(192.168.0.27)
TCP Server PC = d0:50:99:6b:54:64(192.168.0.5)
(* 학교망에서 MAC으로 필터링 하나 싶어, W5500맥주소를 PC와 유시하게 설정함)

wireshark 프로그램이 W5500보드와 서버A간 주고받은 패킷을 확인가능한가요? wireshark은 PC에 들어오고 나가는 패킷만 볼 수 있는것 아닌가요?
아니면, 서버A에서 wireshark 를 돌려 확인해보라는 말씀이신가요?

안녕하세요

제가 착오가 있었습니다.
PC와 W5500이 같은 dummy hub에 연결되어있을경우 PC에서 wireshark를 확인할 수 있습니다.

공유기의 경우 TCP패킷은 확인이 불가하지만, ARP의 경우 Broadcast 메시지이기 때문에 PC에서 확인할 수 있습니다.
ARP패킷확인 부탁드립니다.

학교망내 공유기내에서 W5500을 서버A(외부) TCP로 접속하게 하고 공유기 내의 PC에서 패킷을 2분정도 캡쳐하였습니다.
W5500은 DHCP로 IP를 받아오도록 하였습니다.

위의 캡쳐 패킷으로 무제점 확인 되나요?

안녕하세요

메일확인하였습니다.
패킷으로보니 상황으로는 server에서 접속시도에대한 응답을 주지못해 timeout이 나는 상황입니다.

W5100으로는 통신이 가능하니 다른경우를 배제하고 의심해봐야할 점은 port number 같습니다.
port number는 하나의 ip로 여러 통신을 하는 경우 target을 명확하기 위해 사용됩니다.
W5100과 W5500의 경우에도 192.168.0.x 로 다른 ip를 할당받았지만 외부에서는 공유기의 ip로 통신을 하며 port number로 구분을 하게 됩니다.
공유기의 경우 설정을 통해 ip별로 통신가능한 port number를 할당 해줄 수 있습니다.
혹시 설정되어있는부분이 있는지 확인 하시는게 좋을것 같습니다.

공유기뿐만아니라 서버에서도 9000번 port 와의 통신을 막아놓았을 수도 있습니다.
따라서 port 번호를 변경해서 시도해보시는 것을 추천드립니다
W5100이 통신이 되므로 W5100과 비슷한 대역의 port로 사용하시는게 좋을 것 같습니다.

더불어
W5500을 IPRAW모드로 socket을 open시키면 ping을 전송할 수 있습니다. ping에 대한 응답은 받는지 확인해보는 것도 좋을 것 같습니다. wizwiki.net에서 application note에서 코드를 다운 받으 실 수 있습니다.

확인 감사드립니다.
답변에 대한 추가 질문이 있습니다.
제가 잘못 확인한것인지 한번 봐주시기 바랍니다.

  1. 서버는 항상 9000번 포트를 오픈하고 있습니다.
  2. 공유기 내의 w5100 아두이노 는 9000번 포트로 서버A에 접속됩니다.
  3. 공유기 내의 PC에서 9000번 포트로 서버A에 접속됩니다.
  4. 공유기 내의 W5500보드에서 9000번 포트로 서버A에 되지 않습니다.
  5. 서버A 포트를 변경하여(8677) 재접속을 해보아도 접속 안되는 것은 마찬가지 입니다.(공유기 제거하여 연결하여도)
  6. 추가 실험으로 공유기를 제거하고 학교망에 바로 W5500보드를 연결했는데 역시나 접속이 되지 안습니다.
  7. 학교망에 연결된 다른 PC에서 학고망에 바로 연결된 W5500보드로 ping을 보내면 응답을 합니다.

더 확인할 방법은 없을가요?.

안녕하세요

포트를 변경해보라고 말쓴드린것은
서버포트 말고 보드의 포트 말씀드린것입니다(src port)

보드 포트라 함은요?
서버 접속 포트 설정 말고 내부포트(src port?)가 따로 있나요?
wiznet ioLibrary 기준으로 어느파일에 어느 부분을 살펴보면 되나요?.

안녕하세요

TCP 통신시 destination port와 source port 모두 설정할 수 있습니다.
source port는 Sn_PORT 레지스터를 통해 설정가능하며,
ioLibrary기준으로는
socket.c 에 socket을 open하기위해 사용되는 socket()함수가 있습니다. socket()함수 매개변수중 port에 해당됩니다.

int8_t socket(uint8_t sn, uint8_t protocol, uint16_t port, uint8_t flag)

결국 문제가 해결 되었습니다.^^

아무쪼록 지속적인 관심과 답변 감사드립니다.

문제는 인터넷에서 긁어온 소스에서 socket 함수를 호출할 때 포트번호를 접속하는 포트번호를 넣었더니 통신이 안되는 문제였네요.
server_port 인자 위치에 0값을 넣고 호출하니 정상적으로 서버에 접속됨을 확인하였습니다.
(0을 넣고 호출하면 적당한 범위의 source port 값으로 설정 되는듯 함)

  • 소스 일부 -
    //소켓을 생성한다. 소켓함수 전달 인자는 (“소켓 번호, 통시 모드, 포트 번호, 플래그)” 이다.
    if(socket(sn, Sn_MR_TCP, server_port, 0x00)==sn){
    printf(“%d:Socket Opened\r\n”,sn);

안녕하세요

문제가 해결되었다니 다행입니다 ^^
참고로 socket()함수를 통해 source port값으로 0으로 넣어주었을경우 iolibrary 안에서 49152로 변경해줍니다.

학교망 말고 다른환경에서는 W5500으로 통신이 가능하셨다고 하니,
같은 펌웨어라는 가정하에 학교망에서 9000번 포트가 막혀있거나 다른 기기가 사용중이었던것 같습니다.

그러게요. 방화벽 때문에 삽질은 좀 했지만, 여러모로 네트웍 패킷에 대해 찾아보게 되었네요.
source port와 destination port가 있다는것도 처음 알았네요.

숙오하세요. 또 물어보러 올게요~