2013-01-08 2 views
-1

소켓을 통해 메시지를 전송하는 동안 메시지 순서가 올바른지 확인하는 방법은 무엇입니까? 따라야 할 구체적인 디자인이 있습니까? 몇 가지 방법을 제안하십시오 ...소켓 오류 발생시 메시지 순서가 올바른지 확인 하시겠습니까?

+0

질문이 명확하지 않습니다. 무슨 순서를 고려하고 있니? –

+0

어떤 종류의 소켓과 연결/프로토콜을 사용하고 있습니까? TCP over IP는 연결 지향적이며 올바른 순서를 유지해야합니다. 그러나 그것은 당신이하고있는 일과 당신이 그것을 어떻게 사용하고 있는지에 달려 있습니다. –

+0

TCP (사용자 고유의 메시지 경계 포함) 또는 SCTP를 사용 하시겠습니까? – harold

답변

0

TCP는 보낸 순서대로 데이터를 전달합니다. UDP는 그렇지 않습니다. 매우 드문 TCP 오류가 발생하는 오류가있는 경우 다시 시작해야합니다. UDP는 전달을 보장하지 않으므로 재전송을 요청하고 시퀀싱을 적용하려면 프로토콜을 추가해야합니다. TCP를 사용하거나 자체 시퀀스 검사를 수행하십시오.

1

TCP 소켓 인 경우 드롭 된 패킷 등에 대한 지원이 자동으로 TCP 스택에 내장됩니다. 패킷을 잃어 버리면 패킷이 다시 보내지기 때문에 잠깐 동안 블리핑 될 수 있다는 점을 제외하고는 아무 것도 할 필요가 없습니다. 이것은 항상 발생합니다. 아무도 알려주지 않습니다 (스위치를 쓴 사람 제외).

완전히 끊어진 연결을 처리하려는 경우 : 이는 프로토콜에 따라 다릅니다. 메시지 당 요청/응답을 수행하는 경우에는 간단하지만 대기 시간이 많이 소요됩니다. 일부 프로토콜은 요청/응답 측면에서 완전히 독립적으로 작동합니다 (요청을 보낼 때마다 응답하지 않습니다. 요청을 계속 보내면 나중에 어떤 시점에서 응답이 돌아옵니다). 그 설정에서 주변을 디자인해야합니다 : 어쩌면 마지막으로 으로 알려짐 응답이지만, 이는 여전히 청각 장애없이 처리되었을 수도 있음을 의미합니다. 따라서 모든 작업을 안전하게 반복 할 수 있기를 원할 수 있습니다. 따라서 작업을 보냈지 만 다시 완료 할 수 있는지 여부는 알 수 없습니다.

UDP를 사용하는 경우 대답은 "완전히 당신, 문제입니다, 알아 내야합니다."는 대개 각 패킷에 시퀀스 번호를 삽입하는 것을 의미합니다. 물론 UDP를 사용하고 있다면 패킷을 버려두고 패킷을 허용하고 곧 재시작하는 것이 좋습니다.

관련 문제