㈠ FTP 使用的是什麼協議
FTP(File Transfer Protocol,文件傳輸協議) 是 TCP/IP 協議組中的協議之一。FTP協議包括兩個組成部分。
1、FTP伺服器。
2、FTP客戶端。
其中FTP伺服器用來存儲文件,用戶可以使用FTP客戶端通過FTP協議訪問位於FTP伺服器上的資源。在開發網站的時候,通常利用FTP協議把網頁或程序傳到Web伺服器上。
(1)協議與命令號擴展閱讀
FTP屏蔽了各計算機系統的細節,因而適合在異構網路中任意計算機之間傳送文件。FTP只提供文件傳送的一些基本服務,它使用TCP可靠地運輸服務,FTP主要功能是減小或消除在不同系統下處理文件的不兼容性。
FTP使用客戶端-伺服器模型,一個FTP伺服器進程可以為多個客戶進程提供服務。FTP伺服器有兩大部分組成:一個主進程,負責接受新的請求;還有若干從屬進程,負責處理單個請求。
㈡ 關於51單片機上實現modbus協議
你找一個MODBUS的協議詳細資料好好看看,就是一種通訊約定,你按照它規定的格式通訊就可以了
協議發送給詢問方。 Modbus協議包括ASCII、RTU、TCP等,並沒有規定物理層。此協議定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網路進行通信的。標準的Modicon控制器使用RS232C實現串列的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊採用Maser/Slave方式,Master端發出數據請求消息,Slave端接收到正確消息後就可以發送數據到Master端以響應請求;Master端也可以直接發消息修改Slave端的數據,實現雙向讀寫。 Modbus協議需要對數據進行校驗,串列協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗,但TCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。另外,Modbus採用主從方式定時收發數據,在實際使用中如果某Slave站點斷開後(如故障或關機),Master端可以診斷出來,而當故障修復後,網路又可自動接通。因此,Modbus協議的可靠性較好。 下面我來簡單的給大家介紹一下,對於Modbus的ASCII、RTU和TCP協議來說,其中TCP和RTU協議非常類似,我們只要把RTU協議的兩個位元組的校驗碼去掉,然後在RTU協議的開始加上5個0和一個6並通過TCP/IP網路協議發送出去即可。所以在這里我僅介紹一下Modbus的ASCII和RTU協議。 下表是ASCII協議和RTU協議進行的比較: 協議 開始標記 結束標記 校驗 傳輸效率 程序處理
ASCII :(冒號) CR,LF LRC 低 直觀,簡單,易調試
RTU 無 無 CRC 高 不直觀,稍復雜
通過比較可以看到,ASCII協議和RTU協議相比擁有開始和結束標記,因此在進行程序處理時能更加方便,而且由於傳輸的都是可見的ASCII字元,所以進行調試時就更加的直觀,另外它的LRC校驗也比較容易。但是因為它傳輸的都是可見的ASCII字元,RTU傳輸的數據每一個位元組ASCII都要用兩個位元組來傳輸,比如RTU傳輸一個十六進制數0xF9,ASCII就需要傳輸』F』』9』的ASCII碼0x39和0x46兩個位元組,這樣它的傳輸的效率就比較低。所以一般來說,如果所需要傳輸的數據量較小可以考慮使用ASCII協議,如果所需傳輸的數據量比較大,最好能使用RTU協議。
下面對兩種協議的校驗進行一下介紹。
1、LRC校驗
LRC域是一個包含一個8位二進制值的位元組。LRC值由傳輸設備來計算並放到消息幀中,接收設備在接收消息的過程中計算LRC,並將它和接收到消息中LRC域中的值比較,如果兩值不等,說明有錯誤。
LRC校驗比較簡單,它在ASCII協議中使用,檢測了消息域中除開始的冒號及結束的回車換行號外的內容。它僅僅是把每一個需要傳輸的數據按位元組疊加後取反加1即可。下面是它的VC代碼:
BYTE GetCheckCode(const char * pSendBuf, int nEnd)//獲得校驗碼
{
BYTE byLrc = 0;
char pBuf[4];
int nData = 0;
for(i=1; i<end; i+=2) //i初始為1,避開「開始標記」冒號
{
//每兩個需要發送的ASCII碼轉化為一個十六進制數
pBuf [0] = pSendBuf [i];
pBuf [1] = pSendBuf [i+1];
pBuf [2] = '\0';
sscanf(pBuf,"%x",& nData);
byLrc += nData;
}
byLrc = ~ byLrc;
byLrc ++;
return byLrc;
}
2、CRC校驗
CRC域是兩個位元組,包含一16位的二進制值。它由傳輸設備計算後加入到消息中。接收設備重新計算收到消息的CRC,並與接收到的CRC域中的值比較,如果兩值不同,則有誤。
CRC是先調入一值是全「1」的16位寄存器,然後調用一過程將消息中連續的8位位元組各當前寄存器中的值進行處理。僅每個字元中的8Bit數據對CRC有效,起始位和停止位以及奇偶校驗位均無效。
CRC產生過程中,每個8位字元都單獨和寄存器內容相或(OR),結果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預置的值或一下,如果LSB為0,則不進行。整個過程要重復8次。在最後一位(第8位)完成後,下一個8位位元組又單獨和寄存器的當前值相或。最終寄存器中的值,是消息中所有的位元組都執行之後的CRC值。
CRC添加到消息中時,低位元組先加入,然後高位元組。下面是它的VC代碼:
WORD GetCheckCode(const char * pSendBuf, int nEnd)//獲得校驗碼
{
WORD wCrc = WORD(0xFFFF);
for(int i=0; i<nEnd; i++)
{
wCrc ^= WORD(BYTE(pSendBuf[i]));
for(int j=0; j<8; j++)
{
if(wCrc & 1)
{
wCrc >>= 1;
wCrc ^= 0xA001;
}
else
{
wCrc >>= 1;
}
}
}
return wCrc;
}
對於一條RTU協議的命令可以簡單的通過以下的步驟轉化為ASCII協議的命令:
1、 把命令的CRC校驗去掉,並且計算出LRC校驗取代。
2、 把生成的命令串的每一個位元組轉化成對應的兩個位元組的ASCII碼,比如0x03轉化成0x30,0x33(0的ASCII碼和3的ASCII碼)。
3、 在命令的開頭加上起始標記「:」,它的ASCII碼為0x3A。
4、 在命令的尾部加上結束標記CR,LF(0xD,0xA),此處的CR,LF表示回車和換行的ASCII碼。
所以以下我們僅介紹RTU協議即可,對應的ASCII協議可以使用以上的步驟來生成。
下表是Modbus支持的功能碼:
功能碼 名稱 作用
01 讀取線圈狀態 取得一組邏輯線圈的當前狀態(ON/OFF)
02 讀取輸入狀態 取得一組開關輸入的當前狀態(ON/OFF)
03 讀取保持寄存器 在一個或多個保持寄存器中取得當前的二進制值
04 讀取輸入寄存器 在一個或多個輸入寄存器中取得當前的二進制值
05 強置單線圈 強置一個邏輯線圈的通斷狀態
06 預置單寄存器 把具體二進值裝入一個保持寄存器
07 讀取異常狀態 取得8個內部線圈的通斷狀態,這8個線圈的地址由控制器決定
08 回送診斷校驗 把診斷校驗報文送從機,以對通信處理進行評鑒
09 編程(只用於484) 使主機模擬編程器作用,修改PC從機邏輯
10 控詢(只用於484) 可使主機與一台正在執行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發送後,本功能碼才發送
11 讀取事件計數 可使主機發出單詢問,並隨即判定操作是否成功,尤其是該命令或其他應答產生通信錯誤時
12 讀取通信事件記錄 可是主機檢索每台從機的Modbus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關錯誤
13 編程(184/384 484 584) 可使主機模擬編程器功能修改PC從機邏輯
14 探詢(184/384 484 584) 可使主機與正在執行任務的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發送後,本功能碼才得發送
15 強置多線圈 強置一串連續邏輯線圈的通斷
16 預置多寄存器 把具體的二進制值裝入一串連續的保持寄存器
17 報告從機標識 可使主機判斷編址從機的類型及該從機運行指示燈的狀態
18 (884和MICRO 84) 可使主機模擬編程功能,修改PC狀態邏輯
19 重置通信鏈路 發生非可修改錯誤後,是從機復位於已知狀態,可重置順序位元組
20 讀取通用參數(584L) 顯示擴展存儲器文件中的數據信息
21 寫入通用參數(584L) 把通用參數寫入擴展存儲文件,或修改之
22~64 保留作擴展功能備用
65~72 保留以備用戶功能所用 留作用戶功能的擴展編碼
73~119 非法功能
120~127 保留 留作內部作用
128~255 保留 用於異常應答
在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現對下位機的數字量和模擬量的讀寫操作。
1、讀可讀寫數字量寄存器(線圈狀態):
計算機發送命令:[設備地址] [命令號01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][01][00][13][00][25][CRC低][CRC高]
意義如下:
<1>設備地址:在一個485匯流排上可以掛接多個設備,此處的設備地址表示想和哪一個設備通訊。例子中為想和17號(十進制的17是十六進制的11)通訊。
<2>命令號01:讀取數字量的命令號固定為01。
<3>起始地址高8位、低8位:表示想讀取的開關量的起始地址(起始地址為0)。比如例子中的起始地址為19。
<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個開關量。例子中為37個開關量。
<5>CRC校驗:是從開頭一直校驗到此之前。在此協議的最後再作介紹。此處需要注意,CRC校驗在命令中的高低位元組的順序和其他的相反。
設備響應:[設備地址] [命令號01] [返回的位元組個數][數據1][數據2]...[數據n][CRC校驗的低8位] [CRC校驗的高8位]
例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]
意義如下:
<1>設備地址和命令號和上面的相同。
<2>返回的位元組個數:表示數據的位元組個數,也就是數據1,2...n中的n的值。
<3>數據1...n:由於每一個數據是一個8位的數,所以每一個數據表示8個開關量的值,每一位為0表示對應的開關斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關量不是8的整倍數,那麼最後一個位元組的高位部分無意義,置為0。
<4>CRC校驗同上。
2、讀只可讀數字量寄存器(輸入狀態):
和讀取線圈狀態類似,只是第二個位元組的命令號不再是1而是2。
3、寫數字量(線圈狀態):
計算機發送命令:[設備地址] [命令號05] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][05][00][AC][FF][00][CRC低][CRC高]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫數字量的命令號固定為05。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關的地址。
<4>下置的數據高8位,低8位:表明需要下置的開關量的狀態。例子中為把該開關閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數值非法。
<5>注意此命令一條只能下置一個開關量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
4、讀可讀寫模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][03][00][6B][00][03][CRC低][CRC高]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:讀模擬量的命令號固定為03。
<3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。
<4>寄存器數高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個位元組。
設備響應:[設備地址] [命令號03] [返回的位元組個數][數據1][數據2]...[數據n][CRC校驗的低8位] [CRC校驗的高8位]
例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高]
意義如下:
<1>設備地址和命令號和上面的相同。
<2>返回的位元組個數:表示數據的位元組個數,也就是數據1,2...n中的n的值。例子中返回了3個模擬量的數據,因為一個模擬量需要2個位元組所以共6個位元組。
<3>數據1...n:其中[數據1][數據2]分別是第1個模擬量的高8位和低8位,[數據3][數據4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。
<4>CRC校驗同上。
5、讀只可讀模擬量寄存器(輸入寄存器):
和讀取保存寄存器類似,只是第二個位元組的命令號不再是2而是4。
6、寫單個模擬量寄存器(保持寄存器):
計算機發送命令:[設備地址] [命令號06] [需下置的寄存器地址高8位] [低8位] [下置的數據高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]
例:[11][06][00][01][00][03][CRC低][CRC高]
意義如下:
<1>設備地址和上面的相同。
<2>命令號:寫模擬量的命令號固定為06。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。
<4>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為3。
<5>注意此命令一條只能下置一個模擬量的狀態。
設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。
㈢ 誰能給我整理一下華為防火牆的協議和命令
一、access-list 用於創建訪問規則。 (1)創建標准訪問列表 access-list [ normal | special ] listnumber1 { permit | deny } source-addr [ source-mask ]
(2)創建擴展訪問列表 access-list [ normal | special ] listnumber2 { permit | deny } protocol source-addr source-mask [ operator port1 [ port2 ] ] dest-addr dest-mask [ operator port1 [ port2 ] | icmp-type [ icmp-code ] ] [ log ]
(3)刪除訪問列表 no access-list { normal | special } { all | listnumber [ subitem ] }
【參數說明】 normal 指定規則加入普通時間段。 special 指定規則加入特殊時間段。 listnumber1 是 1 到 99 之間的一個數值,表示規則是標准訪問列表規則。 listnumber2 是 100 到 199 之間的一個數值,表示規則是擴展訪問列表規則。 permit 表明允許滿足條件的報文通過。 deny 表明禁止滿足條件的報文通過。 protocol 為協議類型,支持 ICMP、TCP、UDP 等,其它的協議也支持,此時沒有 埠比較的概念;為 IP 時有特殊含義,代表所有的 IP 協議。 source-addr 為源地址。 source-mask 為源地址通配位,在標准訪問列表中是可選項,不輸入則代表通配位 為 0.0.0.0。 dest-addr 為目的地址。 dest-mask 為目的地址通配位。 operator[可選] 埠操作符,在協議類型為 TCP 或 UDP 時支持埠比較,支持的 比較操作有:等於(eq) 、大於(gt) 、小於(lt) 、不等於(neq)或介於(range) ;如果 操作符為 range,則後面需要跟兩個埠。 port1 在協議類型為 TCP 或 UDP 時出現, 可以為關鍵字所設定的預設值 (如 telnet) 或 0~65535 之間的一個數值。 port2 在協議類型為 TCP 或 UDP 且操作類型為 range 時出現; 可以為關鍵字所設定 的預設值(如 telnet)或 0~65535 之間的一個數值。 icmp-type[可選] 在協議為 ICMP 時出現,代表 ICMP 報文類型;可以是關鍵字所設 定的預設值(如 echo-reply)或者是 0~255 之間的一個數值。 icmp-code 在協議為 ICMP 且沒有選擇所設定的預設值時出現;代表 ICMP 碼,是 0~255 之間的一個數值。 log [可選] 表示如果報文符合條件,需要做日誌。
listnumber 為刪除的規則序號,是 1~199 之間的一個數值。 subitem[可選] 指定刪除序號為 listnumber 的訪問列表中規則的序號。
firewall { enable | disable } 【參數說明】 enable 表示啟用防火牆。 disable 表示禁止防火牆。
【預設情況】 系統預設為禁止防火牆。
【命令模式】 全局配置模式
【使用指南】 使用此命令來啟用或禁止防火牆,可以通過 show firewall 命令看到相應結果。如果 採用了時間段包過濾,則在防火牆被關閉時也將被關閉;該命令控制防火牆的總開關。
在使用 firewall disable 命令關閉防火牆時,防火牆本身的統計信息也將被清除。
【舉例】 啟用防火牆。 Quidway(config)#firewall enable
【相關命令】 access-list,ip access-group 四、firewall default 配置防火牆在沒有相應的訪問規則匹配時,預設的過濾方式。 firewall default { permit | deny }
【參數說明】
permit 表示預設過濾屬性設置為「允許」。
deny 表示預設過濾屬性設置為「禁止」。
【預設情況】
在防火牆開啟的情況下,報文被預設允許通過。
【命令模式】
全局配置模式
【使用指南】
當在介面應用的規則沒有一個能夠判斷一個報文是否應該被允許還是禁止時, 預設 的過濾屬性將起作用; 如果預設過濾屬性是「允許」, 則報文可以通過, 否則報文被丟棄。
【舉例】
設置預設過濾屬性為「允許」。
Quidway(config)#firewall default permit 五、 access-group 使用此命令將規則應用到介面上。 ip 使用此命令的 no 形式來刪除相應 的設置。
ip access-group listnumber { in | out }
[ no ] ip access-group listnumber { in | out }