目錄
網絡編程的基礎是計算機網絡,計算機網絡可以展開講很多,這裏只是 概括的講述計算機網絡體系的基本知識。
基本概念
計算機網絡
通信的鏈路(分爲有線/無線鏈路)連接到一起的一組計算機/設備的集合,通信技術與計算機技術的產物。
以太網、因特網、互聯網、萬維網都是啥?
以太網 Ethernet
- 最早是有XEROX公司在20世紀70年代提出的一個基帶局域網標準 傳輸速率是10Mbit/S.選用介質爲同軸電纜.採用CSMA/CD作爲MAC層控制協議。
因特網 Internet
- 世界上最大的信息網, 用戶可以實現全球範圍內的電子郵件.WWW.信 息查詢 電子郵件 文件傳輸.網絡娛樂.語音與圖象通信服務等功能.因特網前身是美國國防部高級研究計劃署(ARPA)的軍用實驗網絡, 名字爲ARPANET,起初只有4臺主機.分別位於美國國防部.原子能委員會.加州理工大學和麻省理工大學 經過幾十年發展就達到今天的規模。
互聯網internet
- 概念就廣了,局域網什麼的都可以是互聯網,應該說2臺以及2臺以上電腦組成的網絡都稱爲互聯網。
萬維網(World Wide Web)
- 只要應用層使用的是HTTP協議,就稱爲萬維網(World Wide Web)。之所以在瀏覽器裏輸入http://www.aorb.org時,能看見矛盾網提供的網頁,就是因爲您的個人瀏覽器和矛盾網的服務器之間使用的是HTTP協議在交流。
互聯網、因特網、萬維網三者的關係是:互聯網 包含 因特網 包含 萬維網。
網絡分類
根據網絡規模分爲:
- 局域網(LAN):local area network
- 城域網 (MAN) :metropolitan area network
- 廣域網 (WAN): wide area network
網絡體系結構
劃分結構的目的:
- 爲網絡硬件、軟件、協議提供標準。eg: OSI (open system internection)
分層
- 計算機網絡的複雜使其有了分層-----‘分而治之’,不同層之間的通訊需要接口。
接口分爲兩種:
- 服務:同意計算機不同層之間的。垂直的接口
- 協議:與另一臺計算機定義的對交接口。
協議:
- 計算機網絡中,爲進行網絡數據交換而創建的規則,(涵蓋:語法、語義、同步(事件實現匹配及順序))
- 爲了使兩個不同實體能夠正確的進行通信,通常需要一系列相互協調的工作協議,如:TCP/IP協議族。
關於協議,就像英語,法語,日語的人互相無法交流一樣,不同的公司制定不同的協議,顯然是無法進行高效溝通的,爲解決這個問題,ISO(International Organization for Standards) 國際標準化組織,制定了OSI國際化標準,對通信系統及逆行了標準化。OSI雖然現在沒有普及,但是爲其他網絡協議的制定提供了指導。
OSI七層:
初期不同廠商有不同的網絡體系結構。1979年 國際化組織ISO 創立七層協議標準。
分層並不是真的有這麼幾層,只是概念上的標準框架。
下圖簡述各層的功能及相對應的協議。
細細展開每一層都可以講很多,不再細數。
比較重要的有:
- 應用層:HTTP DNS FTP SNMP
- 傳輸層:TCP UDP
- 網絡層:IP ICMP
- 數據鏈路層:ARP RARP
- 物理層:瞭解
IP協議 :
位於網絡層,由於其重要地位,又把網絡層叫IP層,提供網絡傳送的最基本任務。同時也是實現網絡互聯的基本協議,除了ARP, RARP報文外,幾乎所有數據都要經過IP傳輸。
IP主要特點如下:
- 點對點協議,雖然IP數據報攜帶源IP地址和目的IP地址,但進行數據傳輸的對等實體一定是同一物理網絡的對等實體。
- 不保證可靠性,不對數據進行差錯校驗和跟蹤,當數據報發生損壞時不向發送方通告,如果要求數據傳輸具有可靠性,則要在IP層上加其他協議加以保證。
- 無連接數據報服務,各個數據報獨立傳輸,可能沿着不同路徑到達目的地,也可能不會按序到達目的地。
IP數據報的分片與重組:
IP數據報從信源到信宿的傳輸過程中,往往要穿過多個不同的物理網絡,即每個IP數據報都通過底層物理網絡進行傳輸,那麼問題來了,不同的物理網絡存在差異,對傳輸幀的最大長度有不同規定。每種物理網絡有其自身最大傳輸單元MTU(Maximum Transfer Unit),所以TCP/IP 引入了IP數據報動態分片技術。
應用層(源原數據) ---->傳輸層(TCP報文) ----> 網絡層(IP數據報)----> 數據鏈路層(封裝成MAC幀) ---->物理層(‘0101’比特流)
怎麼個分片,就是下圖這個意思:
注意:分片可以發生在信源到信宿的任何一臺路由器上進行,且數據包在傳輸過程中只進行分片,不進行重組。
分片重組:
只發生在信宿,過程如下:
- 開始重組時會引入重組定時器來規定重組時間,首先啓動重組定時器。
- 將相同標識,協議號,信源地址、目的地址的各分片根據分片首部中的相關字段(標誌、片偏移和總長度)信息,將他們重新組成完整的原始數據報。
- 最後將重組的IP數據報按照上層協議標識字段中的協議號提交給上層相應的協議模塊。
- 如果重組定時器超時且未完成重組操作,信宿將丟棄該數據報,產生超時錯誤返回給信源。
補充:路由器轉送時只涉及下三層(網絡層,鏈路層,物理層)
一些常見計算機網絡名詞(乾貨):
- MAC地址:在設備與設備之間數據通信時用來標記收發雙方(網卡的序列號)
- IP地址:在邏輯上標記一臺電腦,用來指引數據包的收發方向(相當於電腦的序列號)
- 網絡掩碼:用來區分ip地址的網絡號和主機號
- 網關:負責網絡層以上數據的中繼,實現不同體系結構的網絡協議轉換。
- 默認網關:網絡層概念,PC本身不具備尋址功能,當需要發送的數據包的目的ip不在本網段內時,就會發送給默認的一臺電腦,稱爲網關,可在路由上,交換機上,防火牆上,服務器上。
- 集線器:物理層,已過時,用來連接多態電腦,缺點:每次收發數據都進行廣播,網絡會變的擁堵
- 網橋:鏈路層,解決集線器多借口衝突域問題。
- 交換機:鏈路層,多接口網橋,有學習功能知道需要發送給哪臺設備,根據需要進行單播、廣播
- 路由器:網絡層,隔離衝突,隔離廣播,連接多個不同的網段,讓他們之間可以進行收發數據,每次收到數據後,ip不變,但是MAC地址會變化。
- 網段:使用同一個物理層設備通訊的一組設備。192.168.0.1----192.168.255.255
- DNS:用來解析出IP(類似電話簿)
- http服務器:提供瀏覽器能夠訪問到的數據
IP地址及相關
IP地址:
同一物理網絡中不同機器之間可通過硬件地址,如網卡的MAC地址定位對方從而進行通信。
IP地址:統一因特網中所有物理設備的編址,即:是對連接在互聯網中設備進行唯一標識的設備碼。
IPV4:IP地址32位2進制組成。(與電腦64位,32位不一回事,IP可不會因爲你是64位CPU而變,別搞混咯)
32位分四段,每段8位,然後每8位轉換爲10進制。
eg: 192.168.1.4
爲了便於管理 IP地址分爲網絡地址和主機地址。
同一個物理網絡上所有主機網絡地址相同。
A類IP地址
一個A類IP地址由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是“0”,
地址範圍1.0.0.1-126.255.255.254
二進制表示爲:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
可用的A類網絡有126個,每個網絡能容納1677214個主機
B類IP地址
一個B類IP地址由2個字節的網絡地址和2個字節的主機地址組成,網絡地址的最高位必須是“10”,
地址範圍128.1.0.1-191.255.255.254
二進制表示爲:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
可用的B類網絡有16384個,每個網絡能容納65534主機
C類IP地址
一個C類IP地址由3字節的網絡地址和1字節的主機地址組成,網絡地址的最高位必須是“110”
範圍192.0.1.1-223.255.255.254
二進制表示爲: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
C類網絡可達2097152個,每個網絡能容納254個主機
D類地址用於多點廣播
D類IP地址第一個字節以“1110”開始,它是一個專門保留的地址。
它並不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中
多點廣播地址用來一次尋址一組計算機 s 地址範圍224.0.0.1-239.255.255.254
E類IP地址
以“1111”開始,爲將來使用保留
E類地址保留,僅作實驗和開發用
私有ip
在這麼多網絡IP中,國際規定有一部分IP地址是用於我們的局域網使用,也就
是屬於私網IP,不在公網中使用的,它們的範圍是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
IP地址127.0.0.1~127.255.255.255用於迴路測試,
如:127.0.0.1可以代表本機IP地址,用http://127.0.0.1
就可以測試本機中配置的Web服務器。
子網和子網地址
IPv4的IP地址方案中,最初次啊用了網絡地址和主機地址兩級結構,然而在實際組網過程中,常常出現C類地址主機編址空間不夠用,而用B,A類地址又造成IP地址浪費。爲此,人們在兩級地址的基礎上提出了三級地址。
引入子網後,原來兩級地址中的主機地址分爲子網地址和主機地址。子網地址所佔地址位數要根據子網實際的規模來定。
若子網內主機數量較多,則子網地址位數相對較少,主機地址位數多。反之,則子網多主機少。
子網掩碼
是一個32位的地址掩碼,對應於網絡地址和子網地址的地址掩碼位設置爲‘1’, 對應於主機地址的地址掩碼位設置爲‘0’,這樣,獲得的子網地址的方法是將子網掩碼和IP地址進行按位與運算。(上圖可見)
子網劃分:
子網的劃分通過子網掩碼來確定,子網掩碼又取決於子網的規模和主機數量,子網的劃分過程也就是子網掩碼的確定過程,同城步驟如下:
- 根據需要確認子網的個數。
- 根據需要確認每個子網的主機數量。
- 根據子網數量和主機數量,確定子網掩碼。
- 確定每個子網的網絡地址。
- 確定每個子網上可以使用的主機地址範圍。
超網:
A、B類網絡地址初期的大量分配,造成其資源的緊張,一些中型網絡的需求又超過一個C類地址,因此考慮把幾個C類地址段合併成一個大型網絡的方法就是超網。
與子網相反,超網是借用一部分網絡地址位作爲主機位,從而達到減小因特網路由表的目的。
IPv6 (瞭解):
下一代因特網協議,用來代替現行的IPv4的一種新的網際協議。
特點:將現有IPv4地址長度擴大了4倍,32位---->128位,支持大量的網絡節點。
移動IP: (移動設備,爪機,pad ...)
一種計算機網絡通信協議,顧名思義,能保證計算機移動過程中,在不改變現有IP地址,不中斷正在執行的網絡應用的情況下對現有網絡不斷訪問。待續。。。
關於地址轉換
DNS 域名解析,顧名思義,不再贅述。
- www.baidu.com --> 180.101.49.11
ARP 地址解析,IP ----> MAC
IP地址是邏輯地址,數據最終還是在物理設備上傳輸的,使用的還是物理地址(MAC),因此因特網在網絡層是用IP地址的同時,在物理網絡中依然使用物理地址,即網絡中存在兩套地址。如此,兩套地址之間就必須建立映射關係。否則無法工作,就像你的暱稱和真實名字一樣,沒有身份認證,怎麼找到你,給你送溫暖啊?
地址映射的兩種方式:
- 靜態映射:主要採用地址映射表實現IP 與 物理地址的映射。該映射表一般以人工方式建立維護。(人工哎,不行)
- 動態映射:在需要獲取映射關係時利用網絡通信協議直接從其他主機獲得IP和物理地址的映射關係。(採用)TCP/IP協議簇中通過ARP/RARP兩個協議來實現地址映射。
RARP 逆地址解析,物理地址 ----> IP地址
網絡上有些主機自己的IP都不知道,RARP就是做這個的。
爲了避免本文更加臭長,ARP 與 RARP 具體實現就不展開說了。
端口
通過IP可以定位通信對方,而端口可以定位具體的某個進程(程序)。
通俗理解比如叫外賣,IP就是你的宿舍樓號,而端口是你的門牌號。
如果一個程序需要收發網絡數據,那麼就需要有這樣的端口
在linux系統中,端口可以有65536(2的16次方)個之多!
既然有這麼多,操作系統爲了統一管理,所以進行了編號,這就是端口號
知名端口(Well Known Ports)
知名端口是衆所周知的端口號,範圍從0到1023
80端口分配給HTTP服務
21端口分配給FTP服務
可以理解爲,一些常用的功能使用的號碼是估計的,好比 電話號碼110、10086、10010一樣。
一般情況下,如果一個程序需要使用知名端口的需要有root權限。
動態端口(Dynamic Ports)
動態端口的範圍是從1024到65535
之所以稱爲動態端口,是因爲它一般不固定分配某種服務,而是動態分配。
動態分配是指當一個系統程序或應用程序程序需要網絡通信時,它向主機申請一個端口,主機從可用的端口號中分配一個供它使用。
當這個程序關閉時,同時也就釋放了所佔用的端口號。
怎樣查看端口 ?
- 用“netstat -an”查看端口狀態
- lsof -i [tcp/udp]:2425
關於socket 及更多 ,請看 Python網絡編程
更多python相關:https://blog.csdn.net/Scrat_Kong/article/details/90257118