OSI참조모델에서 오류제어는 왜 두군데에서 수행하는것일까요?

gurumong의 이미지

OSI참조모델에서 오류제어는 왜 데이터링크(2계층)와 전송(4계층) 두군데에서 수행하는것일까요?

데이터링크 계층은 인접 노드와의 오류없는 전송을 책임지고
전송 계층은 종단 대 종단간의 오류없는 전송을 책임진다고 알고있습니다

그런데 논리적으로 인접한 노드와의 전송에 오류가 없다면
자연히 종단 대 종단간에도 오류가 없다는게 보장되는게 아닌가요?
도무지 책의 설명을 봐서는 이해가 가질 않습니다

또 한가지 궁금한것이 있는데요
TCP프로토콜은 양단간의 연결을 먼저 맺는것으로 알고있는데요
연결을 왜 맺어야하는지에 대해서 이해가 가질 않습니다 ㅜ.ㅜ
책에서는 신뢰성을 보장하기 위해서라는데
신뢰성이라는것이 오류제어를 하는것과 하지 않는것에 대한 내용이 아닌가요?

꽤 진도가 많이 나갔는데
어떻게 책의 가장 앞쪽에 있는 이런 기초적인 부분이 이해가 안되는지 답답하네요;;

chadr의 이미지

1. 두 계층에서 에러를 체크 하는 이유는 데이터링크에서 에러를 체크해도 오류가 발생할수 있기 때문입니다.
간단히 생각하면 이렇습니다. 데이터링크에서 에러 체크는 crc가 많이 쓰이는데 이를 이용해서 에러를 100% 잡을수 없습니다.
이게 가장 큰 문제입니다. 그렇기 때문에 신뢰성을 확보하기 위해 전송층에서 한번 더합니다. UDP와 TCP의 신뢰성 문제를 보시면
아실수 있습니다. 사실 이래도 100% 못잡습니다. 그래서 큰 iso같은 파일의 경우에는 md5나 sha같은 해시값을 제공합니다.

어안이 벙벙하실지 모르나(tcp는 반드시 신뢰성을 보장한뎄는데..) 사실이 이렇습니다. 이렇게 두세번 체크를 하기 때문에 최종
어플로 전달되는 데이터의 에러 확률이 확 떨어질 뿐 100% 없다고는 못합니다. 그렇기 때문에 토런트같은 프로그램을 보시면
세그먼트당 에러체크를 하는걸 볼수 있습니다. 한번 더 해서 확률을 더 떨구는 것이지요. 그런다고 해서 이것도 100%는 절대 안됩니다.

하지만 일반적인 경우 tcp는 충분히 낮은 에러 확률을 보장해 줍니다. 그래도 불안하시면 한번 더 하시면 됩니다.

2. tcp에서 연결을 맺는 이유중 신뢰성은 보안측면도 있습니다. udp의 경우에는 특정 아이피로 특정 포트로 그냥 데이터를 보낼 수 있고 그 포트를 listen하는 어플은 아무런 보호장치 없이 그냥 데이터를 받게 됩니다. 하지만 tcp는 초기 연결시 윈도우 값을 주고 받습니다. 이로써 어느정도 보안은 보장해줍니다. tcp의 윈도우잉은 보시는 책에 아마 나와있을것입니다.

그리고 연결을 맺음으로써 서로간에 데이터를 주고 받을수 있다는걸 명시적으로 확인하므로 반드시 데이터가 서로 보낸게 도달한다는 것을 보장할수 있습니다. 연결이라는 것을 유지하고 있기 때문에 보낸 데이터가 도달이 불가능할 경우 끊김이 발생하고 어플이 이 상태를 알아낼수 있습니다. 이것이 신뢰성입니다. 대신 udp는 연결이라는 것이 없으므로 데이터가 상대방에 정상적으로 도달을 했는지 알아낼 방법이 없습니다. 그래서 신뢰성이 없다고들 합니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.