| [ CnUnix ] in KIDS 글 쓴 이(By): guest (guest) <210.118.25.130> 날 짜 (Date): 2003년 4월 15일 화요일 오후 12시 57분 35초 제 목(Title): udp 데이터 손실 제목에서 대충 짐작을 하셨겠지만... udp 로 간단한 데몬 프로그램을 만들어 봤는데... 특정 상황에서 반복적으로 데이터 손실이 발생을 합니다. 데몬이 약 10분 정도 서비스 요청 없이 대기 상태로 block 되어 있으면 이때 보내지는 처음 2개의 데이터를 거의 대부분 손실을 합니다. 물론 시차가 거의 없이 반복적으로 데이터를 보내면 손실이 거의 없습니다. Linux (RedHat 8.0)에서 개발하여 Sun(SunOS 5.7), HP(HP-UX 11), Compaq alpha (OSF/1 V5.1) 으로 포팅을 해서 테스트를 하고 있는데 Linux 만 빼고 다른 3개의 플랫폼에서 동일한 증상이 나타납니다. 프로그램 상의 오류인지 udp가 원래 그런 것인지 알 수가 없네요. 모든 플랫폼이 LAN 으로 연결 되어 있는데 udp 에서 이정도의 데이터 손실이 있다는 것이 이해가 안갑니다. 고수님들의 견해는 어떤지... 추가로 프로그램과 테스트를 한 결과를 말씀 드리면... 데몬은 간단히 udp 소켓을 open 한 후에... for (;;) { ret = recvfrom (...); /* Data 처리 */ } 반복적으로 데이터를 기다리다가 받아서 처리하는 전형적인 데몬입니다. 클라이언트는 소켓을 open 하여 약 50 바이트의 데이터를 5번 정도 sendto() 를 하는 테스트 프로그램이고, 이때 1,2 번째 sendto() 한 데이터가 손실이 됩니다. 클라이언트는 주로 Linux 에서 실행을 했고 Linux 테스트를 위해서는 Sun 에서 실행을 했습니다. 약 20분 간격으로 계속적으로 클라이언트를 실행 시켜 테스트한 결과가... (비교를 위해서 같은 프로그램에서 소켓만 unix domain datagram socket 으로 open 하여 테스트도 해보았습니다.) Linux : udp, unix 모두 손실 없음 Sun : udp 의 경우 198회 중 191회 1,2 데이터 손실 (unix 손실 없음) HP : udp 의 경우 198회 중 196회 1,2 데이터 손실 (unix 손실 없음) Compaq : udp 의 경우 198회 중 186 회 1,2 데이터 손실 (unix 손실 없음) Compaq 의 경우에는 순서가 뒤바뀌는 경우도 약 30회 발생하더군요. 휴일에 프로그램을 돌려 놓았으니 LAN 의 로드나 기계 자체의 로드도 거의 없었을 것입니다. 제가 tcp 경험만 있고, udp 는 처음인데 원래 이런 것인지 아니면 제가 모르는 무엇이 있는 지 궁금합니다. 비슷한 경험이 있는 분들의 조언을 부탁 드립니다. |