왜일까?
TCP,UDP에서도 무결성 검사를 위한 체크섬 필드가 존재하고, IP에서도 헤더 헤크섬 필드가 존재.
심지어 링크 레이어단에서도 CRC 체크를 수행.
어플리케이션에서도 (해야 한다면) 무결성을 추가로 검사해야할 이유는?
내가 알아본 바로는..
1. 레이어 별로 자신이 담당하는 구간이 다르기 때문에
가령 TCP,UDP는 프로세스에서 프로세스까지의 서비스를 담당.
링크 레이어는 2계층 노드사이의 서비스를 담당..
구간이 다르므로, 링크 레이어에서 무결성 검사 했다고 이가 프로세스단에서 받은 데이터의 무결성을 보장하는 것은 아님
2. 각 레이어 내의 프로토콜이 꼭 무결성 검사 한다는 보장이 없음
TCP,UDP 말고 4계층 레이어에 또 어떤 프로토콜들이 있는지 당장 생각이 나지 않으나, 레이어들마다 무결성 검사를
꼭 해야할 이유는 없는 것 같음. 필요하면 하는거고 필요 없으면 하지 않아도 되겠지.
따라서 어느 한 레이어에서 무결성 검사가 필요하다면 다른 레이어에서 하든 말든, 무결성 검사를 하는게 맞다고 봄.
예전에 랜 케이블 자체도 많이 불안정했었던 시절에는 데이터 링크 계층에서부터 다 무결성을 꼼꼼하게 검증했었는데, 이제는 워낙 매체가 발달해서 제대로 전송이 안되는 경우가 드무니깐 데이터 링크 계층에서는 잘 체크를 하지 않음. 그러니까 이런 거임. 동전을 주머니에 넣고 동전이 잘 있나 한 걸음 걸을 때마다 체크하는 거랑, 목적지에 다 와서 체크하는 거랑
비교해 보면 뭐가 더 빠르겠음? 당연히 후자임.
저수준 계층에서 체크를 잘 안해주는 건 그만큼 통신의 매체가 좋아져서 더 이상 체크를 할 필요는 없어졌다고 판단해서 잘 하지 않는 거.
데이터 링크 계층에서 체크하면 라우터 통과할 때마다 각 라우터에서 다 하지만, 전송 계층 위에서 하면 해당 목적지의 해당 프로그램에서만 검증하게 되니까.
ㅅㅅㅅ//흠.. 링크레이어에서 다 해주고 있는줄 알았는데 잘 안한다니.. 근데 TCP에서 무결성을 검사해준다면 가령 주머니에 넣은 동전을 아파트까지 와서 확인했는데(transport단이라면) 다시 집에 와서도 확인할 필요가(application단이라면) 있음? 이 구간에서 값이 달라질 확률이라던지, 보안적으로 문제가 발생할 소지가 높다고 할 수 있나..
단순히 전송 오류라면 걱정할 필요가 없다. UDP의 경우엔 무결성을 보장하지 않지만 TCP는 해주니깐. 근데 그 때문에 하는 게 아냐. 애플리케이션 단이라면 분명히 표현 계층보다도 위일텐데. 암호화를 표현 계층에서 하니깐. 해커가 중간에 패킷을 조작해서 보낸다고 했을 때, TCP나 데이터 링크 계층 체크섬을 다시 계산해서 보내주는 건 간단해.
하지만 응용 단에서 체크하면 암호화까지 완벽하게 뚫어야 하니깐 (암호화를 안 뚫어도 특정 자리의 비트만 반전시킨다든가 해서 원하는 내용을 조작할 수도 있거든 - WEP의 예에서처럼) 보안 측면에서의 무결성이 보장되는 거다.
즉, 해커가 표현 계층을 뚫지 않으면 응용 단의 무결성 체크를 우회할 수 없기 때문에 응용 단에서 한 번 더 체크하는 거다. 보안의 목적이야. 전송 오류 감지가 아니라.
불론 UDP 위에서 도는 프로토콜이라면 전송 오류의 목적도 있을 순 있지.
데이터 링크 레이어에서는 잘 안 해주지만 TCP라면 해준다. 내 쩌 위의 덧글들 듣고 오해 없도록.
데이터 링크 레이어에서 체크섬 기능이 있는 건 옛날 랜 케이블 후지던 시절에나 꼼꼼하게 검증했던 부분이고 매체가 발달한 이젠 잘 안하지. 전송 오류 무결성 체크 책임을 그 윗 레이어에 맡겨버린 거.
ㅅㅅㅅ//그렇네.. 전송계층에서 암호화를 하지 않는 이상 전송계층에서 커버하는 구간에서는 값이 얼마든지 조작될 수 있겠네.. 이해됐음
두서 없게 써서 덧글이 매우 많아졌는데 요약할게. 1. 더 이상 데이터 링크 계층에서는 전송 오류 감지를 하지 않음. 상위 계층에 맡긴 거. 2. 응용 계층에서 체크섬을 한번더 검증하는 건 보안의 이유. 표현 계층에서 암호화가 진랭되는데 응용 계층에서 체크섬을 검증하면 체크섬도 같이 암호화가 되어 확실한 무결성이 보장됨.
레이어별로 실제 에러율, 가격, 정치변수 통계 내서 걸맞는 무결성 코드 집어 넣으면 되겠지. 그러나 기술은 계속 발전하니까 언젠가는 에러율도 변하겠지. http 프로토콜인가도 변종 나오고 그랬잖아.
그리고 데이터 링크 레이어에서 전송 에러를 무조건 잡아내는 것도 지금 생각해 보면 문제가 있음. 일반 프포그램 데이터라면 100프로 무결성이 보장되어야 하지만 영상 데이터는 완전한 무결성이 보장되지 않아도 되거든. 즉 무결성을 체크하지 않아줬르면 하는 경우도 있어. 그래야 전송이 빠르니깐. 그래서 함부로 안하는 거야 데이터 링크 계층에서.
윗 레이어에 맡긴 건 그런 거다. 전송 계층이라는 이름에 걸맞게 전송에 대한 문제는 거기서 책임 져라. 뭐 이런 거지.
12//던지->든지