本文主要介紹計算機網絡的基礎知識,爲之後網絡編程做基礎。html
學習網絡編程,應時刻銘記一條基本原則:java
「網絡是不可靠的,數據包是可能丟失的」數據庫
0. 概念編程
ISP,Internet Service Provider,因特網服務提供商,是由多個分組交換機和通訊鏈路組成的網絡,提供多種不一樣類型的網絡接入。緩存
1. 網絡分層模型服務器
OSI模型markdown
{物理層,數據鏈路層}-{網絡層}-{傳輸層}-{會話層,表示層,應用層}
Open System Interconnection(開放式系統互聯模型),OSI規範不一樣操做系統的互聯標準,使兩個不一樣的系統可以較容易的通訊而不須要改變底層的硬件或軟件的邏輯。網絡
- 應用層(Application Layer):網絡應用程序及應用層協議,文件服務、電子郵件等;
- 表示層(Presentation Layer):完成一些特定的功能,數據格式化、加解密、代碼轉換等;
- 會話層(Session Layer):容許不一樣機器上的用戶(端點)之間創建會話關係;
- 傳輸層(Transport Layer):應用程序端點到端點(源端和目的端機器上的對等實體)之間傳送應用層報文,從會話層接收數據,並傳輸給網絡層,同時確保到達目的端的各段信息正確無誤,並且使會話層不受硬件變化的影響;加強網絡層服務質量;
- 網絡層(Network Layer):肯定分組從源端到目的端的路由選擇,主機到主機的數據包傳送;
- 數據鏈路層(Data Link Layer):數據鏈路層:創建相鄰結點之間的數據鏈路、增強物理層的功能,錯誤檢測機制提供數據幀在信道上無差錯傳輸,經過路由器在源/目的地址之間轉發分組(傳輸有地址的幀);
- 媒體訪問控制(Medium Access Control,MAC)子層:制定如何使用傳輸媒體的通訊協議;
- 邏輯鏈路控制(Logical Link Control,LLC)子層:控制信號交換、數據流量控制;
- 物理層(Physical Layer):物理層:創建在物理通訊介質的基礎上,做爲系統和通訊介質的接口,用來實現數據鏈路實體間透明的比特流傳輸(轉發鏈路層分組,以二進制流數據的形式在物理媒介上傳輸數據)。
其中,物理層爲真實物理通訊,其它各層爲虛擬通訊。負載均衡
TCP/IP模型dom
{網絡接口層}-{網絡層IP}-{傳輸層TCP/UDP}-{應用層<協議: FTP,SMTP,TELENT>}
TCP/IP(傳輸控制協議/因特網互聯協議,網絡通信協議),Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層-IP協議和傳輸層-TCP協議組成,工業標準的協議集、爲廣域網(WANs)設計。TCP/IP指因特網整個TCP/IP協議族,定義主機如何連入因特網及數據如何傳輸的標準。TCP/IP協議參考模型把全部的TCP/IP系列協議歸類到四個抽象層中,每一抽象層創建在低一層提供的服務上併爲高一層提供服務(第N層:服務提供者,第N+1層:服務用戶)。
- 應用層(Application Layer):高層協議
- 傳輸層(Tramsport Layer):源端和目的端機器上的對等實體進行會話、數據傳輸
- 網絡層(Internet Layer):核心關鍵部分,負責網絡通訊,該層使用因特網協議(IP,Internet Protocol)
- 網絡接口層(Network Access Layer):指定主機必須使用某種協議與網絡相連
組件工做層級
- 物理層:網卡,網線,集線器,中繼器,調制解調器;
- 數據鏈路層:網橋,交換機
- 網絡層:路由器;
- 第四層傳輸層及其以上:網關;
協議配置測試
- ipconfig /all:全部的網絡配置信息;
- ping IP地址:鏈接性判斷;
- nslookup:DNS解析信息;
2.報文(頭)
數據封裝格式
首先數據會封裝到TCP的Segment中,而後TCP的Segment會封裝到IP的Packet中,而後再封裝到以太網Ethernet的Frame中,傳到目的端後,各個層根據本身的協議解析數據、再把數據交給更高層的協議處理:
- 第二層:幀 - Frame
- 第三層:包 - Packet
- 第四層:(報文)段 - Segment
MSS = MTU - IP頭 - TCP頭(以字節爲單位)
- MTU:Maximum Transmission Unit,最大傳輸單元,即最大數據包大小;
- MSS:Maximum Segment Size,最大報文段,TCP數據包每次可以傳輸的最大數據段大小,MSS限制TCP包攜帶數據的大小
一個通訊鏈接須要一個五元組(協議 + src_ip, src_port, dest_ip, dest_port)來表示是同一個鏈接:
- IP層報頭:指明源主機和目的主機地址
- TCP/UDP層報頭:指明主機上的源端口和目的端口
IP報文頭格式
[1] IPv4格式
- Header Length:IP包頭長度,最小20字節、最大60字節;
- Time To Live:生存時間(TTL),IP包的TTL隨路由的轉發遞減,當TTL=0時,IP包丟棄,防止因爲路由環路而致使IP包在網絡中不停被轉發;
- Protocol:協議,標識上層所使用的協議;
- 校驗和:頭部校驗(Header Checksum),IP頭部的正確性檢測,但不包含數據部分;
[2] IPv4 - IPv6
TCP報文頭格式
- Sequence Number:32位同步序列號,標識報文段第一個數據字節在數據流中的序號,重組報文段、解決報文段亂序的問題;
- Acknowledgment Number:32位確認序列號,標識接收端指望收到的下一個序號(上次已成功收到數據字節序號加1),解決不丟包的問題,前提是標誌位ACk=1;
- Data Offset:數據偏移,TCP首部長度(默認:5 * 單位4字節 = 20字節,最大:15 * 單位4字節 = 60字節);
- SYN:標誌位,同步序號,用來創建鏈接(鏈接請求:SYN=1,ACK=0;鏈接響應:SYN=1,ACK=1;);
- ACK:標誌位,數據正確接收確認信號;
- FIN:標誌位,關閉鏈接信號;
- Window:Advertised-Window,滑動窗口(Sliding Window),用於解決流控;
- 校驗和:差錯控制,校驗和的計算包括TCP首部、數據和其餘填充字節;
UDP報文頭格式
- 包長度:UDP首部的長度和UDP數據長度之和;
- 校驗和:對UDP數據的差錯檢驗,UDP協議提供的惟一可靠機制,校驗和的計算包括UDP頭部和僞頭部;
- 僞首部:並非報文真正的首部,用於計算檢驗和、在UDP報文前增長12個字節的僞首部,既不向下傳送也不向上遞交;
參考:協議森林系列;
3. 協議
協議,Protocol,定義2個或多個通訊實體之間數據交換的報文格式和次序以及在報文的傳輸、接收等方面所採起的動做。
應用層
- DNS(Domain Name Service):域名解析服務,域名 ---> IP地址,port=53;
- HTTP(Hypertext Transfer Protocol):超文本傳輸協議,實現互聯網WWW服務,port=80;
- FTP(File Transfer Protocol):文件傳輸協議,上傳下載服務,數據端口=20,控制端口=21;
- SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協議,控制信件的發送、中轉,port=25;
- Telnet服務:用戶遠程登陸服務,明碼傳送、保密性差、簡單方便,port=23;
- NFS(Network File System):網絡文件系統,網絡中不一樣主機間的文件共享;
網絡層
- IP:Internet Protocol,網絡互連協議,網絡層核心,IP數據報是無鏈接服務。在相互鏈接的網絡之間傳遞IP數據報:[1]. 尋址和路由;[2]. 分段和重組。
- ICMP:Internet Control Message Protocol,Internet控制報文協議。ICMP包發送是不可靠的,Ping命令發送ICMP的echo包,經過回送的echo relay進行網絡測試。
傳輸層
- TCP:Transmission Control Protocol,傳輸控制協議。面向鏈接、可靠、基於字節流的傳輸層協議。端到端,超時重發和流量控制。支持Telnet遠程登錄、FTP文件傳輸協議、SMTP簡單郵件傳輸協議。
- UDP:User Datagram Protocol,用戶數據報協議。面向無鏈接、提供面向事務的不可靠信息傳送服務。無超時重發等機制,速度快。支持NFS網絡文件系統、SNMP簡單網絡管理協議、DNS域名系統、TFTP簡單文件傳輸協議。
數據鏈路層
- ARP:Address Resolution Protocol,正向地址解析協議,IP地址 ---> MAC地址
- RARP:Reverse Address Resolution Protocol,反向地址解析協議,MAC地址 ---> IP地址
- HDLC:High-Level Data Link Control,高級數據鏈路控制。在同步網上傳輸數據、面向比特的數鏈路協議。數據報文可透明傳輸,用於實現透明傳輸的「0比特插入法」易於硬件實現。
- IPX:Internetwork Packet Exchange protocol,互聯網數據包交換協議。32bit網絡號+48bit節點號。
- FDDI: Fiber Distributed-Data Interface,光纖分佈式數據接口。FDDI協議基於令牌環(Token-ring network,環形拓撲)協議,支持長距離和多用戶。
- Ethernet: 以太網,採用CSMA/CD (Carrier Sense Multiple Access with Collision Detection,帶衝突檢測的載波監聽多路訪問技術協議),應用在OSI第2層數據鏈路層。總線拓撲。
- WiFi:鏈路層協議最重要的協議就是以太網(Ethernet)和WiFi;
4. IP地址
A類:1.0.0.1-127.255.255.254;
B類:128.1.0.1-191.255.255.254;
C類:192.0.1.1-223.255.255.254;
D類:’1110’開始,保留段,用於多點廣播;
注:全零(0.0.0.0)地址表示整個網絡,即網絡中的全部主機(全部不清楚的主機和目的網絡),全1(255.255.255.255)地址是當前子網的廣播地址。
5. DNS
Domain Name System,域名系統(分佈式數據庫),DNS服務器由域名解析器(域名->IP地址)和域名服務器組成,域名必須對應一個IP地址,而IP地址不必定有域名。
- host ip:IP->域名;
- host domainName:域名->IP
特色
- 使用高速緩存、加快查詢速度;
- 支持TCP和UDP兩種協議的查詢方式,UDP查詢爲主;
6. HTTP狀態碼
2XX:成功
3XX:重定向
4XX:請求錯誤
- 401:未受權 (Unauthoried)
- 403:禁止訪問 (Forbidden)
- 404:找不到頁面 (Not Found)
5XX:服務器錯誤
- 500:內部錯誤
- 502:網關錯誤
- 503:服務器不可用
- 504:網關超時
7. 虛擬IP + ARP協議
虛擬IP地址(VIP) 是一個不與特定計算機或一個計算機中的網絡接口卡(NIC)相連的IP地址。數據包被髮送到這個VIP地址,可是全部的數據最終仍是通過真實的網絡接口。
優勢:實現負載均衡,加強網絡管理,充分利用VLAN優點,優化網絡結構,合理分配網絡資源,方便用戶分組管理。
原理:TCP/IP的ARP協議。IP地址只是一個邏輯地址,在以太網中MAC地址纔是真正數據傳輸的物理地址,每臺主機中都有一個ARP高速緩存,存儲同一個網絡內的IP地址與MAC地址的對應關係,以太網中的主機發送數據時會先從這個緩存中查詢目標IP對應的MAC地址,而後向這個MAC地址發送數據,操做系統會自動維護這個緩存。
具體參考:虛擬IP原理
ARP
Address Resolution Protocol(地址解析協議),根據IP地址獲取物理MAC地址的一個TCP/IP協議。一般ARP協議只適用於局域網。
在TCP/IP模型中,ARP協議屬於IP層;在OSI模型中,ARP協議屬於鏈路層。
在創建TCP鏈接前,必須先進行ARP請求和應答。
爲了減小頻繁ARP廣播次數、下降網路通量,提升通訊效率,在路由器、主機、交換機上維護ARP高速緩存表(IP ---> MAC)
- 查看ARP緩存表:arp -a
- 清空緩存表:arp -d
- 在緩存表中手動指定映射對(IP-MAC):arp -s
可是,ARP緩存會有以下的問題:
(1)免費ARP
主機發送ARP廣播查找本身的IP地址,即向所在網絡請求本身的MAC地址。
- 查找是否有IP重複
- 更新同一網段內其餘主機ARP高速緩存中舊的MAC地址:主備切換、負載均衡
- 防止ARP攻擊或進行ARP攻擊
(2)ARP欺騙
向目標主機發送僞造的應答ARP,並使目標主機接收應答中僞造的IP地址與MAC地址之間的映射對,以此更改同一網段內主機ARP緩存中網關的映射,將其緩存映射爲一個不存在的MAC地址,致使網絡ping不通。
- 主機級主動檢測(免費ARP):能夠防止或緩解ARP攻擊
- 主機級被動檢測:當接收到來自局域網上的ARP請求時,檢查該請求發送端IP地址是否與本身IP地址相同。若相同,說明該網絡上有主機與本身IP相同
- 服務器級檢測:利用反向地址解析協議(RARP),讓發送端發送RARP請求回答其IP
- 網絡級檢測
(3)代理ARP
經過使用一個主機(一般爲router),讓指定的設備使用本身的MAC地址對另外一設備的ARP請求做出應答。
- PC1和PC2屬於不一樣廣播域、但處於同一網段中,PC1向PC2發出ARP請求廣播包,請求得到PC2的MAC地址。因爲路由器不會轉發廣播包,所以ARP請求只能到達路由器,不能到達PC2。
- 當在路由器上啓用ARP代理後,路由器會查看ARP請求,發現PC2的IP地址屬於它鏈接的另外一個網絡,所以路由器用本身的MAC地址xxx代替PC2的MAC地址,向PC1發送了一個ARP應答。
- PC1收到ARP應答後,會認爲PC2的MAC地址就是xxx,不會感知到ARP代理的存在。
適用於沒有配置默認網關和路由策略的網絡上。
具體參考:淺談ARP協議以及應用;TCP/IP協議——ARP詳解
兩臺計算機有相同的IP地址會發生什麼狀況?兩臺計算機有相同的MAC地址會發生什麼狀況?
參考: