1、數據交換
1.1、最早的廣域網(電路交換)
在通信雙方或多方之間,通過電路交換建立電路連接的網絡
電路交換網特點:
1、建立鏈接->使用鏈接->釋放鏈接
2、物理通路被通信雙方獨佔
計算機數據是突發式出現在數據鏈路上的,而電路交換網的建立鏈接、使用鏈接、釋放鏈接的三個過程使得傳
輸效率太低,故電路交換不適合傳輸計算機數據。
1.2、分組交換(又稱存儲轉發交換,報文交換)
每一小塊必須包含一個首部
首部:
1、該數據在原始數據中的位置(方便數據重組)
2、目的主機的地址信息(方便數據傳輸)
交換方式(存儲-轉發)
節點收到分組,先暫時存儲下來,再檢查其首部,按
照首部中的目的地址,找到合適的節點轉發出去
特點:
1、以分組作爲傳輸單位
2、獨立的選擇轉發路由
3、逐段佔用,動態分配傳輸帶寬
2、網絡的分層結構
2.1、七層模型:OSI/RM開放互聯模型(理論上的標準)
應用層:應用層協議APP
表示層:將計算機能識別的二進制 轉換成人能識別的數據
會話層:分析數據的通信狀態
傳輸層:進程和進程的通信(端口信息)
網絡層:主機與主機之間的通信(IP地址)
數據鏈路層:收發的完整幀數據(在網絡上獨立傳輸)mac地址(設備地址)
物理層:不是物理設備,而是物理設備上的接口類型、電流強弱
2.2、四層模型:TCP/IP協議
TCP/IP協議在一定程度上參考了OSI的體系結構。OSI模型共有七層,從下到上分別是物理層、數據鏈路層、網絡層、運輸層、會話層、表示層和應用層。但是這顯然是有些複雜的,所以在TCP/IP協議中,它們被簡化爲了四個層次。
(1)應用層、表示層、會話層三個層次提供的服務相差不是很大,所以在TCP/IP協議中,它們被合併爲應用層一個層次。
(2)由於運輸層和網絡層在網絡協議中的地位十分重要,所以在TCP/IP協議中它們被作爲獨立的兩個層次。
(3)因爲數據鏈路層和物理層的內容相差不多,所以在TCP/IP協議中它們被歸併在網絡接口層一個層次裏。只有四層體系結構的TCP/IP協議,與有七層體系結構的OSI相比要簡單了不少,也正是這樣,TCP/IP協議在實際的應用中效率更高,成本更低。
應用層:應用層的協議有FTP、Telnet、HTTP
傳輸層:進程和進程間的通信(端口信息)TCP、UDP
網絡層:主機與主機之間的通信(TP地址)IP、ICMP
鏈路層:收發完整的數據幀(在網絡上獨立傳輸)mac地址(設備地址)ARP(地址解析協議)RARP(將MAC物理地址轉換成IP地址)
3、協議的說明
3.1、IP協議 網際協議(網絡層)
在一個相互連接的網絡系統上從源地址到目的地傳輸數據包(互聯網數據包)所提供必要功能的協議
儘量將數據從源地址 發送 目的地
特點:
不可靠:它不能保證IP數據包能成功地到達它的目的地,僅提供盡力而爲的傳輸服務
無連接:IP並不維護任何關於後續數據包的狀態信息。每個數據包的處理是相互獨立的。IP數據包可以不按發送順序接收
IP數據包中含有發送它主機的IP地址(源地址)和接收它主機的IP地址(目的地址)
3.2、TCP協議 傳輸控制協議 (傳輸層)
TCP是一種面向連接的,可靠的傳輸層通信協議
功能:
提供不同主機上的進程間通信
特點:
1、建立鏈接->使用鏈接->釋放鏈接(虛電路)
2、TCP數據包中包含序號和確認序號
3、對包進行排序並檢錯,而損壞的包可以被重傳
服務對象:
需要高度可靠性且面向連接的服務
如HTTP、FTP、SMTP等
總結:TCP 面向鏈接 可靠 排序 檢錯 失敗重傳 不支持廣播
3.3、UDP協議 用戶數據報協議 (傳輸層)
UDP是一種面向無連接的傳輸層通信協議
功能:
提供不同主機上的進程間通信
特點:
1、發送數據之前不需要建立鏈接
2、不對數據包的順序進行檢查
3、沒有錯誤檢測和重傳機制
服務對象
主要用於“查詢—應答”的服務
如:NFS、NTP、DNS等
總結:UDP 無連接 不排序 不檢錯 不重傳 快 支持廣播
4、地址介紹
4.1、mac地址(鏈路層) 設備和設備的通信(48位6個字節,12個16進制數)
MAC地址,用於標識網絡設備(網絡接口卡NIC(網卡)),類似於身份證號,且理論上全球唯一。
組成:以太網內的MAC地址是一個48bit的值
4.2、IP地址IPv4 (網絡層) 主機 和 主機 (32位)
ip地址組成:使用32bit,由{網絡ID,主機ID}兩部分組成
子網ID:IP地址中由子網掩碼中1覆蓋的連續位
主機ID:IP地址中由子網掩碼中0覆蓋的連續位
IP和子網掩碼一起使用:
案例:192.168.0.111/255.255.255.0 子網ID192.168.0 主機ID 111
案例:192.168.0.111/255.255.0.0 子網ID 192.168 主機ID0.111
案例:192.168.0.111/255.0.0.0 子網ID 192 主機ID168.0.111
子網ID:標記網絡網段 192.168.0.111/255.255.255.0 192.168.0.112/255.255.255.0
主機ID:標記同一網段下的主機號
總結:子網ID標記的是屬於哪個網段, 主機ID標識的是網段下具體的主機號
192.168.0.111/255.255.255.0 == 192.168.0.111/24
192.168.0.111/255.255.0.0 == 192.168.0.111/16
192.168.0.111/255.0.0.0 == 192.168.0.111/8
案例:192.168.0.111/24 子網ID192.168.0 主機ID 111
案例:192.168.0.111/16 子網ID 192.168 主機ID0.111
案例:192.168.0.111/8 子網ID 192 主機ID168.0.111
ip地址特點:不同網段 不能直接通信
子網ID不同的網絡不能直接通信,如果要通信則需要路由器轉發
主機ID全爲0的IP地址 表示 網段地址。
主機ID全爲1的IP地址 表示該 網段的廣播地址。
案例:192.168.0.111/255.255.255.0 問當前IP所處網段地址__192.168.0.0__ 以及 廣播地址___192.168.0.255__
注意:任何一個網段中的網段地址和廣播地址 都不能分配主機
192.168.0.1~192.168.0.254 == 可用的IP數量 只有254個
案例:192.168.0.111/255.255.0.0 問當前IP所處網段地址_192.168.0.0_ 以及 廣播地址_192.168.255.255__可用的主機數1~65534 可用的IP數量有65534個
5、IP地址分類(更加合理的利用IP地址)
5.1、按網段分
A類地址:默認8bit子網ID,第一位爲0 廣域網(國家-國家,大城市-大城市)
0xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.0.0.0
B類地址:默認16bit子網ID,前兩位爲10 城域網(城市-城市)
10xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.255.0.0
C類地址:默認24bit子網ID,前三位爲110
110x xxxx xxxx xxxx xxxx xxxx xxxx xxxx/255.255.255.0 局域網
D類地址:前四位爲1110,多播地址
E類地址: 前五位爲11110,保留爲今後使用
A,B,C三類地址是最常用的
5.2、是否可直接連接Internet
公有IP(可直接連接Internet)
經由InterNIC所統一規劃的IP
私有IP(不可直接連接Internet )
主要用於局域網絡內的主機聯機規劃
6、迴環地址(主要是測試本機的網絡配置)
功能
主要是測試本機的網絡配置,能ping通127.0.0.1說
明本機的網卡和IP協議安裝都沒有問題
注意
127.0.0.1~127.255.255.254中的任何地址都將回環到本地主機中
不屬於任何一個有類別地址類,它代表設備的本地虛擬接口
設置Linux IP sudo ifconfig eth0 192.168.0.222 netmask 255.255.255.0
7、子網掩碼
子網掩碼(subnet mask)又叫網絡掩碼、地址掩碼是一個32bit由1和0組成的數值,並且1和0分別連續。
特點
必須結合IP地址一起使用,不能單獨存在
IP地址中由子網掩碼中1覆蓋的連續位爲子網ID,其餘爲主機ID
子網掩碼的表現形式
192.168.220.0/255.255.255.0 ==> 11111111.11111111.11111111.00000000
192.168.220.0/24
手動進行配置如下(linux)
sudo ifconfig et0 192.168.0.1 netmask 255.255.255.0
案例: 一下合法的子網掩碼有哪些?ABD
A:255.255.0.0 B:255.0.0.0 C:255.0.255.0 D:255.255.255.128
D:255.255.255.0==>11111111 11111111 11111111 10000000
8、端口
TCP/IP協議採用端口標識通信的進程。
用於區分一個系統裏的多個進程
特點:
1、對於同一個端口,在不同系統中對應着不同的進程
2、對於同一個系統,一個端口只能被一個進程擁有
3、一個進程擁有一個端口後,傳輸層送到該端口的數據全部被該進程接收,
同樣,進程送交傳輸層的數據也通過該端口被送出
8.1、端口號:
類似進程pid標識一個進程;在網絡程序中,用端口號(port)來標識一個運行的網絡程序
特點:
- 1、端口號是無符號短整型的類型
2、每個端口都擁有一個端口號
3、TCP、UDP維護各自獨立的端口號
4、網絡應用程序,至少要佔用一個端口號,也可以佔有多個端口號
8.2、端口的分類
知名端口(1~1023)
由互聯網數字分配機構(IANA)根據用戶需要進行統一分配
例如:FTP—21,HTTP—80等
服務器通常使用的範圍; 若強制使用,須加root特權
動態端口(1024~65535)
應用程序通常使用的範圍
注意
端口號類似於進程號,同一時刻只能標誌一個進程
可以重複使用
9、數據在各層的組包、解包
9.1、mac頭:
9.2、IP、TCP、UDP頭:
10、字節序的概念(重要)
字節序概念:
是指多字節數據的存儲順序(多個字節看成一個整體處理)
分類:
小端格式:將低位字節數據存儲在低地址
大端格式:將高位字節數據存儲在低地址
注意
LSB:低地址
MSB:高地址
注意:大小端 是系統自動確定
問題:如何確定當前系統是大端存儲 還是 小端存儲?
#include <stdio.h>
typedef union
{
//共用體 成員公用一個空間
unsigned short data;
unsigned char buf[2];
}DATA;
int main(int argc, char *argv[])
{
printf("%d\n",sizeof(DATA));
DATA ob;
ob.data = 0x0102;
//如果buf[0]=0x01大 buf[0]=0x02
if(ob.buf[0]==0x01 && ob.buf[1]==0x02)
{
printf("大端格式\n");
}
else if(ob.buf[0]==0x02 && ob.buf[1]== 0x01)
{
printf("小端格式\n");
}
return 0;
}
運行結果:
11、開發流程
通信流程:決定了寫代碼的流程
通信原理:協議 決定了 每一步 組啥樣的報文
TCP—面向連接:
電話系統服務模式的抽象
每一次完整的數據傳輸都要經過建立連接、使用連接、終止連接的過程
本質上,連接是一個管道,收發數據不但順序一致,而且內容相同
保證數據傳輸的可靠性
UDP—面向無連接:
郵件系統服務模式的抽象
每個分組都攜帶完整的目的地址
不能保證分組的先後順序
不進行分組出錯的恢復和重傳
不保證數據傳輸的可靠性
你瞭解網絡通信架構:C/S(客戶端/服務器) B/S(瀏覽器/服務器)
server工作過程
打開一通信通道並告知本地主機,它願意在一特定端口(如80)上接收客戶請求
等待客戶請求到達該端口
接收客戶請求,併發送應答信號,激活一新的線程處理這個客戶請求
服務完成後,關閉新線程與客戶的通信鏈路
client工作過程
打開一通信通道並連接到服務器特定端口
向服務器發出服務請求,等待並接收應答
根據需要繼續提出請求
請求結束後關閉通信通道並終止