NM7010B+ Network Module을 사용하고 있습니다

안녕하세요.

NM7010B+ Network Module을 사용하고 있습니다.
BUS는 DIRECT MODE로 연결되어 있고, Interrupt는 사용하지 않으며, Protocol은 TCP를 사용합니다.
기초적인것 몇가지를 질문하겠습니다.

  1. CLOSE와 DISCONNECT의 차이는 무엇인가요?
    State Diagram을 보니 연결 여부를 떠나서 CLOSE로 모두 사용이 가능한데 DISCONNECT는 왜 있는가요?

  2. SOCK_ESTABLISHED 상태이고 물리적인 연결이 단절된 상태에서 SEND_KEEP을 전송하면 얼마의 시간이 경과하고 SOCK_CLOSED 상태로 변하는지요? 또한 계산 방법은 어떻게 되는지요?
    SEND_KEEP을 전송하고 SOCK_CLOSED 상태로 변하기 전에 물리적으로 다시 연결을 하면 상태는 어떻게 되는지요?
    SEND_KEEP을 통신이 없는 경우에 1초 주기로 전송을 해도 상관이 없는지요? 상관이 있다면 주기는 얼마가 적당하며, 이유는 무었입니까?

  3. Test 도중에 Status Code가 0x01 이 되는 경우를 보았습니다.
    Code 설명이 없습니다. 어떤 경우에 Status Code가 0x01이 되며, 이 경우에는 어떻게 대처를 해야 하는가요?
    이 경우에는 Server가 Listen 상태로 대기하고 있는데도 OPEN 이후에 CONNECT를 하면 ESTABLISH 상태가 되지 않고 CLOSED 상태로 변합니다.
    그래서 전원을 껐다가 켜야 정상 연결이 되었습니다.

조속한 답변을 부탁드립니다.
감사합니다.

안녕하세요 :slight_smile:

  1. Close는 Socket을 close 하는 것이며 Disconnect는 상대편과 연결을 끊는 것입니다.
    Disconnect는 연결된 상대와의 Connection을 끊는 것이므로 close와는 확실한 차이가 있습니다.
    Disconnect는 플러그를 뽑는것이고 Close는 플러그를 제거하는 것이라 생각하시면 될 것 같습니다.
    이는 TCP Socket 통신의 과정을 보시면 자세히 이해가 가능하실 겁니다.

  2. Send_keep은 Connection을 확인하기위해 데이터를 1byte를 보내는 것입니다. TCP 통신 특성상 보낸 데이터의 ack이 오지않으면 지정된 time이 지난후 연결을 끊게 되어 있습니다. 따라서 지정한 RTR RCR값을 확인하시고 Timeout값이 얼마인지 몇번 재전송하는지에 따라 계산하시면 됩니다.
    Timeout이 RCR만큼 발생하기전에 다시 물리적 연결이 되어 통신이 성공한다면 Connection은 유지 될것이며 Timeout이 RCR만큼 발생한 후에 물리적인 연결이 되더라도 통신은 되지않습니다. 이경우 다시 connection을 맺으셔야합니다. 모든 통신에 적당한 주기는 존재하지 않으며 어떤 어플리케이션을 사용하느냐에 따라 다릅니다. 단 최소한의 통신으로 연결을 유지하면 효율적이 겠지요.

  3. Socket의 State가 0x01이라면 ARP 과정 중인 상태입니다. 이 경우 상대방의 Mac 주소를 알아내기위한 과정이며 ARP 과정이 되지 않으면 TCP 통신이 되지않습니다. ARP 응답을 못받는 경우는 다음과 같습니다.

PHY 링크가 아직 잡히지 않은 경우(패킷이 이미 나갔고 응답도 왔는데 Link가 잡히지않아 응답오지 않은 것으로 인식함)
네트워크 연결이 되지 않은 경우(없는 IP 혹은 물리적인 연결이 되지 않음)
MAC 충돌의 경우 (MAC address가 충돌나는 경우 MAC은 네트워크상에 유일해야함)
이외에도 원인이 있을 수 있습니다.

확인 해보시기 바랍니다.

감사합니다.