W5500 dhcp & tcp 두번째 문의

안녕하세요. 답변해주신 내용 감사합니다.

추가적으로 문의 내용이 있어서 작성합니다.

  1. 답변 내용에 보면 메인 루틴에서 DHCP_run() 함수를 계속 돌려야 한다고하셨는데 그에 대하여 특별한 이유가 있는것인가요??
    네트워크가 중간에 끊어지거나 그런 경우를 위해서 DHCP_run을 계속 접속하는것인지요??
  2. DHCP_run을 이용하여 IP 할당을 받은 이후 그 이후 Flow가 맞는지요?
    2.1 socket(SOCK_TCPS,Sn_MR_TCP,5000,0x00); 정상적으로 연결될때 까지 계속 함수 콜.
    2.2 connect(SOCK_TCPS,연결 IP, 연결 포트); 정상적으로 연결될때 까지 계속 함수 콜.
    2.3 임의 적으로 recv 함수나 send 함수를 이용하여 데이터 Tx/Rx 전송
    2.4 Tcp/IP 연결 이후 소켓까지만 연결 유지. dhcp_run 에서 에러가 떨어지면 다시 연결 시도하여 정상 연결되면 socket부터 다시 연결
  3. DHCP_run으로 서버와 잘 연결하다 끊어지는 경우 그냥 다시 해당 함수만 콜해서 DHCP 연결을하면 되는것인가요?
    아니면 리셋을 다시 시킨 후 DHCP_init 부터 다시 함수를 콜해줘야 하는것인가여??
  4. DHCP_init에서 사용된 소켓 넘버와 그 이후 tcp/ip의 socket에서 사용될 소켓 번호가 동일해야 하는건가여? 아니면 다른 번호로 해야 하는가요?

답변으로 인하여 많은 도움이 되고 있습니다. sample 소스 링크는 계속 열리지가 않네요…

위 사항에 대하여 답변 기다리겠습니다. 감사합니다.

안녕하세요.

위즈네트 방보현 연구원입니다.

DHCP는 IP를 서버로 부터 가져오는 개념이 아니라 서버가 임대해 주는 개념입니다.

서버마다 다르긴 하지만 엄연히 임대 시간도 존재합니다.

그리고 DHCP 클라이언트는 임대 시간의 50%와 85%에 IP를 계속 사용해도 되는지 서버에 문의해야 하고 임대 시간을 갱신합니다.

또한 DHCP_run() 함수는 DHCP의 각 단계에 따라 실행되는 switch case로 구성되어 있습니다.

그러므로 DHCP_run을 실행하지 않으면 임대기간이 끝나거나 새로운 IP할당이 필요할 때 IP를 할당받지 못합니다.

다만 DHCP_run() 함수로 인한 MCU의 자원 소모가 싫으시다면 DHCP로 IP를 할당받은 이후 임대 시간의 50%가 되었을 때 임대 시간을 갱신하는 코드와 link가 떨어졌다가 다시 붙었을 때 DHCP로 새로운 IP를 할당받을 수 있는 코드를 별도로 작성하셔야 합니다.

그리고 IP를 정상적으로 할당받은 이후 TCP client를 구현하신 것 같은데 그 부분은 크게 문제가 보이지 않습니다. 다만 socket은 에러가 없지 않는 한 계속 열 이유가 없습니다.

그리고 dhcp 소켓 번호와 tcp 소켓 번호는 지금과 같은 방식에서는 다른 번호를 사용하셔야 합니다.

socket은 각각의 프로그램이 소통하기 위한 end point입니다. DHCP와 TCP는 다른 종류의 프로그램이므로 동시에 같은 소켓으로 돌릴 수 없습니다.

다만 아까 말씀드린 바와 같이 DHCP에 할당된 소켓이 아까우시면 IP할당 이후 별도로 소켓을 여는 프로그램을 하셔야 합니다.

더 궁금하신 점이나 이해가 가지 않는 점이 있으시면 리플달아주세요.

수고하세요.