1. 程式人生 > 其它 >socket程式設計與OSI五層協議

socket程式設計與OSI五層協議

目錄

socket程式設計與OSI五層協議

一 socket程式設計初探

1 什麼是socket

​ socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket相當於一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的Socket介面就是全部,讓Socket去組織資料,以符合指定的協議。

2 為何要學習socket程式設計

​ 為了能夠基於socket開發一個C/S或B/S結構的軟體。

	Client————————網路————————Sever
    Browser————————網路————————Sever

3 如何實現基於socket程式設計

1.參考優秀的部落格
​		https://www.cnblogs.com/linhaifeng/articles/5937962.html

2.網路是什麼?
​		網路=底層的物理介質+網際網路通訊協議
​						OSI七層協議

3.網路存在的意義:
​		通訊

4 OSI七層協議瞭解

4.1 網際網路協議按照功能的不同,分為osi七層或tcp/ip五層或tcp/ip四層

4.2 每層常見的物理裝置:

4.3 OSI七層資料協議資料傳輸時的封包與解包過程

二 OSI五層協議

1 物理層

1.1 物理層由來:

	孤立的計算機之間要想一起玩,就必須接入Internet,要外之意就是計算機必須完成組網。

1.2 物理層功能:

	主要是基於電器特性發送高低電壓(電訊號) ,高電壓對應數字1,低電壓對應數字0。

2 資料鏈路層

2.1 資料鏈路層由來:

	單純的電訊號0和1沒有任何意義,必須規定電訊號多少位一組,每組什麼意思。

2.2 資料鏈路層功能:

	定義了電訊號的分組方式。

2.3 乙太網協議:

	早期的時候,各個公司都有自己的分組方式,後來形成了統一的標準,即乙太網協議Ethernet。
2.3.1 Ethernet規定之幀的兩個組成部分:
	一組電訊號構成一個數據包,叫做幀;每一資料幀分成:報頭head和資料data兩部分。
head data
傳送者/源地址,接收者/目標地址,資料型別 資料包的具體內容
# (A) head包含:(固定18個位元組) 
	傳送者/源地址,6個位元組;
	接收者/目標地址,6個位元組;
	資料型別,6個位元組。
# (B) data包含:(最短46位元組,最長1500位元組) 
	資料包的具體內容。
# (C) 總結:
	head長度+data長度 = 最短64位元組,最長1518位元組,超過最大限制就分片傳送。
2.3.2 mac地址
# (A) head中包含的源和目標地址由來:	ethernet規定接入internet的裝置都必須具備網絡卡,傳送端和接收端的地址便是指網絡卡的地址,即mac地址。# (B) 什麼是mac地址:	每塊網絡卡出廠時都被燒製上一個世界唯一的mac地址,長度為48位2進位制,通常由12位16進位制數表示(前六位是廠商編號,後六位是流水線號) 。
2.3.3 廣播
	有了mac地址,同一網路內的兩臺主機就可以通訊了(一臺主機通過arp協議獲取另外一臺主機的mac地址) ethernet採用最原始的方式,廣播的方式進行通訊,即計算機通訊基本靠吼。

3 網路層

3.1 網路層由來:

	有了ethernet、mac地址、廣播的傳送方式,世界上的計算機就可以彼此通訊了,問題是世界範圍的網際網路是由一個個彼此隔離的小的區域網組成的,那麼如果所有的通訊都採用乙太網的廣播方式,那麼一臺機器傳送的包全世界都會收到,這就不僅僅是效率低的問題了,這將會是一種災難。
	因此,如上圖所示,必須找到一種方法來區分哪些計算機屬於同一個廣播域,哪些不是。	如果是同一個廣播域,就採用廣播的方式傳送,如果不是,就採用路由的方式(向不同廣播域/子網分發資料包) 。mac地址是無法區分的,它只跟廠商有關。

3.2 網路層功能:

	引入一套新的地址用來區分不同的廣播域/子網,這套地址即網路地址。

3.3 IP協議:

3.3.1 什麼是ip協議
	規定網路地址的協議叫ip協議,它定義的地址稱之為ip地址,廣泛採用的v4版本即ipv4,它規定網路地址由32位2進製表示。
3.3.2 ip地址的範圍
	範圍0.0.0.0-255.255.255.255。
3.3.3 ip地址的表示方法
	一個ip地址通常寫成四段十進位制數,即點分十進位制,例:172.16.10.1。

3.4 ip地址的兩大組成部分

3.4.1 網路部分的功能:
	標識子網。
3.4.2 主機部分的功能:
	標識主機。

3.5 子網掩碼

3.5.1 什麼是子網掩碼
	所謂”子網掩碼”,就是表示子網路特徵的一個引數。它在形式上等同於IP地址,也是一個32位二進位制數字,它的網路部分全部為1,主機部分全部為0。	比如,IP地址172.16.10.1,如果已知網路部分是前24位,主機部分是後8位,那麼子網路掩碼就是11111111.11111111.11111111.00000000,寫成十進位制就是255.255.255.0。
3.5.2 子網掩碼的作用
	子網掩碼可以用來判斷任意兩個ip地址是否處於同一個子網路。	方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都為1,運算結果為1,否則為0) ,然後比較結果是否相同,如果是的話,就表明它們在同一個子網路中,否則就不是。# 比如,	已知IP地址172.16.10.1和172.16.10.2的子網掩碼都是255.255.255.0,請問它們是否在同一個子網路?兩者與子網掩碼分別進行AND運算,    172.16.10.1:10101100.00010000.00001010.000000001    255255.255.255.0:11111111.11111111.11111111.00000000    AND運算得網路地址結果:10101100.00010000.00001010.000000001->172.16.10.0     172.16.10.2:10101100.00010000.00001010.000000010    255255.255.255.0:11111111.11111111.11111111.00000000    AND運算得網路地址結果:10101100.00010000.00001010.000000001->172.16.10.0    結果都是172.16.10.0,因此它們在同一個子網路。
3.5.3 總結
	IP協議的作用主要有兩個,一個是為每一臺計算機分配IP地址,另一個是確定哪些地址在同一個自網路。

3.6 ip資料包的組成

	ip資料包也分為head和data部分,無須為ip包定義單獨的欄位,直接放入乙太網包的data部分。	head:長度為20到60位元組;	data:最長為65,515位元組。	乙太網資料包的“資料”部分,最長只有1500位元組。因此,如果IP資料包超過了1500位元組,他就需要分割成幾個乙太網資料包,分開發送。
乙太網頭 ip data之(ip頭) ip data之(ip資料)
長度為20到60位元組 最長為65,515位元組

3.7 ARP協議*

3.7.1 ARP協議由來
	計算機通訊基本靠吼,即廣播的方式,所有上層的包到最後都要封裝上乙太網頭,然後通過乙太網協議傳送,在談及乙太網協議的時候,我們瞭解到:通訊是基於mac的廣播當時實現的,計算機在發包時,獲取自身mac是容易的,如何獲取目標主機的mac,就需要用ARP協議來實現。
3.7.2 ARP協議的功能
	以廣播的方式傳送資料包,獲取目標主機的mac地址。
3.7.3 ARP協議的工作方式:
# 前提是每臺主機IP都是已知的。	例如:主機172.16.10.10/24訪問172.16.10.11/24# (1) 首先通過ip地址和子網掩碼區分出自己所處的子網
場景 資料包地址
同一子網 目標主機mac,目標主機ip
不同子網 閘道器mac,目標主機ip
# (2) 分析172.16.10.10/24與172.16.10.11/24處於同一網路(如果不是同一網路,那麼下表中目標ip為172.16.10.1,通過arp獲取的是閘道器的mac) 
源mac 目標mac 源ip 目標ip 資料部分
傳送端主機 傳送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 資料
# (3) 這個包會以廣播的方式在傳送端所處的子網內傳輸,所有主機接收後拆開包,發現目標ip為自己的,就響應,返回自己的mac地址。

4 傳輸層

4.1 傳輸層由來:

	網路層的ip幫我們區分子網,乙太網的mac幫我們找到主機,然後大家使用的都是應用程式,你的電腦上可能同時開啟多個應用程式。那麼,我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程式?答案就是埠,埠即應用程式與網絡卡關聯的編號。

4.2 傳輸層的功能

	建立埠到埠的通訊。	補充:埠範圍0-65535,0-1023為系統佔用埠。

4.3 tcp協議:

	可靠傳輸,TCP資料包沒有限制長度,理論上可以無限長,但是為了保證網路的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確保單個TCP資料包不必再分割。
乙太網頭 ip 頭 tcp頭 資料

4.4 udp協議

	不可靠傳輸,"報頭"部分一共只有8個位元組,總長度不超過65,535位元組,正好放進一個IP資料包。
乙太網頭 ip頭 udp頭 資料

4.5 tcp報文

4.6 tcp三次握手和四次揮手

三次握手和四次揮手

三次握手

四次揮手

# TCP為什麼是四次揮手,而不是三次?因為TCP是全雙工通訊的   (1)第一次揮手     	因此當主動方傳送斷開連線的請求(即FIN報文)給被動方時,僅僅代表主動方不會再發送資料報文了,但主動方仍可以接收資料報文。    (2)第二次揮手     	被動方此時有可能還有相應的資料報文需要傳送,因此需要先發送ACK報文,告知主動方“我知道你想斷開連線的請求了”。這樣主動方便不會因為沒有收到應答而繼續傳送斷開連線的請求(即FIN報文)。   (3)第三次揮手    	被動方在處理完資料報文後,便傳送給主動方FIN報文;這樣可以保證資料通訊正常可靠地完成。傳送完FIN報文後,被動方進入LAST_ACK階段(超時等待)。   (4)第四揮手    	如果主動方及時傳送ACK報文進行連線中斷的確認,這時被動方就直接釋放連線,進入可用狀態。

5 應用層與socket層

5.1 應用層

#### 1 應用層由來	使用者使用的都是應用程式,均工作於應用層,網際網路是開發的,大家都可以開發自己的應用程式,資料多種多樣,必須規定好資料的組織形式。#### 2 應用層功能	規定應用程式的資料格式。	例:TCP協議可以為各種各樣的程式傳遞資料,比如Email、WWW、FTP等等。那麼,必須有不同協議規定電子郵件、網頁、FTP資料的格式,這些應用程式協議就構成了”應用層”。

5.2 socket層

#### 1 如何唯一標識網路中的一個程序	IP層的ip地址可以唯一標示主機,TCP層協議和埠號可以唯一標示主機的一個程序,利用 [ip地址+協議+埠號] 可以唯一標識網路中的一個程序。#### 2 為何要唯一標識網路中的一個程序	兩個程序如果需要進行通訊最基本的一個前提能能夠唯一的標示一個程序,在本地程序通訊中我們可以使用PID來唯一標示一個程序,但PID只在本地唯一,網路中的兩個程序PID衝突機率很大#### 3 為何要唯一標識網路中的一個程序	唯一標示網路中的程序後,它們就可以利用socket進行通訊了。#### 4 socket是什麼	socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的介面供應用層呼叫已實現程序在網路中通訊。

​ socket起源於UNIX,在Unix一切皆檔案哲學的思想下,socket是一種"開啟—讀/寫—關閉"模式的實現,伺服器和客戶端各自維護一個"檔案",在建立連線開啟後,可以向自己檔案寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉檔案。

5.3 小結

總結圖1:

總結圖2:資料傳輸動圖