標籤:
Linux網路編程
網路編程必備的理論基礎
網路模型,地址,連接埠,TCP/IP協議
TCP/IP協議是目前世界上使用最廣泛的網路通訊協定
日常中的大部分應用使用該系列協議(瀏覽網頁,收發電子郵件,QQ聊天等)
1.網路模型與協議
TCP/IP各層功能:
(1).網路介面層 TCP/IP最下一層,包含多種邏輯鏈路控制和媒體訪問協議
(2).Internet層 網路層負責在發送端和接收端之間建立一條虛擬路徑 主要協議IP協議
IP協議不能保證資料完整到達目的地,這個任務由他上面的傳輸層完成。
這一層的ARP協議(位址解析通訊協定)和RARP(反位址解析通訊協定)用於IP地址和物理地址(通常是網卡地址的互相轉換)。
如果資料在傳輸過程中出現問題,該層的ICMP協議產生錯誤判文
(3).傳輸層
TCP(傳輸控制通訊協定)協議或者UDP(使用者資料包通訊協定)協議,
差錯控制,傳輸確認,丟失重傳
(4).應用程式層
面向使用者提供一系列的訪問網路通訊協定:傳輸檔案的ftp協議,遠程登入的telnet協議寄送電子郵件的smtp協議,最常用用於瀏覽網頁的http協議
近幾年來十分流行的點對點共用檔案協議,BitTorrent協議,該協議基於http協議
TCP/IP由許多協議構成協議簇,如,TCP,IP,UDP,FTP,HTTP
2.地址
為了使網路上的電腦互相通訊,必須有一個唯一的標識符來區分網路上的每台電腦
有兩種標識符可以使用:
物理地址和IP地址
對乙太網路來說,物理地址是48位的位串,此地址在網卡生產過程已經固定,不可更改,全球唯一。
有多塊網卡,一個網卡代表一個網路介面,成為多重主目錄電腦。
3.IP地址
TCP/IP協議能夠使電腦進行與底層網路無關的通訊,底層網可以是乙太網路,令牌環網,或其他類型網。
由於物理地址依賴於底層網路,不同的底層網路採用不同的物理地址。
必須使用與底層網路無關的通用地址來標識網路上的電腦。
IP由32位位元位組成:電腦所在的網路號和該網路給該電腦分配的主機號。
IP地址按照一定的格式分為五類:
A,B,C,D,E類
A類: 0+網路ID+主機ID(24位) 1.0.0.0 - 127.255.255.255
B類: 10+網路ID+主機ID(16位) 128.0.0.0 - 191.255.255.255
C類: 110+網路ID+主機ID(8位) 192.0.0.0 - 223.255.255.255
D類: 1110+組播地址 224.0.0.0 - 239.255.255.255
E類: 11110+保留地址 240.0.0.0 - 247.255.255.255
TCP/IP上的每台主機還有一個32位子網路遮罩 :用來區分IP地址的網路號和主機號
將子網路遮罩和IP地址按位與可以得到IP地址的網路號,網路號是一台主機所處的網路的編號,
eg:主機IP:222.197.168.244 子網路遮罩是 255.255.255.0 按位與 = 222.197.168.0 ,那麼這台機所處的網路編號為222.197.168.0
近年來,隨著越來越多的電腦介入互連網,IP地址快耗盡。於是提出IPv6,使用128位來標識IP地址
4.連接埠
TCP,UDP協議採用16位連接埠號碼來識別他們。
連接埠號碼是一個無符號的整數,範圍是0-2的16次方 0- 65535
連接埠號碼分兩部分:
(1).保留連接埠,範圍0-1023,由權威機構規定用途 , 如:21TCP連接埠用於FTP協議。80TCP連接埠由HTTP協議專用。
5.IP協議
網路層最重要的協議
無論傳輸層使用何種協議,都要依靠IP協議來確認到達目的電腦的路由。
IP協議主要用來確定路由。
當到達同一個目的地有多個路由時,IP協議會選擇一條最短的路由將資料分組傳輸到目的電腦。
IP協議還定義一組規則:
(1),目的地不存在,不可達,丟棄傳送中的資料分組。
(2).定義資料儲存格式,叫做IP資料報,由IP首部和資料兩部分組成
6.使用者資料包通訊協定UDP
位於傳輸層,在網路層上在應用程式層下。UDP協議嚮應用程式提供一種面向不需連線的服務。不需要建立串連。
7.傳輸控制通訊協定TCP
TCP提供一個面向連結的,可靠的資料服務。
通訊過程:
(1).串連的發起包向目標電腦發送一個請求建立串連的資料包
(2).伺服器收到請求,對用戶端的同步訊號做出響應,並發送自己的同步訊號給用戶端
(3).用戶端對服務端發過來的同步訊號做出響應,串連建立完成,可以進行資料轉送了。
關閉:
(1);請求主機發送一個關閉串連的請求給另一方
(2);另一方收到關閉連結的請求後,發送一個接收請求的確認資料包,並關閉socket連結。
(3);請求主機手到確認資料包,發送一個確認資料包,告知另一方發送的確認包已收到,請求主機關閉他的socket串連。
8 通訊端編程
9.編寫安全的代碼
造成安全問題的原因:
使用者或管理員缺乏安全意識,TCP/IP協議固有缺陷,程式中的安全性漏洞。
威脅最大的是緩衝區溢位漏洞
(1).網路攻擊
常見的網路攻擊方法:
(1).掃描和探測
(2).監聽
(3).拒絕服務
(4).惡意軟體
(2).緩衝區溢位
向緩衝區內填充的資料超過了緩衝區的容量,溢出的資料覆蓋在了原來的合法資料上。
根本原因:C/C++語言不安全,沒有 機制檢查引用和數組,指標的邊界,導致越界訪問。
Linux中,進程在記憶體中的資料分為3部分:文本段,資料區段,堆棧段
文本段:可執行代碼和唯讀資料,通常屬性是唯讀
資料區段:存放全域變數,靜態變數,
堆棧段:臨時變數,函數參數在棧上,由malloc函數動態分配的記憶體稱為堆。
程式從外部接收輸入資料 -- 系統分配記憶體存放資料 (緩衝區)-- 當輸入超過緩衝區容量時,資料會儲存到緩衝區之後,覆蓋了原來緩衝區之外的合法資料。
防止緩衝區溢位:
對程式定義的緩衝區做嚴格的邊界檢查。
避免使用strcpy漏洞函數。使用strncpy或memcpy代替
(3).輸入檢查:
進一步學習:TCP/IP詳解 ,用TCP/IP進行網路互聯 ,UNIX網路編程
Linux C 程式 Linux網路編程(21)