TCP 데이터 전송의 reliability ???
글쓴이: swunk / 작성시간: 수, 2009/07/08 - 12:12오후
TCP로 예를 들어 HTTP의 get으로 2~3메가 정도의 데이터를 메모리에 다운받고, 이를 다시 플래쉬에 write하여 재부팅하는 시스템이 있습니다.
이러한 상황에서 TCP로 다운받은 데이터의 무결성은 보장이 되나요 ? TCP의 체크섬 계산이 CRC 체크만 한다면 일부 값이 변경되어도 CRC 계산에서는 검출이 안될것이고 이를 플래쉬에 그대로 write를 하고 체크섬 계산을 해도 정상으로 결과가 나올것이며 이를 재부팅 시도하면 그때서야 문제가 나오는 상황인것으로 추정되어 문의 드립니다.
즉, TCP로 (HTTP 혹은 FTP 등으로) 다운 받은 데이터의 무결성이 100% 보장되나요 ?
Forums:
100%?
세상에 100%라는 건 없습니다. 불안하면 체크섬 직접 한번 더 하셔야죠.
feanor님 말씀대로
feanor님 말씀대로 md5sum 등의 체크섬을 추가로 한번 더 하시는게 좋겠네요.
Fedora나 Ubuntu iso 파일을 http, ftp로 배포할 때도 md5sum 파일을 같이 올려두잖아요.
그것처럼 원본 파일을 바탕으로 생성한 md5sum 파일을 올려두시고 원본 파일과 md5sum 파일을 받아서
체크하심 될 것 같습니다.
그렇다면 TCP
그렇다면 TCP 레벨에서 서버에서 1000바이트를 보낸것을 클랑이언트네서 1000바이트 다 받았고 체크섬 계산에서 넘어 갔다고 해도, 서버에서 보낸 원본값과 클랑이언트에서 수신한 값이 다를 수 있다는 거네요 ?
즉, TCP 레벨에서 각각의 세그먼트에 대해 체크섬 ok 가 났다고 해서 모든 비트에대해서 reliablity가 보장되는 것은 아닌거네요 ? 그게 맞다면 TCP의 reliable 의 기준은 bit 레벨이 아닌 segment 레벨이다. 정도가 될것이고 segment 내에서 (헤더가 아닌) 데이터의 비트열이 일부 바뀐경우에는 검출이 불가능 하다. 라고 이해하면 될까요 ?
고수님들의 답변 부탁합니다.
Re:
TCP 프로토콜이 그렇게나 unreliable 한 녀석은 아닙니다.;;
물론, 다른 분들이 말씀하신 것처럼 100% 를 보장할 수는 없지만,
99.8% 는 된다고 생각됩니다.
물론, 물리적 연결 상태가 좋지 않다면 문제가 발생할 확률은 그만큼 높아지겠죠.
...
강력했던(?) 해쉬알고리즘인 MD5조차도 안전하지 않고, sha2로 가는게 권고가 된 현실에서,
TCP 체크섬 알고리즘(16비트 체크섬)이 100% 무결성(integrity)을 보장한다고 보기 어렵지요.
TCP의 특성상 플로우 제어, 순서제어등이 파라메터처럼 움직여서, 보다 충돌 확률을 낮출 수 있을 것으로도
예측해 봅니다.
그리고,....
google에서 internet+data+error+rate+TCP+empirical로 검색해서 논의한 내용을 찾아보면,
확률적으로 -7승(1/10,000,000)의 충돌(에러 미검출) 가능성이 있다는 의견이 있습니다.(http://stackoverflow.com/questions/902938/error-rate-in-tcp-checksum) 1비트의 에러라도 검출된다면 재전송에 의해 안전하게 전송되겠지요. 단지, 에러가 아주 교묘하게(?) 발생하여 체크섬 루틴을 우회하는 경우가 생길 수 있는 경우(충돌이란 표현으로 얘기해봅니다)가 문제겠습니다. 사실, 이러한 가능성을 완전하게 배제하기 어렵지만, 이를 예시하는 경우는 거의 보지 못했습니다.
보다, 안전하게 하기 위해서는, 전송하는 파일을 hash함수(sha2?)에 통과시키고 검증하는 루틴을 추가하여, 에러 미검출 가능성을, 낮추어야, 보다 안전할 것 같습니다.
(위에 두분께서 언급하신 내용이지요.)
그리고, 질문자님의 문제가 tcp문제가 아닌, 다른 문제가 아닌지에 대한 가능성도 배제해서는 안된다는 의견입니다.
* 자칫 TCP를 비신뢰적으로 인지하는 분들이 있을까 우려스러워 답변해 봅니다. 처음, 시작하시는 분들은, 기본적으로 TCP는 신뢰적이라는 개념을 가지고 프로그래밍에 입문하셔야 할 것입니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기