通訊協定中的轉義符,通訊協定轉義符

來源:互聯網
上載者:User

通訊協定中的轉義符,通訊協定轉義符
通訊協定中的轉義符
作用:在通訊協定中用在協議中使得通訊的內容更加安全可靠。
舉例說明:假設現在需要定製一個通訊協定,需要的最基本的就是一個幀頭和幀尾的標誌,因為通訊的接收方才知道什麼時候是通訊的開始和結束。那麼假設幀頭(通訊的開始)為0x02(也可以是其他),幀尾為0x03(也可以是其他),粗略的一看是沒有問題的,但是試想如果在幀頭和幀尾的中間資料出現0x02或者0x03的時候整個通訊過程將會被破壞掉,因為本來一幀資料還沒有傳輸完成,接收方誤以為接收到幀頭或者幀尾就會重新開始接收資料(導致前面已經接收的資料丟失)或者結束接收資料(導致後面的資料無法接收)。理論上來講幀頭和幀尾無論定義為什麼字元都會可能出在通訊資料中,因為我們不應該對使用者傳輸的通訊資料做出任何的假設。那麼如何解決這個問題呢?逸出字元就是用來解決這個問題的,先看下面的這張圖片:

這張圖片中再加入了一個字元即0x1B,這個字元被定義為逸出字元(也可以設定為別的),加入這個字元後的傳輸過程變為,0x02+使用者資料+0x03,但是在使用者資料中如果出現0x02即被替換為0x1B+0xE7,如果出現0x03即被替換為0x1B+0xE8,這樣使用者資料中就絕不會再出現0x02和0x03。但是萬一使用者要傳輸的資料就是0x1B+0xE7呢?這也沒有關係,因為如果使用者要傳輸的0x1B也會被轉義為0x1B+0x00,所以假設使用者真的需要傳輸0x1B+0xE7的話也被0x1B+0x00+0xE7所替代,也不會造成幹擾。這樣做的結果是在接收端如果接收到逸出字元,就必須要判斷下一個字元是否為特定的三個值,如果是特定的三個值就需要做特殊處理,這就是逸出字元解決通訊中防止通訊錯誤的原理。
PPP點對點通訊協定 (PPP)中 非同步鏈路中0x7d用作逸出字元時的過程

After FCS computation, the transmitter examines the entire frame
between the two Flag Sequences. Each Flag Sequence, Control Escape
octet, and any octet which is flagged in the sending Async-Control-
Character-Map (ACCM), is replaced by a two octet sequence consisting
of the Control Escape octet followed by the original octet
exclusive-or'd with hexadecimal 0x20.

This is bit 5 complemented, where the bit positions are numbered
76543210 (the 6th bit as used in ISO numbered 87654321 -- BEWARE
when comparing documents).

Receiving implementations MUST correctly process all Control Escape
sequences.

On reception, prior to FCS computation, each octet with value less
than hexadecimal 0x20 is checked. If it is flagged in the receiving
ACCM, it is simply removed (it may have been inserted by intervening
data communications equipment). Each Control Escape octet is also
removed, and the following octet is exclusive-or'd with hexadecimal
0x20, unless it is the Flag Sequence (which aborts a frame).
參考資料:www.ietf.org/rfc/rfc1662.txt
 
c中什叫轉義符

逸出字元是C語言中表示字元的一種特殊形式。通常使用逸出字元表示ASCII碼字元集中不可列印的控制字元和特定功能的字元,如用於表示字元常量的單撇號( '),用於表示字串常量的雙撇號( ")和反斜線( \)等。逸出字元用反斜線\後面跟一個字元或一個八進位或十六進位數表示。

逸出字元 意義 ASCII碼值(十進位)
\a 響鈴(BEL) 007
\b 退格(BS) 008
\f 換頁(FF) 012
\n 換行(LF) 010
\r 斷行符號(CR) 013
\t 水平製表(HT) 009
\v 垂直製表(VT) 011
\\ 反斜線 092
\? 問號字元 063
\' 單引號字元 039
\" 雙引號字元 034
\0 Null 字元(NULL) 000
\ddd 任一字元 三位八進位
\xhh 任一字元 二位十六進位

字元常量中使用單引號和反斜線以及字元常量中使用雙引號和反斜線時,都必須使用逸出字元表示,即在這些字元前加上反斜線。
在C程式中使用逸出字元\ d d d或者\ x h h可以方便靈活地表示任一字元。\ d d d為斜杠後面跟三位八位元,該三位八位元的值即為對應的八進位A S C I I碼值。\ x後面跟兩位十六進位數,該兩位十六進位數為對應字元的十六進位A S C I I碼值。

使用逸出字元時需要注意以下問題:
1) 逸出字元中只能使用小寫字母,每個逸出字元只能看作一個字元。
2) \v 垂直製表和\f 換頁符對螢幕沒有任何影響,但會影響印表機執行響應操作。
3) 在C程式中,使用不可列印字元時,通常用逸出字元表示
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.