網絡通信
現在已經是一個互聯網時代了,家家戶戶都有手機、電腦、電視等隨時隨地可以在網上進行沖浪,我們俗稱的上網就是通過物理介質和通信設備將不同的用戶連接到一起,實現了用戶之間的通信,在發送信息的整個過程中,要經過一系列協議處理,然后尋找到我們要溝通的通信設備,最終實現將信息傳遞給目標用戶。
網絡通信的概述
首先我們要明白怎么實現通信的,通信可以分為兩部分,第一部分是將要發送的數據進行一系列處理,然后轉化為二進制數字准備進行發送。第二部分就是將二進制數字通過某些路徑發送到目標通信設備,第三部分就是將要接到的二進制數字在通過反向的第一部分的處理最后轉為我們看到的數據。
接下來我就按照這三部分順序進行分析。
一、互聯網的tcp\ip五層協議
這個五層協議主要就是第一部分和第三部分,對數據的處理,方便第二部分能夠找到目標計算機以及目標計算機能夠對數據進行“拆包”拿到我們的原始數據。
互聯網的5層協議按照從上向下分為:
- 應用層
- 傳輸層
- 網絡層
- 數據鏈路層
- 物理層
首先要將數據從A發送到B,那么數據就要從應用層對數據進行處理之后發送給傳輸層,經過傳輸層的打包處理也就是增加一個軟件所對應的端口,然后傳給網絡層,網絡層會在傳輸層發來的數據頭部接上一層(自己的ip地址和,對方的ip地址)然后傳給數據鏈路層,數據鏈路層會結果數據包並加上自己的mac地址和對方的地址的占位符(此時並不能得知對方目標計算機的mac地址),然后最終在物理層將整個數據轉為二進制數字。這樣第一部分就完成了。有一個圖能很簡單的將這個流程表示出來。
下面對整個數據處理進行逐層分析,我們逐層進行分析:
應用層
此時后傳遞的數據數據
。
功能:主要是對數據處理的不同格式,有http\https\ftp等等,通過這些協議對數據進行處理然后發送給傳輸層。
協議就是按照某種規范進行處理,相當於字符編碼,將數據按照某種規范轉為某種格式,然后可以在按照相同的規范轉為該數據。在計算機中,標准化是很重要的,如果我們每個人的標准都不同,那么在數據處理等等方面都會很麻煩,所以一般都會大家共同定義一個標准,然后默認按照這種標准去處理。
通過某個軟件(比如說QQ)將數據發給對象的時候,首先軟件會按照某種協議處理數據,然后傳給傳輸層。
傳給傳輸層的時候一般有兩種協議:TCP和UDP。
- TCP是可靠性協議,在每次發送完數據后,都會得到目標計算機的反饋。安全性高,但是發送速度較為緩慢。
- UDP是不可靠協議,得到數據之后就會發送,不在乎對方是否接受到。安全性較低但是發送速度快。
按照發送數據情況具體分析,是采用哪一種協議進行傳送數據。
傳輸層
此時要傳送的數據TCP或UDP頭+數據
.單位是段
功能:接受來自應用層的數據並將該軟件所對應的端口號加到頭部並傳遞給網絡層。
計算機本身有0~65535個端口,每一個端口都可以對應一個基於網絡通信的軟件,只要軟件要通信,那么它肯定對應着計算機的某個端口,如果不通信,那么就不會占用端口。
TCP協議
我們通常使用TCP協議進行處理重要的數據,在使用TCP協議的時候,一般都會建立一個雙向通道:三次握手和四次揮手。
三次握手:用於建立雙向通道。通信設備A向目標計算機B發送建立通道的請求,目標計算機接到請求之后會發送同意建立通道的請求,並且同時想A發送建立連接的請求,B在發送同意建立鏈接的請求。在整個過程中,一共發生了三次連接,稱為三次握手。
四次揮手:用於斷開連接。A在將數據發送完畢之后,會發送請求斷開連接,B收到之后會同意該請求。因為兩個通道是互不相連的,因此在斷開A到B的連接時,有可能B到A的鏈接的通道中間還有數據在傳輸,因此等到數據傳輸完畢之后,B才會發送斷開連接請求,然后A同意。此時一共經歷了四次揮手。
當然上述的連接通道並不是真的在傳輸層之間互相聯系,數據還要通過網絡層等傳送給目標計算機,這個通道式虛擬概念的通道。
網絡層
此時的數據為ip頭+TCP或UDP頭+數據
,單位是包
功能:接受傳輸層發來的信息並加上自己的ip地址和對方通信設備的ip地址,對方的ip地址此處是已知的公網ip地址。
我們想要發送數據給目標計算機,肯定要知道目標計算機在哪,就像上郵局寄快遞,但是不知道對方的地址怎么去寄東西呢?Ip地址就規定了目標計算機的通信設備。常見的Ip地址有ipv4和ipv6,其中ipv4已經逐漸不夠用了,正在逐步替換成ipv6。
每台計算機只要遵守Ip協議就可以鏈接互聯網。它用來給計算機一個編號,相當與電話號碼。每台想要聯網的計算機都要有自己的ip地址。
ip協議
ip地址有32位二進制組成的,也就是4個字節,有網絡地址和主機地址。Ip一般也分為A類、B類、C類,這里不做過多描述。
ip又分為公網ip和私網ip,用戶要連接互聯網需要用公網ip作為身份標識,且全世界公網ip每一個都是獨一無二的,但是私網IP不同,同一局域網的私有Ip是不可以重復的,但是不同的公網ip下的局域網內部的私有ip是可以重復的。也就是說同一時刻在聯網的計算機都是有自己的公網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,是在互聯網上使用的,在任何地方只要能連網都能訪問公網IP。而私有IP是局域網所使用的,通過互聯網是不能訪問私有IP的。
子網掩碼:通過ip和子網掩碼可以用來判斷兩台計算機是否位於同一網絡ip內,由於ip地址是有網絡地址和主機地址組成,如果網絡地址是相同的,那么在傳輸的過程中,就可以不經過路由器而是可以直接發送,如果網絡地址不相同,那么傳送數據就得發送給路由,采用路由的方式進行發送。
子網掩碼是由連續的1和0的32個bit組成,用1來代替網絡位,0代表主機位。不同類的ip默認掩碼有所不同。分別對應255.0.0.0(A類),255.255.0.0(B類),255.255.255.0(C類)。計算一般是用AND計算(全1則為1,不全為1則0)來對比兩個不同的ip地址。
網關:連接兩個不同子網的通信設備需要經過一道“關卡”。但是如果是同一個局域網之內的通信就用不到網關,一般路由器的網關都是192.168.0.1或者192.168.1.1。每當局域網內的通信設備要鏈接外界的電腦的時候,都是通過網關然后才能出去。
總結:當用戶鏈接網絡的時候,會有一個唯一一個與之對應的公網ip.而私網ip則只能用於同一局域網之內的通信。子網掩碼和Ip用來確認是否位於同一個網絡位,如果是可以直接進行通信,如果不是,則需要發送到網關。
數據鏈路層
此時的數據為mac頭+ip頭+TCP或UDP頭+數據
,單位為幀。
功能:接到網絡層傳來的數據,並將自己的mac地址和對方計算機的mac地址(但是此時並不能獲取對方的mac地址,所以通常用占位符代替)加到頭部然后傳給物理層。
首先要明白什么是mac地址,mac地址就是通信設備在出廠的時候在網卡上燒制的一個獨一無二的mac地址,是不可改變的,不同的通信設備的mac地址是不相同的,網卡的物理地址通常是由網卡生產廠家燒入網卡的EPROM(一種閃存芯片,通常可以通過程序擦寫),它存儲的是傳輸數據時真正賴以標識發出數據的電腦和接收數據的主機的地址。
通過mac地址,在同一網絡之內,我們就可以通過廣播的方式發送廣播包,同一局域網內的所有通信設備都會收到這個包並拆開,然后目標計算機發現ip是接收方自己的時候,就會將自己的mac地址返回,mac頭的數據就會自己的mac地址和對方的mac地址,如果判斷不是自己同一局域網內的計算機的話,就會返回網關的mac地址,然后通過網關發送出去。
這里要注意ip和mac各自的作用:
- Ip主要用於網絡層,將一個數據包從一個網絡發送到另一個網絡。
- mac主要用於數據鏈路層,將數據從一個節點發送到相同鏈路的另一個節點。
ip地址和mac地址存在一定的映射關系,因此可以通過ip地址獲取到mac地址,這種協議叫做arp協議。ARP根據目的IP地址,找到中間節點的MAC地址,通過中間節點傳送,從而最終到達目的網絡。
在一個穩定的網絡中,IP地址和MAC地址是成對出現的。如果一台計算機要和網絡中另一外計算機通信,那么要配置這兩台計算機的IP地址,MAC地址是網卡出廠時設定的,這樣配置的IP地址就和MAC地址形成了一種對應關系。在數據通信時,IP地址負責表示計算機的網絡層地址,網絡層設備(如路由器)根據IP地址來進行操作;MAC地址負責表示計算機的數據鏈路層地址,數據鏈路層設備(如交換機)根據MAC地址來進行操作。IP和MAC地址這種映射關系由ARP協議完成。
物理層
此時的數據為二進制數字。
功能:將來自數據鏈路層的數據轉化為二進制數字,然后通過鏈接介質發送到目標。
物理層是將不同的通信設備通過光纖、雙絞線等進行連接,用於互相之間通過高低電位發送01的二進制數字。
二、尋找目標計算機
到此時為之,數據通過一系列的協議完成了處理,轉為了二進制數字,接下來就是第二部分,如何尋找到目標計算機。
這時候就要提到交換機了。現在使用最廣泛的依然是二層交換機(以太層交換機)。交換機的每個端口口都有一個arp列表,含有ip和mac地址的對應關系。一個端口可對應多個mac地址,但是一個mac地址只能對應一個端口。
當交換機拿到ip地址的時候,就會對照arp列表找是否含有對應的mac地址,如果有,就由該端口進行轉發。如果沒有會向所有端口發送數據,目的計算機得到響應之后,會將自己的mac地址發送到交換機,然后arp列表會進行學習更新。
目標計算機位於同一網絡位
如果目標計算機在同一局域網,然后交換機就會重新封裝mac頭的信息
(自己mac地址,目標計算機占位mac地址)===》(自己mac地址,目標計算機mac地址。)
然后將數據傳遞給目標計算機。此時的數據並不出網關。
目標計算機不位於同一網絡位
如果經數據的ip地址判斷,發現不在同一個局域網之內,交換機就會將網關的mac地址改為目標計算機mac地址。然后將數據發給網關,然后網關在對ip地址進行arp協議解析,然后重新打包數據以太頭為(網關的mac地址,下一路由的mac地址),其他層的數據不變。
然后依次類推,在路由上不停的轉換最終達到目標計算機所處的網關。經由ip和mac的映射關系,找到該目標計算機的mac地址。最終完成了傳輸。
三、目標計算機拿到數據之后
當目標計算機的物理層拿到這些電信號之后,會按照物理層、數據鏈路層、網絡層、傳輸層、應用層的順序依次拆頭部信息,最終拿到數據,完成了一次完美的發送數據之旅。
TIPS:剛開始學習,還是有很多細節並沒有處理好,應該有可能理解出入。只是大概地理解,懇請大佬指正,不勝感激。