바이트중심 프로토콜에서의 SYN SYC STX...

gurumong의 이미지

데이터링크 계층에서 사용되는 문자 중심의 프로토콜에서는
데이터 프레임이 SYN SYN STX ........ETX CRC 등으로 구성되는것으로 알고있습니다

STX는 데이터의 시작, ETX는 데이터의 끝, CRC는 오류검사를 위해서 필요한것인데
2개의 연속되는 SYN(동기문자)에 대해서는 필요성을 잘 모르겠습니다

책에서는 새로운 프레임의 도착을 알리고 송신장치와의 타이밍을 맞추기 위해
수신장치에 의해서 사용되는 비트 패턴을 제공한다 라고 책에 나와있는데요

프레임의 시작을 알리기 위해서는 SYN 없이 곧장 STX로 시작하는것으로 충분한것같고
동기화 문제는 이미 1계층에서 수행을 하니까 필요없는것 같은데요

같은 이유로 이더넷 프레임에서도 처음 7바이트의 1010101패턴을 가진 프리앰블에 대해서도 필요성을 잘 모르겠습니다

어려운 내용은 아닌거 같은데
책에는 그 이상 자세히 나와있지 않고 웹서칭을 해보아도 나오질 않으니 답답합니다

chadr의 이미지

어떤 프로토콜을 보고 계시는지요? 대부분 데이터링크에서 가장 많이 쓰이는 프로토콜은 HDLC이고 이 프로토콜의 구조는 다음과 같습니다.

|Flag(8bits)|Address(8bits)|Control(8 or 16bits)|Information(Variable)||FCS(16 or 32bits)|Flag(8bits)|

여기서 FCS가 crc와 같은 에러 체크 데이터가 들어갑니다.

책에 syn에 해당하는 Flag가 두개 들어간건 한개의 프레임이 끝나고 다음 프레임이 바로 시작하는 것을 가정하고
그렇게 해놓은게 아닐까 하는 생각이 듭니다.

~~이전프레임데이터|Flag(8bits)|Flag(8bits)|현재프레임데이터~~~

이렇게 말이지요.

프로토콜에서 앞뒤에 Flag를 두는 이유는 프레임의 전체 크기가 프레임에 포함되지 않았기 때문입니다. 일반적으로
tcp/ip로 어플단에서 구현하는 프로토콜은 사이즈를 헤더에 넣지요. 따라서 앞뒤에 반드시 Flag가 붙어야하며 이 Flag는
절대 Flag사이에 나타나는 비트패턴이 아닌 값이 들어갑니다.(이 기법은 bit stuffing을 사용하여 구현합니다.)
이게 있어야지만 새로운 프레임의 도착을 알아낼수 있고 송신장치가 현재 어떤 비트패턴(Flag인지 아니면 그 사이에 있는 데이터인지)을
보내는지 구분이 가능합니다. 따라서 Physical 계층에서 수행하는 동기화하고는 다릅니다. Physical에서 수행하는 동기화는 그 계층에서 다루는 비트 하나하나에 대한 동기화를 다룹니다. 즉.. 하드웨어레벨에서 전기적 레벨을 언제 읽어야지만 정확한 비트 패턴을 읽을수 있는지에 대한 타이밍을 동기화 하기 위한 것이지요. (이 방법 또한 여러가지 인코딩 방식을 써서 해결합니다.)또한 여기서는 단위가 비트이므로 비트간에 수행합니다.
하지만 데이터링크에서는 이런 비트단위가 아닌 프레임단위로 동기화를 하는게 다릅니다.

이런 측면에서 이해를 하시면 이더넷 프레임에서 프리엠블, 포스트엠블 비트패턴에 대해서도 이해하실 수 있을 겁니다.
-------------------------------------------------------------------------------
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.

gurumong의 이미지

BSC프레임(바이트 기반)
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│S│S│S│ │ │ │ │ │ │ │ │E│ B │
│Y│Y│T│   ..Data..    │T│ C │
│N│N│X│ │ │ │ │ │ │ │ │X│ C │
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
이더넷프레임
┌────────┬───┬───────┬────────┬──────────┬────────────────┬───┐
│Preamble│SFD│Des add│Sour add│Length PDU│Data and Padding│CRC│
└────────┴───┴───────┴────────┴──────────┴────────────────┴───┘

2계층에서의 타이밍이란 프레임과 프레임간의 구별을 의미하는것이고
SYN(2개x1바이트), Preamble(7바이트)로 긴것은 프레임 내부에 같은 데이터가 나올 확률을 줄이기 위한것인가요?
이해가 된거 같습니다

그런데 다른 어떤것들은 꼭 필요한것으로 생각되는데
그 뒤에 항상 곧장 따라오는 STX(시작문자) 또는 SFD(시작프레임 지시기)는 왜 필요한것인가요?
2개의 SYN 또는 Preamble로 프레임의 동기화가 이루어졌다면
"여기에서부터 프레임이 시작된다~ 이후에 헤더 정보가 따라온다" 등의 의미를 가진 STX, SFD는 불필요한것이 아닌가요?

chadr의 이미지

http://en.wikipedia.org/wiki/Binary_Synchronous_Communications

좀더 찾아봤습니다. 대략 앞에 sync가 두개 오는 경우는 정확한 시작 위치를 찾기 위함입니다.

All of these frame formats begin with at least two SYNC bytes. The binary form of the SYNC byte has the property that no rotation of the byte is equal to the original. This allows the receiver to find the beginning of a frame by searching the received bit stream for the SYNC pattern. When this is found, tentative byte synchronization has been achieved. If the next character is also a SYNC, character synchronization has been achieved.

처음 sync가 오면 프레임이 시작된다는걸 가정하는 것이고 다음 sync가 오면 실제로 프레임 시작으로 간주 합니다.
즉 두개가 쌍으로 와야지만 정상적인 프레임으로 간주합니다. 하나만 오는 비트패턴은 어디선가 쓰거나 아니면 좀더 확실하게
구분하기 위함이 아닐까 합니다. 하드웨어에서 노이즈가 껴서 아주 우연찮게 정상 데이터가 sync로 변질 되는 경우를 검출 하기 위함으로 보입니다.

그리고 stx와 sfd는 아래 bushi님이 설명해주신 대로 sync또는 프리엠블과 crc또는 포스트엠블 사이에 여러개의 메시지 또는 데이터가 들어갈 때 서로간 구분을 위한 것입니다.

-------------------------------------------------------------------------------
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.

keke111의 이미지

신호에 잡음이 탈경우 인식하지 못하게 하기 위해서 입니다.

이런것은 rf쪽이 굉장히 심한데 rf가 잡음이 잘타기 때문이지요.
유선이라도 잡음이 타기 때문에 방지해야 합니다.

그러니깐.. stx와 etx가 붙은 상태에서 프리엠블이 붙었다고 생각하시면 됩니다.

bushi의 이미지

아무래도 HDLC 에 대해 찾아서 읽어보시는 게 좋을 것 같습니다.
번호는 잊었지만 RFC 중에 있습니다.

언급하신 예를 좀 더 확장해서 예를 들면
SYN STX ... ETX STX ... ETX CRC SYN
처럼 될 수도 있습니다.
이것을 data link 의 관점에서 보면
SYN payload CRC SYN
에 불과합니다.
frame 의 payload 에 어떤 데이타가 있는 지는 data link 의 관심 밖입니다. (HDLC 에선 escape sequence 정도가 고작입니다)
이 말은
SYN STX ... ETX STX ... CRC SYN
SYN STX ... CRC SYN
SYN ... ETX CRC SYN
SYN ... CRC SYN
같은 상황도 얼마든 가능하다는 뜻입니다.

application 은 자기 protocol 에 맞춰 구조화 된 데이타를 data link 로 밀어넣고,
data link 를 담당하는 놈은 받은 것을 queue 에 보관하다가 link 가 가용하게 됐을 때
queue 에 있는 데이타로 보낼 수 있는 만큼만 frame 을 만들어 보내면 그만입니다.
받는 쪽에선 역으로 진행되겠죠.

OTL

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.