網絡編程(理論知識)

在這裏插入圖片描述

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工作過程

打開一通信通道並連接到服務器特定端口
向服務器發出服務請求,等待並接收應答
根據需要繼續提出請求
請求結束後關閉通信通道並終止
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章