作業:由三部分構成,即程式,資料和作業說明書,它是使用者在完成一項任務過程中要求計算機系統所做工作的集合。
程序:一個程式在一個資料集合上的一次運作過程。是以一個程式在不同的資料集合上運作,乃至一個程式在同樣資料集合上的多次運作,都是不同的程序。
線程:線程是程序中的一個實體,是被系統獨立排程和執行的基本機關。
管程:管程定義了一個資料結構和在該資料結構上的能為并發程序所執行的一組操作,這組操作能同步程序和改變管程中的資料。
最常用的程序間的通信方式有信号、信号量、消息隊列、共享記憶體。
管道( pipe ):管道是一種半雙工的通信方式,資料隻能單向流動,而且隻能在具有親緣關系的程序間使用。程序的親緣關系通常是指父子程序關系。
有名管道 (named pipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關系程序間的通信。
信号量( semophore ) :(可以用來保證兩個或多個關鍵代碼段不被并發調用。在進入一個關鍵代碼段之前,線程必須擷取一個信号量;一旦該關鍵代碼段完成了,那麼該線程必須釋放信号量。) 信号量是一個計數器,可以用來控制多個程序對共享資源的通路。它常作為一種鎖機制,防止某程序正在通路共享資源時,其他程序也通路該資源。是以,主要作為程序間以及同一程序内不同線程之間的同步手段。
消息隊列( message queue ) : 消息隊列是由消息的連結清單,存放在核心中并由消息隊列辨別符辨別。消息隊列克服了信号傳遞資訊少、管道隻能承載無格式位元組流以及緩沖區大小受限等缺點。
信号 ( sinal ) : 信号是一種比較複雜的通信方式,用于通知接收程序某個事件已經發生。
共享記憶體( shared memory ) :共享記憶體就是映射一段能被其他程序所通路的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以通路。共享記憶體是最快的 ipc 方式,它是針對其他程序間通信方式運作效率低而專門設計的。它往往與其他通信機制,如信号量,配合使用,來實作程序間的同步和通信。
套接字( socket ) : 套接字也是一種程序間通信機制,與其他通信機制不同的是,它可用于不同機器間的程序通信。
兩者的差別就是mutex可以用于程序之間互斥,critical section是線程之間的互斥。
互斥條件:一個資源隻能被一個程序使用。
請求與保持條件:一個程序因請求資源而阻塞時,對已獲得的資源保持不放。
不剝奪條件:程序已獲得的資源,在未使用完之前,不能強行剝奪。
循環等待條件:若幹程序之間形成一種頭尾相接的循環等待資源關系。
根據産生死鎖的4個必要條件,隻要使其中之一不能成立,死鎖就不會出現。(互斥條件無法被破壞)
避免死鎖算法中最具有代表性的是dijkstra于1968年提出的銀行家算法,該算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。這樣申請者就可以很快完成其計算,然後釋放它所占用的資源,進而保證了系統中的所有程序都能完成,是以可避免死鎖的發生。
就緒(ready)狀态:程序已配置設定除cpu之外的所有必要的資源,隻要獲得處理機便可立即執行。
執行(running)狀态:進行已獲得了處理機,其程式正在處理機上執行。
阻塞(blocked)狀态:正在執行的程序,由于等待某個事件發生而無法執行時,便放棄處理機而處于阻塞狀态(例如,等待i/o完成、申請緩沖區不能滿足、等待信号等)。
程序是程式的一次執行。線程可以了解為程序中執行的一段程式片段。在一個多任務環境中下面的概念可以幫助我們了解兩者之間的差别。
程序間是獨立的,這表現在記憶體空間、上下文環境上;線程運作在程序空間内。一般來講,程序無法突破程序邊界存取其他程序内的存儲空間;而線程由于處于程序空間内,是以同一程序所産生的線程共享同一記憶體空間。
同一程序的兩段代碼不能同時執行,除非引入線程。
線程是屬于程序的,當程序退出時該程序所産生的線程都會被強制退出并清除。線程占用的要少于程序所占用的資源。線程和程序都可以有優先級。
程序間可以通過ipc通信,但線程不可以。
記憶體
knowndlls
清單與.local
應用程式目錄
目前工作目錄
系統目錄
路徑變量
靜态連結庫的優點
(1) 代碼裝載速度快,執行速度略比動态連結庫快;
(2) 隻需保證在開發者的計算機中有正确的.lib檔案,在以二進制形式釋出程式時不需考慮在使用者的計算機上.lib檔案是否存在及版本問題,可避免dll地獄等問題。
動态連結庫的優點
(1) 更加節省記憶體并減少頁面交換;
(2) dll檔案與exe檔案獨立,隻要輸出接口不變(即名稱、參數、傳回值類型和調用約定不變),更換dll檔案不會對exe檔案造成任何影響,因而極大地提高了可維護性和可擴充性;
(3) 不同程式設計語言編寫的程式隻要按照函數調用約定就可以調用同一個dll函數;
(4)适用于大規模的軟體開發,使開發過程獨立、耦合度小,便于不同開發者和開發組織之間進行開發和測試。
不足之處
(1) 使用靜态連結生成的可執行檔案體積較大,包含相同的公共代碼,造成浪費;
(2) 使用動态連結庫的應用程式不是自完備的,它依賴的dll子產品也要存在,如果使用載入時動态連結,程式啟動時發現dll不存在,系統将終止程式并給出錯誤資訊。而使用運作時動态連結,系統不會終止,但由于dll中的導出函數不可用,程式會加載失敗;速度比靜态連結慢。當某個子產品更新後,如果新子產品與舊的子產品不相容,那麼那些需要該子產品才能運作的軟體,統統撕掉。這在早期windows中很常見。
頁式管理、段式管理、段頁式管理(須多查閱資料)
該方法将系統的狀态分為安全狀态和不安全狀态,隻要使系統處于安全狀态,便可避免死鎖的發生。
基本思想是程式、資料、堆棧的總的大小可以超過實體存儲器的大小,作業系統把目前使用的部分保留在記憶體中,而把其他未使用的部分儲存在磁盤上。
在前面幾條指令中使用頻繁的頁面,很可能在後面的幾條指令中頻繁使用。反過來說,已經很久沒有使用的頁面,很可能在未來較長的一段時間内不會被用到。
存儲過程是使用者定義的一系列sql語句的集合,涉及特定表或其他對象的任務,使用者可以調用存儲過程。而函數通常是資料庫已定義的方法,它接收參數并傳回某種類型的值,并且不涉及特定的使用者表。
資料庫事務是指作為單個邏輯工作單元執行的一系列操作,這些操作要麼全做要麼全不做,是一個不可分割的工作機關。
事務的開始和結束可以由使用者顯式控制。如果使用者沒有顯式的定義事務,則由dbms按預設規定自動劃分事務。事務具有acid等特點。
遊标用于定位結果集的行。
通過全局變量@@fetch_status可以判斷其是否到了之後。通常此變量不等于0表示出錯或到了最後。
事前觸發器運作于觸發事件發生之前;事後觸發器運作于觸發事件發生之後
語句級觸發器可以在語句執行前或後執行;行級觸發器在觸發器所影響的每一行觸發一次。
所謂sql注入式攻擊,就是攻擊者把sql語句插入到web表單的輸入域或者頁面請求的查詢字元串中,欺騙伺服器執行惡意的sql指令。在某些表單中,使用者輸入的内容直接用來構造動态sql語句,或作為存儲過程的輸入參數,這類表單特别容易受到sql注入式攻擊。
防範sql注入式攻擊闖入并不是一件特别困難的事情,隻要在利用表單輸入的内容構造sql語句之前,把所有輸入内容過濾一番就可以了。過濾輸入内容可以按多種方式進行。
聚集索引的順序就是資料的實體存儲順序;而非聚集索引的索引順序與資料實體排序順序無關。一個表最多隻能有一個聚集索引。
在sql server中,是以是通過二叉樹的資料結構來描述的,我們可以這麼了解聚集索引:索引的葉節點就是資料節點。而非聚集索引的葉節點仍然是索引節點,隻不過有一個指針指向對應的資料塊。
找出表ppp裡面num最小的數,不能使用min函數。
select *from ppp where num <= all(select num from ppp)
或者:
select top 1 num from ppp order by num
找出表ppp裡面最小的數,可以使用min函數。
select * from ppp where num = (select min(num) from ppp)
選擇表ppp中num重複的記錄。
select * from ppp
where num in (select num from ppp group by num having count(num)>1)
寫出複制表、拷貝表和四表聯查的sql語句。
複制表(隻複制結構,不拷貝資料):
select * into b from a where 1 = 0
拷貝表(複制結構,同時也拷貝資料):
select * into b from a
四表聯查:
select * from a, b, c, d where 關聯條件
(以上sql語句僅在sql server中測試通過)
在sql server中如何用sql語句建立一張臨時表?
create table #temp (字段1 類型,字段2 類型……)
有一個資料表a,有一個字段lastupdatetime,是最後更新的時間,如果要查最新更新過的記錄,如何寫sql語句?
select *
from a
where lastupdatetime = (select max(lastupdatetime) from a)
osi模型分為實體層、資料鍊路層、網絡層、傳輸層、會話層、表示層、應用層。
1. 實體層涉及在信道上傳輸的原始比特流。
2. 資料鍊路層的主要任務是加強實體層傳輸比特流的功能,使之對應的網絡層顯現為一條無錯線路。發送包把輸入資料封裝在資料幀,按順序傳送出去并處理接收方回送的确認幀。
3. 網絡層關系到子網的運作控制,其中一個關鍵問題是确認從源端到目标端如何選擇路由。
4. 傳輸層的基本功能是從會話層接收資料而且把其分成較小的單元傳遞給網絡層。
5. 會話層允許不同機器上的使用者建立會話關系。
6. 表示層用來完成某些特定的功能。
7. 應用層包含着大量人們普遍需要的協定。
tcp是傳輸控制協定,提供的是面向連接配接、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立一個tcp連接配接,之後才能傳輸資料。tcp提供逾時重發、丢棄重複資料、檢驗資料、流量控制等功能,保證資料能從一端傳到另一端。
udp是使用者資料報協定,是一個簡單的面向資料報的運輸層協定。udp不提供可靠性,它隻是把應用程式傳給ip層的資料報發送出去,但是并不保證它們能到達目的地。由于udp在傳輸資料報前不用在客戶和伺服器之間建立一個連接配接,且沒有逾時重發等機制,故而傳輸速度很快。
伺服器端程式編寫:
調用serversocket(int port)建立一個伺服器端套接字,并綁定到指定端口上。
調用accept(),監聽連接配接請求,則接收連接配接,傳回通信套接字。
調用socket類的getoutstream()和getinputstream擷取輸出流和輸入流,開始網絡資料的發送和接收。
關閉套接字。socket.close()。
用戶端程式編寫:
調用socket()建立一個流套接字,并連接配接到伺服器端。
調用socket()類的getoutstream()和getinputstream擷取輸出流和輸入流,開始網絡資料的發送和接收。
關閉通信套接字。socket.close()
入侵檢測系統和防火牆的差別
概念
1) 防火牆:防火牆是設定在被保護網絡(本地網絡)和外部網絡(主要是internet)之間的一道防禦系統,以防止發生不可預測的、潛在的破壞性的侵入。它可以通過檢測、限制、更改跨越防火牆的資料流,盡可能的對外部屏蔽内部的資訊、結構和運作狀态,以此來保護内部網絡中的資訊、資源等不受外部網絡中非法使用者的侵犯。
2) 入侵檢測系統:ids是對入侵行為的發覺,通過從計算機網絡或計算機的關鍵點收集資訊并進行分析,從中發現網絡或系統中是否有違反安全政策的行為和被攻擊的迹象。
3) 總結:從概念上我們可以看出防火牆是針對黑客攻擊的一種被動的防禦,ids則是主動出擊尋找潛在的攻擊者;防火牆相當于一個機構的門衛,收到各種限制和區域的影響,即凡是防火牆允許的行為都是合法的,而ids則相當于巡邏兵,不受範圍和限制的限制,這也造成了iso存在誤報和漏報的情況出現。
功能
防火牆的主要功能:
1) 過濾不安全的服務和非法使用者:所有進出内部網絡的資訊都是必須通過防火牆,防火牆成為一個檢查點,禁止未授權的使用者通路受保護的網絡。
2) 控制對特殊站點的通路:防火牆可以允許受保護網絡中的一部分主機被外部網通路,而另一部分則被保護起來。
3) 作為網絡安全的集中監視點:防火牆可以記錄所有通過它的通路,并提供統計資料,提供預警和審計功能。
入侵檢測系統的主要任務:
1) 監視、分析使用者及系統活動
2) 對異常行為模式進行統計分析,發行入侵行為規律
3) 檢查系統配置的正确性和安全漏洞,并提示管理者修補漏洞
4) 能夠實時對檢測到的入侵行為進行響應
5) 評估系統關鍵資源和資料檔案的完整性
6) 作業系統的審計跟蹤管理,并識别使用者違反安全政策的行為
總結:防火牆隻是防禦為主,通過防火牆的資料便不再進行任何操作,ids則進行實時的檢測,發現入侵行為即可做出反應,是對防火牆弱點的修補;防火牆可以允許内部的一些主機被外部通路,ids則沒有這些功能,隻是監視和分析使用者和系統活動。
入侵檢測系統和防火牆的聯系
ids是繼防火牆之後的又一道防線,防火牆是防禦,ids是主動檢測,兩者相結合有力的保證了内部系統的安全;
ids實時檢測可以及時發現一些防火牆沒有發現的入侵行為,發行入侵行為的規律,這樣防火牆就可以将這些規律加入規則之中,提高防火牆的防護力度。
25端口為smtp(simple mail transfer protocol,簡單郵件傳輸協定)伺服器所開放,主要用于發送郵件,如今絕大多數郵件伺服器都使用該協定。比如在使用電子郵件用戶端程式的時候,在建立賬戶時會要求輸入smtp伺服器位址,該伺服器位址預設情況下使用的就是25端口。
端口漏洞:利用25端口,黑客可以尋找smtp伺服器,用來轉發垃圾郵件。25端口被很多木馬程式開放,通過開放25端口,可以見識計算機正在運作的所有視窗和子產品。
21 ftp
23 telnet
80 http
135 rpc
53 dns
ping.exe的原理是,向指定的ip位址發送一定長度的資料包,按照約定,若指定ip位址存在的話,會傳回同樣大小的資料包。
ping使用的是icmp協定,有些防火牆軟體會屏蔽icmp協定,ping不通并不一定說明對方ip不存在。
“ping of death”的攻擊原理是:如果icmp資料包的尺寸超過64kb上限時,主機就會出現記憶體配置設定錯誤,導緻tcp/ip堆棧奔潰,緻使主機當機。此外,向目标主機長時間、連續、大量地發送icmp資料包,也會最終使系統癱瘓。
擴充知識(常見網絡協定):
動态主機配置協定
邊界網關協定
voip協定
p2p協定
arp協定
ipx/spx協定
snmp協定
tcp
ip協定
layer2 tunneling protocol
netbios extend user interface
在tcp/ip協定中,tcp協定提供可靠的連接配接服務,采用3次握手建立一個連接配接。
第1次握手:建立連接配接時,用戶端發送syn包(syn=j)到伺服器,并進入syn_send狀态,等待伺服器确認。
第2次握手:伺服器收到syn包,必須确認客戶的syn(ack=j+1),同時自己也發送一個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀态。
第3次握手:用戶端收到伺服器的syn+ack包,向伺服器發送确認包ack(ack=k+1),此包發送完畢,用戶端和伺服器進入established狀态,完成3次握手。
完成3次握手,用戶端與伺服器開始傳送資料。