rfc1055_在串行線路上傳輸ip數(shù)據(jù)報的非標(biāo)準(zhǔn)協(xié)議 _第1頁
已閱讀1頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  組織:中國互動出版網(wǎng)(http://www.china-pub.com/)</p><p>  RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm)E-mail:ouyang@china-pub.com</p><p>  譯者:王安鵬(anpengwang anpengwang@26

2、3.net)</p><p>  譯文發(fā)布時間:2001-5-23</p><p>  版權(quán):本中文翻譯文檔版權(quán)歸中國互動出版網(wǎng)所有??梢杂糜诜巧虡I(yè)用途自由轉(zhuǎn)載,但必須保留本文檔的翻譯及版權(quán)信息。</p><p>  Network Working Group J. Romkey<

3、;/p><p>  Request for Comments: 1055 June l988</p><p>  在串行線路上傳輸IP數(shù)據(jù)報的非標(biāo)準(zhǔn)協(xié)議</p><p>  (RFC1055 A NONSTANDARD FOR TRANSMISSION OF IP DATAGRAMS OVER S

4、ERIAL LINES: SLIP)</p><p><b>  目錄</b></p><p><b>  簡介1</b></p><p>  歷史(HISTORY)1</p><p>  可用性(AVAILABILITY)2</p><p>  協(xié)議(PROTOCOL

5、)2</p><p>  缺陷(DEFICIENCIES)2</p><p>  SLIP驅(qū)動程序(SLIP DRIVERS)3</p><p><b>  簡介</b></p><p>  TCP/IP協(xié)議組運(yùn)行在各種各樣的網(wǎng)絡(luò)媒介上:IEEE 802.3(以太網(wǎng))和802.5(令牌環(huán))局域網(wǎng)(LAN)、X.25

6、線路、衛(wèi)星鏈路以及串行線路。其中許多網(wǎng)絡(luò)已經(jīng)有IP分組的標(biāo)準(zhǔn)封裝格式,但沒有用于串行線路的標(biāo)準(zhǔn)。SLIP(串行線路IP)目前已成為事實(shí)上的標(biāo)準(zhǔn),廣泛地用于在點(diǎn)對點(diǎn)串行連接上運(yùn)行TCP/IP。這并不是一個Internet標(biāo)準(zhǔn),本備忘錄的發(fā)布不受限制。</p><p>  歷史(HISTORY)</p><p>  SLIP源于80年代初期的3COM UNET TCP/IP實(shí)現(xiàn)。SLIP只是一

7、個分組分幀協(xié)議,僅僅定義了一系列在串行線路上構(gòu)造IP分組的字符。它沒有提供地址、分組類型標(biāo)識、錯誤檢查/修正或者壓縮機(jī)制。因?yàn)檫@個協(xié)議所作的工作這么少,通常很容易實(shí)現(xiàn)。</p><p>  大約在1984年,Rick Adam為4.2Berkeley Unix和Sun Microsystem工作站實(shí)現(xiàn)了SLIP并公之于眾,并作為一種使用串行線路連接TCP/IP主機(jī)和路由器的簡單可靠的方法很快流行起來。</p

8、><p>  SLIP通常專門用于串行連接,有時候也用于撥號網(wǎng)絡(luò),使用的線路速率一般介于1200bps和19.2Kbps之間。SLIP允許主機(jī)和路由器混合連接(主機(jī)-主機(jī)、主機(jī)-路由器、路由器-路由器都是SLIP網(wǎng)絡(luò)通用的配置),因而非常有用。</p><p>  可用性(AVAILABILITY)</p><p>  SLIP可用于大多數(shù)基于Berkeley UNIX

9、的系統(tǒng),并且被包括進(jìn)了Berkeley的4.3BSD標(biāo)準(zhǔn)版。SLIP可用于Ultrix、 Sun UNIX 和大多數(shù)派生自Berkeley的UNIX系統(tǒng)。一些終端集線器和IBM PC的實(shí)現(xiàn)也支持該協(xié)議。</p><p>  Berkeley UNIX的SLIP可以使用匿名FTP從uunet.uu.net上的pub/sl.shar.Z中獲得。確保傳輸?shù)氖嵌M(jìn)制文件,并使用UNIX解壓程序打開它,然后把解開的文件作為

10、UNIX/bin/sh(如/bin/sh sl.shar)的SHELL命令使用</p><p>  協(xié)議(PROTOCOL)</p><p>  SLIP定義了兩個特殊字符:END和ESC。END是八進(jìn)制的300(十進(jìn)制192),ESC不同與ASCII的ESCAPE字符,是八進(jìn)制的333(十進(jìn)制219),本文中的ESC指的是SLIP ESC字符。發(fā)送分組時,SLIP主機(jī)只是簡單地發(fā)送分組數(shù)

11、據(jù)。如果數(shù)據(jù)中有一個字節(jié)與END字符的編碼相同,就連續(xù)傳輸兩個字節(jié)ESC和八進(jìn)制的334(十進(jìn)制220)代替它。如果與ESC字符相同,就連續(xù)傳輸兩個字節(jié)ESC和八進(jìn)制的335(十進(jìn)制221)代替它。分組的最后一個字節(jié)發(fā)出后,再傳送一個END字符。</p><p>  Phil Karn建議稍微修改一下這個算法,分組的開始以及結(jié)束都使用END字符,這樣可以刷掉線路噪聲造成的不正確的字節(jié)。一般情況下接收方將只看到兩個

12、緊挨著的END字符并生成一個壞的IP分組。如果SLIP實(shí)現(xiàn)沒有丟棄長度為0的IP分組,IP實(shí)現(xiàn)就應(yīng)該丟棄。如果存在線路噪聲,接收到的由線路噪聲造成的數(shù)據(jù)將被丟棄,而不會影響后續(xù)的分組。</p><p>  因?yàn)闆]有“標(biāo)準(zhǔn)的”SLIP規(guī)范,也就沒有SLIP分組最大長度的實(shí)際定義。可能最好是接受Berkeley UNIX SLIP驅(qū)動程序使用的最大分組長度:1006字節(jié),其中包括IP頭和傳輸協(xié)議頭,但不含分幀字符。這

13、樣任何新的SLIP實(shí)現(xiàn)都應(yīng)能夠接收1006字節(jié)的數(shù)據(jù)報,在一個數(shù)據(jù)報內(nèi)發(fā)送的字節(jié)數(shù)不應(yīng)超過1006。</p><p>  缺陷(DEFICIENCIES)</p><p>  有幾種特性使許多用戶希望SLIP提供而沒有提供的。公平的講,SLIP只是一個很久以前設(shè)計的非常簡單的協(xié)議,而在當(dāng)時這些問題還并不真正重要。下面是對現(xiàn)有SLIP協(xié)議一般認(rèn)識到的缺陷:</p><p&

14、gt;<b>  地址:</b></p><p>  SLIP連接的兩臺計算機(jī)都必須知道對方的IP地址才能傳輸。另外,在主機(jī)使用SLIP撥號連接一個路由器時,地址設(shè)置可能隨時變化,路由器可能需要通知撥號主機(jī)IP地址的變更。SLIP目前沒有為主機(jī)提供通過SLIP連接交換地址信息的機(jī)制。</p><p><b>  類型標(biāo)識:</b></p&g

15、t;<p>  SLIP沒有類型字段。因此在一個SLIP連接上只能運(yùn)行一個協(xié)議,即使在兩臺運(yùn)行TCP/IP和DECnet的DEC計算機(jī)的配置中,如果使用SLIP,也不可能讓TCP/IP和DECnet同時使用一條連接兩者的串行線路。因?yàn)镾LIP是“串行線路IP”,如果串行線路連接兩臺多協(xié)議計算機(jī),這些計算機(jī)可以在這條線路上使用多個協(xié)議。</p><p><b>  錯誤檢測/修正:</

16、b></p><p>  嘈雜的電話線路可能破壞傳輸中的分組。因?yàn)榫€路速率可能很低(或許是2400波特),重新傳輸分組的代價很高。錯誤檢測在SLIP層并非絕對需要,因?yàn)镮P應(yīng)用程序可以發(fā)現(xiàn)損壞的分組(IP頭部與TCP和UDP的校驗(yàn)和就可以滿足),但是一些通用程序如NFS通常忽略校驗(yàn)和而依賴網(wǎng)絡(luò)媒介檢測損壞的分組。因?yàn)橹匦聜鬏敱痪€路噪聲破壞的分組需要很長時間,如果自身能夠提供某種簡單的糾錯機(jī)制就可以改善SLI

17、P的效率。</p><p><b>  壓縮:</b></p><p>  撥號線路非常慢(通常是2400bps),分組壓縮可以大幅提高分組的吞吐量。通常單純的TCP連接分組流在IP和TCP頭部有幾個很少變動的字段,因而可以使用一種簡單的壓縮算法只發(fā)送頭部變化的部分而不是整個頭部。</p><p>  圍繞著SLIP后繼者的設(shè)計與實(shí)現(xiàn),幾個不同

18、的團(tuán)體已經(jīng)做了一些工作,可能會部分或者全部解決這些問題。</p><p>  SLIP驅(qū)動程序(SLIP DRIVERS)</p><p>  下面的C語言函數(shù)發(fā)送并接收SLIP分組。它們依賴于send_char() 和 recv_char(),這兩個函數(shù)在串行線路上發(fā)送和接收單個字符。</p><p>  /* SLIP 特殊字符編碼</p><

19、;p><b>  */</b></p><p>  #define END 0300 /* 分組結(jié)束標(biāo)記 */</p><p>  #define ESC 0333 /* 填充字節(jié)標(biāo)記*/</p><p>  #define ESC_END 0334 /*

20、ESC ESC_END 表示數(shù)據(jù)字節(jié)END */</p><p>  #define ESC_ESC 0335 /* ESC ESC_ESC 表示數(shù)據(jù)字節(jié)ESC */</p><p>  /* SEND_PACKET: 發(fā)送長“l(fā)en”的分組,起始位置為“p” */</p><p>  void send_packet(p, len)<

21、;/p><p><b>  char *p;</b></p><p>  int len; {</p><p>  /* 發(fā)送一個初始END 字符,清除由于線路噪聲可能堆積在接收方的任何數(shù)據(jù)</p><p><b>  */</b></p><p>  send_char(END

22、);</p><p>  /* 為分組中的每個字符發(fā)送適當(dāng)?shù)淖址蛄?lt;/p><p><b>  */</b></p><p>  while(len--) {</p><p>  switch(*p) {</p><p>  /* 如果與END字符相同,我們就發(fā)送</p><

23、p>  * 兩個特殊字符碼避免接受方認(rèn)為</p><p>  * 我們發(fā)出了END結(jié)束標(biāo)記</p><p><b>  */</b></p><p><b>  case END:</b></p><p>  send_char(ESC);</p><p>  send

24、_char(ESC_END);</p><p><b>  break;</b></p><p>  /* 如果與ESC字符編碼相同,</p><p>  * 我們就發(fā)送兩個特殊字符碼</p><p>  * 避免接受方以為我們發(fā)送了ESC</p><p><b>  */</b&

25、gt;</p><p><b>  case ESC:</b></p><p>  send_char(ESC);</p><p>  send_char(ESC_ESC);</p><p><b>  break;</b></p><p>  /* 否則,我們就發(fā)送字符本身

26、</p><p><b>  */</b></p><p><b>  default:</b></p><p>  send_char(*p);</p><p><b>  }</b></p><p><b>  p++;</b>

27、</p><p><b>  }</b></p><p>  /* 告訴接收方我們已經(jīng)完成分組的發(fā)送</p><p><b>  */</b></p><p>  send_char(END);</p><p><b>  }</b></p>

28、<p>  /* RECV_PACKET: 接收分組并放入地址為“p”的緩沖區(qū),</p><p>  * 如果收到的字節(jié)數(shù)大于len,分組將被截斷</p><p>  * 返回保存在緩沖區(qū)的字節(jié)數(shù)</p><p><b>  */</b></p><p>  int recv_packe

29、t(p, len)</p><p><b>  char *p;</b></p><p>  int len; {</p><p><b>  char c;</b></p><p>  int received = 0;</p><p>  /* 使用循環(huán)讀取字節(jié)直到接受完

30、整個分組</p><p>  * 如果用完緩沖區(qū)就不再復(fù)制</p><p><b>  */</b></p><p>  while(1) {</p><p>  /* 取一個字符進(jìn)行處理</p><p><b>  */</b></p><p>  

31、c = recv_char();</p><p>  /* 如果需要則處理填充字符</p><p><b>  */</b></p><p>  switch(c) {</p><p>  /* 如果是END字符就表示分組完成</p><p><b>  */</b><

32、/p><p><b>  case END:</b></p><p>  /* 一點(diǎn)小小的改進(jìn):如果分組沒有數(shù)據(jù)則忽略掉。</p><p>  *這意味著避免雙END字符構(gòu)成的空分組打擾IP,</p><p>  *這種空分組用于檢測線路噪聲。</p><p><b>  */</b&

33、gt;</p><p>  if(received)</p><p>  return received;</p><p><b>  else</b></p><p><b>  break;</b></p><p>  /* 如果收到ESC字符,則等待</p>

34、<p>  * 下一個字符來決定把什么字符存入分組</p><p><b>  */</b></p><p><b>  case ESC:</b></p><p>  c = recv_char();</p><p>  /* 如果“c”不是這兩個字符中的一個,</p>

35、<p>  * 就違反了協(xié)議。最好的辦法似乎是 </p><p>  * 單獨(dú)保留這個字符并填入分組 </p><p><b>  */</b></p><p>  switch(c) {</p><p>  case ESC_END:</p><p><b>  c = E

36、ND;</b></p><p><b>  break;</b></p><p>  case ESC_ESC:</p><p><b>  c = ESC;</b></p><p><b>  break;</b></p><p><

37、b>  }</b></p><p>  /* 現(xiàn)在到了缺省處理情況,就讓它保存字符</p><p><b>  */</b></p><p><b>  default:</b></p><p>  if(received < len)</p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論