SPI(Stateful Packet Inspection)防火墻 全狀態(tài)數(shù)據(jù)包檢測型防火墻,是指通過對每個連接信息(包括套接字對(socket pairs):源地址、目的地址、源端口和目的端口;協(xié)議類型、TCP協(xié)議連接狀態(tài)和超時時間等)進(jìn)行檢測從而判斷是否過濾數(shù)據(jù)包的防火墻。它除了能夠完成簡單包過濾防火墻的包過濾工作外,還在自己的內(nèi)存中維護(hù)一個跟蹤連接狀態(tài)的表,比簡單包過濾防火墻具有更大的安全性。
NAT防火墻雖然和SPI防火墻同為防火墻,但它們的實現(xiàn)途徑不盡相同。NAT防火墻是一種常用的網(wǎng)絡(luò)安全工具,它建立專用網(wǎng),網(wǎng)內(nèi)的計算機可以主動跟外網(wǎng)建立連接、收發(fā)數(shù)據(jù),但來自外網(wǎng)的連接通常會被阻止。NAT防火墻隱藏了內(nèi)網(wǎng)上的計算機,保護(hù)它們免受外網(wǎng)的入侵和未授權(quán)訪問,提高了安全性。
SPI防火墻是在外網(wǎng)的數(shù)據(jù)包進(jìn)入內(nèi)網(wǎng)之前先對其進(jìn)行檢查的一種技術(shù)。它在默認(rèn)情況下拒絕所有來自外網(wǎng)的請求,并且通過防火墻的發(fā)自內(nèi)網(wǎng)請求的連接動態(tài)地維護(hù)所有通信的狀態(tài)(連接),只有對內(nèi)網(wǎng)請求回復(fù)的連接并符合安全要求的數(shù)據(jù)包才能通過防火墻進(jìn)入內(nèi)網(wǎng)。相比NAT防火墻, SPI防火墻的安全性更高。
SPI(Stateful Packet Inspection) 全狀態(tài)數(shù)據(jù)包檢測型防火墻,是指通過對每個連接信息(包括套接字對(socket pairs):源地址、目的地址、源端口和目的端口;協(xié)議類型、TCP協(xié)議連接狀態(tài)和超時時間等)進(jìn)行檢測從而判斷是否過濾數(shù)據(jù)包的防火墻。它除了能夠完成簡單包過濾防火墻的包過濾工作外,還在自己的內(nèi)存中維護(hù)一個跟蹤連接狀態(tài)的表,比簡單包過濾防火墻具有更大的安全性。
目前最為先進(jìn)的狀態(tài)數(shù)據(jù)包檢查(SPI) 防火墻提供最高級別的安全性。它在默認(rèn)情況下拒絕所有來自外網(wǎng)的請求,并且對通過防火墻的發(fā)自內(nèi)網(wǎng)請求的連接動態(tài)地維護(hù)所有通信的狀態(tài)(連接),只有是對內(nèi)網(wǎng)請求回復(fù)的連接并符合已建立的狀態(tài)數(shù)據(jù)庫的包才能通過防火墻進(jìn)入內(nèi)網(wǎng)。這種方案不僅可使網(wǎng)絡(luò)用戶訪問Internet 資源,同時又能防止Internet 上的黑客訪問內(nèi)部網(wǎng)絡(luò)資源。
"狀態(tài)檢查"一詞是指防火墻記憶連接狀態(tài)和在其內(nèi)存中為每個數(shù)據(jù)流建立上下文的能力。憑借這些信息,該防火墻能夠比不支持SPI的防火墻作出更有根據(jù)的策略決策。
只有具有基于硬件的采用目前最為先進(jìn)的狀態(tài)數(shù)據(jù)包檢查(SPI)技術(shù)的防火墻才是真正意義上的防火墻(True Firewall)。
區(qū)別:1、實現(xiàn)隔離內(nèi)外部網(wǎng)絡(luò)的方式不同硬件防火墻:通過硬件和軟件的組合,基于硬件的防火墻專門保護(hù)本地網(wǎng)絡(luò)軟件防火墻:通過純軟件,單獨使用軟件系統(tǒng)來完成防火墻功能2、安全性不同硬件防火墻的抗攻擊能力比軟...
按普通墻套,注意換算材料價格。沒有的項目,以補充項進(jìn)。
具體材料選擇要看設(shè)計要求的是混凝土配筋的,就選中剪力墻
格式:pdf
大?。?span id="q4iuy4o" class="single-tag-height">175KB
頁數(shù): 未知
評分: 4.5
Windows下的數(shù)據(jù)包過濾防火墻技術(shù)主要有內(nèi)核模式和用戶模式兩種,本文討論了在用戶模式下使用Winsock2.0SPI接口進(jìn)行數(shù)據(jù)包過濾的實現(xiàn)技術(shù)。
SPI(Serial Peripheral Interfacer 串行外設(shè)接口)是摩托羅拉公司推出的一種同步串行通訊接口,用于微處理器臌控制器和外圍擴展芯片之間的串行連接,現(xiàn)已發(fā)展成為一種工業(yè)標(biāo)準(zhǔn),目前,各半導(dǎo)體公司推出了大量的帶有SPI接口的具有各種各樣功能的芯片,如RAM,EEPROM,F(xiàn)lashROM,A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、LED/LED顯示驅(qū)動器、I/O接口芯片、實時時鐘、UART收發(fā)器等等,為用戶的外圍擴展提供了極其靈活而價廉的選擇。由于SPI總線接口只占用微處理器四個I/O口線,采用SPI總線接口可以簡化電路沒計,節(jié)省很多常規(guī)電路中的接口器件和I/O口線,提高設(shè)計的可靠性。
現(xiàn)以 AT89C205l單片機模擬SPI總線操作串行EEPROM 93CA6為例,如圖1所示,介紹利用單片機的I/O口通過軟件模擬SPI總線的實現(xiàn)方法。在這里,僅介紹讀命令的時序和應(yīng)用子程序。
93C46存儲器SPI總線的工作原理
93CA6作為從設(shè)備,其SPI接口使用4條I/O口線:串行時鐘線(SK)、輸出數(shù)據(jù)線DO、輸入數(shù)據(jù)線DI和高電平有效的從機選擇線CS。其數(shù)據(jù)的傳輸格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI總線接口讀命令時序如圖2所示。
軟件模擬SPI接口的實現(xiàn)方法
對于不帶SPI串行總線接口的AT89C2051單片 機來說,可以使用軟件來模擬SPI的操作,圖1所示 為AT89C2051單片機與串行EEPROM 93C46的硬件 連接圖,其中,P1.0模擬SPI主設(shè)備的數(shù)據(jù)輸出端 SDO,P1.2模擬SPI的時鐘輸出端SCK,P1.3模擬 SPI的從機選擇端SCS,P1.1模擬SPI的數(shù)據(jù)輸入 SDI。
上電復(fù)位后首先先將P1.2(SCK)的初始狀態(tài)設(shè)置為0(空閑狀態(tài))。
讀操作:AT89C2051首先通過P1.0口發(fā)送1位起始位(1),2位操作碼(10),6位被讀的數(shù)據(jù)地址(A5A4A3A2A1A0),然后通過P1.1口讀1位空位(0),之后再讀l6位數(shù)據(jù)(高位在前)。
寫操作:AT89C2051首先通過P1.0口發(fā)送1位起始位(1),2位操作碼(01),6位被寫的數(shù)據(jù)地址(A5A4A3A2A1A0),之后通過P1.0口發(fā)送被寫的l6位數(shù)據(jù)(高位在前),寫操作之前要發(fā)送寫允許命令,寫之后要發(fā)送寫禁止命令。
寫允許操作(WEN)):寫操作首先發(fā)送1位起始位(1),2位操作碼(00),6位數(shù)據(jù)(11XXXX)。
寫禁止操作(WDS)):寫操作首先發(fā)送1位起始位(1),2位操作碼(00),6位數(shù)據(jù)(00XXXX)。
下面介紹用C51模擬SPI的子程序。
1. //首先定義好I/O口
2. sbit SDO=P1^0;
3. sbit SDI=P1^1;
4. sbit SCK=P1^ 2;
5. sbit SCS=P1^3;
6. sbit ACC_7= ACC^7;
7. unsigned int SpiRead(unsigned char add)
8. {
9. unsigned char i;
10. unsigned int datal6;
11. add&=0x3f;/*6位地址*/
12. add |=0x80;/*讀操作碼l0*/
13. SDO=1;/*發(fā)送1為起始位*/
14. SCK=0;
15. SCK=1;
16. for(i=0;<8;i++)/*發(fā)送操作碼和地址*/
17. {
18. if(add&0x80==1)
19. SDO=1;
20. else
21. SDO=0;
22. SCK=0;/*從設(shè)備上升沿接收數(shù)據(jù)*/
23. SCK=1;
24. add<<= 1;
25. }
26. SCK=1;/*從設(shè)備時鐘線下降沿后發(fā)送數(shù)據(jù),空讀1位數(shù)據(jù)*/
27. SCK=0;
28. datal6<<= 1;/*讀16位數(shù)據(jù)*/
29. for(i=0;<16;i++)
30. {
31. SCK= 1;
32. _nop_();
33. if(SDI==1)
34. datal6|=0x01;
35. SCK =0;
36. datal6< < =1;
37. }
38. return datal6;
39. }
對于不同的串行接口外圍芯片,它們的時鐘時序是不同的。上述子程序是針對在SCK的上升沿輸入(接收)數(shù)據(jù)和在下降沿輸出(發(fā)送)數(shù)據(jù)的器件。這些子程序也適用于在串行時鐘)的上升沿輸入和下降沿輸出的其它各種串行外圍接口芯片,只要在程序中改變P1.2(SCK)的輸出電平順序進(jìn)行相應(yīng)調(diào)整即可。
ISD4004 工作于SPI 串行接口。SPI 協(xié)議是一個同步串行數(shù)據(jù)傳輸協(xié)議,協(xié)議假定微控制器的SPI 移位寄存器在SCLK 的下降沿動作,因此對ISD4004 而言,在時鐘上升沿鎖存MOSI 引腳的數(shù)據(jù),在下降沿將數(shù)據(jù)送至MISO 引腳。協(xié)議的具體內(nèi)容為:
1.所有串行數(shù)據(jù)傳輸開始于SS 下降沿。
2.SS 在傳輸期間必須保持為低電平,在兩條指令之間則保持為高電平。
3.數(shù)據(jù)在時鐘上升沿移入,在下降沿移出。
4.SS 變低,輸入指令和地址后,ISD 才能開始錄放操作。
5.指令格式是(8 位控制碼)加(16 位地址碼)。
6.ISD 的任何操作(含快進(jìn))如果遇到EOM 或OVF,則產(chǎn)生一個中斷,該中斷狀態(tài)在下一個SPI 周期開始時被清除。
7.使用"讀"指令使中斷狀態(tài)位移出ISD 的MISO 引腳時,控制及地址數(shù)據(jù)也應(yīng)同步從MOSI 端移入。因此要注意移入的數(shù)據(jù)是否與器件當(dāng)前進(jìn)行的操作兼容。當(dāng)然,也允許在一個SPI 周期里,同時執(zhí)行讀狀態(tài)和開始新的操作(即新移入的數(shù)據(jù)與器件當(dāng)前的操作可以不兼容)。
8.所有操作在運行位(RUN)置1 時開始,置0 時結(jié)束。
9.所有指令都在SS 端上升沿開始執(zhí)行。
用戶不必知道信息的確切地址,就能快進(jìn)跳過一條信息。信息快進(jìn)只用于放音模式。放音速度是正
常的160 倍,遇到EOM 后停止,然后內(nèi)部地址計數(shù)器加1,指向下條信息的開始處。
器件延時TPUD(8kHz 采樣時,約為25 毫秒)后才能開始操作。因此,用戶發(fā)完上電指令后,必須等待
TPUD,才能發(fā)出一條操作指令。
例如,從00 從處發(fā)音,應(yīng)遵循如下時序:
1. 發(fā)POWERUP 命令;
2. 等待TPUD(上電延時);
3. 發(fā)地址值為00 的SETPLAY 命令;
4. 發(fā)PLAY 命令。
器件會從此00 地址開始放音,當(dāng)出現(xiàn)EOM 時,立即中斷,停止放音。
如果從00 處錄音,則按以下時序:
1. 發(fā)POWER UP 命令;
2. 等待TPUD(上電延時);
3. 發(fā)POWER UP 命令
4. 等待2 倍TPUD;
5. 發(fā)地址值為00 的SETREC 命令;
6. 發(fā)REC 命令。
器件便從00 地址開始錄音,一直到出現(xiàn)OVF(存貯器末尾)時,錄音停止。
ISD4002/4003/4004芯片參數(shù)表
型號 |
存儲時間 (秒) |
可分 段數(shù) |
信息分辯 率(毫秒) |
采樣頻 率(HZ) |
濾波器 帶寬(HZ) |
控制碼 地址位 |
ISD4002-120 |
120 |
600 |
200 |
8.0K |
3.4K |
5 11 |
ISD4002-180 |
180 |
600 |
300 |
5.3k |
2.3k |
5 11 |
ISD4002-240 |
240 |
600 |
400 |
4.0k |
1.7k |
5 11 |
ISD4003-04 |
240 |
1200 |
200 |
8.0K |
3.4K |
5 11 |
ISD4003-06 |
360 |
1200 |
300 |
5.3K |
2.3K |
5 11 |
ISD4003-08 |
480 |
1200 |
400 |
4.0K |
1.7K |
5 11 |
ISD4004-08 |
480 |
2400 |
200 |
8.0K |
3.4K |
8 16 |
ISD4004-16 |
960 |
2400 |
400 |
4.0K |
1.7K |
8 16 |
以上芯片由ISD3340K編程拷貝機編程、拷貝。 |
************
// 主程序
//
// 功能:1.錄音時,按住AN鍵,LED點亮開始錄音,松開AN即可停止錄音
// 再次按下AN鍵,LED點亮開始錄第二段音,依次類推,直到芯片溢出。
// 按stop鍵芯片復(fù)位
// 2.放音時,按一下AN鍵,即播放一段語音。 按stop鍵芯片復(fù)位。
//************************************************************************
#include
sbit SS =P1^0; //片選
sbit MOSI=P1^1; //數(shù)據(jù)輸入
sbit MISO=P1^2; //數(shù)據(jù)輸出
sbit SCLK=P1^3; //ISD4004時鐘
sbit INT =P1^4; //中斷
sbit LED =P1^7; //指示燈
sbit LED1=P1^6; //指示燈:亮是錄音/不亮是放音
sbit PR =P3^3; //錄音和放音選擇開關(guān)
sbit STOP=P3^4; //復(fù)位
sbit AN =P3^5; //執(zhí)行
void delay(unsigned int time) //延遲n微秒
{
while(time!=0)
{
time--;
}
}
void delayms(unsigned int time) //延遲n毫秒
{
TMOD=0x01;
for(time;time>0;time--)
{
TH0=0xfc;
TL0=0x18;
TR0=1;
while(TF0!=1)
{;}
TF0=0;
TR0=0;
}
}
void isd_send(unsigned char isdx)//spi串行發(fā)送子程序,8位數(shù)據(jù)
{
unsigned char isx_counter;
SS=0;//ss=0,打開spi通信端
SCLK=0;
for(isx_counter=0;isx_counter<8;isx_counter )//先發(fā)低位再發(fā)高位,依次發(fā)送。
{
if((isdx&0x01)==1)
MOSI=1;
else
MOSI=0;
isdx=isdx>>1;
SCLK=1;
delay(2);
SCLK=0;
delay(2);
}
}
void isd_stop()//stop指令(停止當(dāng)前操作)
{
delay(10);
isd_send(0x30);
SS=1;
delayms(50);
}
void isd_powerup()//發(fā)送上電指令
{
delay(10);
SS=0;
isd_send(0x20);
SS=1;
delayms(50);
}
void isd_stopwrdn()//發(fā)送掉電指令
{
delay(10);
isd_send(0x10);
SS=1;
delayms(50);
}
void isd_play()//發(fā)送play指令
{
LED=0;
isd_send(0xf0);
SS=1;
}
void isd_rec()//發(fā)送rec指令
{
LED=0;
isd_send(0xb0);
SS=1;
}
void isd_setplay(unsigned char adl,unsigned char adh)//發(fā)送setplay指令
{
delayms(1);
isd_send(adl); //發(fā)送放音起始地址低位
delay(2);
isd_send(adh); //發(fā)送放音起始地址高位
delay(2);
isd_send(0xe0); //發(fā)送setplay指令字節(jié)
SS=1;
}
void isd_setrec(unsigned char adl,unsigned char adh)//發(fā)送setrec指令
{
delayms(1);
isd_send(adl); //發(fā)送放音起始地址低位
delay(2);
isd_send(adh); //發(fā)送放音起始地址高位
delay(2);
isd_send(0xa0); //發(fā)送setplay指令字節(jié)
SS=1;
}
void isd_overflow()//芯片溢出,LED閃爍提醒停止錄音
{
while(AN==0)
{
LED=1;
delayms(300);
LED=0;
delayms(300);
}
}
unsigned char chk_isdovf()//檢查芯片是否溢出(讀OVF,并返回OVF值)
{
SS=0;
delay(2);
SCLK=0;
delay(2);
SCLK=1;
SCLK=0;
delay(2);
if(MISO==1)
{
SCLK=0;
SS=1; //關(guān)閉spi通信端
isd_stop(); //發(fā)送stop指令
return 1; //OVF為1,返回1
}
else
{
SCLK=0;
SS=1; //關(guān)閉spi通信端
isd_stop(); //發(fā)送stop指令
return 0; //OVF為0,返回0
}
}
void main(void)
{
unsigned char ovflog;
while(1)
{
if(PR==0) {delayms(8);LED1=~LED1;while(PR==0);}
if(LED1==0)//如果PR=0則轉(zhuǎn)入錄音部分
{
if(AN==0)
{
isd_powerup(); //AN鍵按下,ISD上電并延遲50ms
isd_stopwrdn();
isd_powerup();
LED1=0;//表示錄音模式
delayms(500); //延遲500ms錄音
isd_setrec(0x00,0x00); //發(fā)送0x0000h地址的setplay指令
do
{
isd_rec(); //發(fā)送rec指令
while(AN==0) //等待錄音完畢
{
if(INT==0) //如果芯片溢出,進(jìn)行LED閃爍提示,
isd_overflow(); //如果取消錄音(松開AN鍵)則停止錄音,芯片復(fù)位
}
if(INT==0)
break;
LED=1; //錄音完畢,LED熄滅
isd_stop(); //發(fā)送停止命令
while(AN==1) //如果AN再次按下,開始錄制下一段語音
{
if(isd_stop==0) //如果按下STOP按鍵,則芯片復(fù)位
break;
if(AN==0)
delayms(500);
}
}
while(AN==0);
}
}
if(LED1==1)//如果PR=0則轉(zhuǎn)入放音部分 //如果PR==1則轉(zhuǎn)入放音部分
{
if(AN==0)
{
isd_powerup(); //AN鍵按下,ISD上電并延遲50ms
isd_stopwrdn();
isd_powerup();
LED1=1;//表示錄音模式
while(AN==0)
{;}
isd_setplay(0x00,0x00); //發(fā)送setplay指令,從0x0000地址開始放音
do
{
isd_play(); //發(fā)送放音指令
delay(20);
while(INT==1) //等待放音完畢的EOM中斷信號
{;}
LED=1;
isd_stop(); //放音完畢,發(fā)送stop指令
if (ovflog=chk_isdovf()) //檢查芯片是否溢出 ,如溢出則停止放音,芯片復(fù)位
break;
while(AN==1) //等待AN鍵再次按下
{
if(isd_stop==0)
break;
if(AN==0)
delayms(20);
}
}
while(AN==0); // AN鍵再次按下,播放下一段語音
// isd_stop();
// isd_stopwrdn();
}
}
}
狀態(tài)防火墻(英語:Stateful firewall),一種能夠提供狀態(tài)封包檢查(stateful packet inspection,縮寫為SPI)或狀態(tài)檢視(stateful inspection)功能的防火墻,能夠持續(xù)追蹤穿過這個防火墻的各種網(wǎng)絡(luò)連線(例如TCP與UDP連線)的狀態(tài)。這種防火墻被設(shè)計來區(qū)分不同連線種類下的合法封包。只有符合主動連線的封包才能夠被允許穿過防火墻,其他的封包都會被拒絕。