때때로 내 네트워킹 라이브러리에서 패킷을 보낼 때 데이터가 내가 보냈을 때와 다르게 도착합니다. 나는 TCP가 정확한 전달을 보장한다고 가정했습니다. 이것이 사실입니까? 아니면 제가 만든 라이브러리 코드를 패키징하고 받는 과정에 뭔가 문제가 있는 걸까요?
답변1
TCP는 개별 패킷 수준에서 데이터의 정확한 전달을 보장하지 않습니다.
대신 TCP는 수신자가 확인해야 하는 모든 패킷의 헤더에 시퀀스 번호와 체크섬을 포함하여 데이터의 무결성을 확인하는 프레임워크와 패킷이 전혀 도착하지 않을 때 수신자가 보낸 사람에게 패킷을 재전송하도록 요청할 수 있는 메커니즘을 제공합니다. 또는 체크섬이 실패합니다.
답변2
체크섬을 일치시키십시오. 일치하지 않으면 데이터가 전송된 후 대상에 도달하기 전에 무언가 또는 누군가에 의해 데이터가 변경될 가능성이 있습니다. MITM 같은 것 말이죠. 발신자와 수신자 모두에서 가능합니다.