標籤:
一.物理層
物理層定義了網口RJ45的尺寸大小,網線上電壓的模式等。那些在網線中傳播的位元據流是這層的具體表象。也就是說,這一層上面沒有什麼協議,就算有,也就曼切斯特編碼算協議。我們把兩台機器用網線連起來,或者用集線器(HUB)把機器都連起來,這些工作就是物理層的工作。
有2個裝置屬於物理層的,一個是中繼器,一個是HUB。大家知道,物理上面的連線距離一長就會產生電訊號的衰減。為了重新加強這個訊號,我們就需要在一定距離之後加上一個訊號放大器,這就是中繼器(Repeater)。
1. Repeater串連在兩根網線之間,對訊號沒有做任何處理。
2. HUB的本質其實是一個多口中繼器(Multi-port Repeater),是串連多根網線的一個物理裝置。
既然物理層傳輸的是電訊號。那麼如果我有兩台機器一起發電訊號,訊號豈不是混亂了嗎?
非常正確。這個問題在網路裡面成為”碰撞”,所以協議裡面規定了如果你需要往外發資料,一定需要先看看電纜裡面有沒有別的訊號。如果沒有,那就可以發。如果兩者同時發送,檢測到碰撞之後,兩者分別等待一個隨機時間,然後重發。這個就是重要的”碰撞檢測”。
如果串連在網路上的電腦越來越多,那麼碰撞的現象會越來越頻繁。這樣效率一定很低了。恩,這裡還有一個重要概念”衝突域”。在同一個物理上串連的網路上的所有裝置是屬於同一個衝突域的。所以用Repeater或HUB串連的裝置是在一個衝突域上的。
接著就需要引入我們的二層裝置來分割衝突域了。
二.資料連結層
這個層面上面的東西不再是電訊號了,而是DATA了。既然是DATA就有邏輯關係了。這個層面上面的基本單位是幀(Frame)。他是把從網線上面傳輸的電流轉換成0和1的組合。
物理層只是網卡對網線發出或者接受各種電平訊號,那就是說物理層是無法判別電流的來源和目標的。那麼把電流打成0和1的幀之後,裡面就有邏輯資料了。有了資料,就可以判別資料從何而來,到何處去。所以也就可以真正的形成LINK,二層裝置有兩個:
1. 橋接器(Bridge)就是串連2個不同的物理網路的。主要功能是在2個網路之間轉寄Frame。因為從實際中我們可以知道,其實很多時候並非整個網路都在相互連訊。最多相互連訊的一組電腦我們可以分在一個小的衝突域內。這樣分割以後可以減少衝突。由於橋接器兩邊的通訊不是非常頻繁,所以使用橋接器來為兩邊作”代言人”。
2. 交換器(Switch),其本質是一個多口橋接器(Multi-port Bridge)。交換器的每個口後面都是一個衝突域。交換器比HUB快,就是因為交換器分割了所有的衝突域。交換器的主要功能就是“儲存轉寄”,根據幀的MAC地址,決定這一幀從哪個連接埠出去。
橋接器串連模式(紅點處為HUB):
交換器串連模式:
可以看到,橋接器只有2個輸入/出連接埠,而交換器有8個。嗯,是的,一開始的時候(那時候只有HUB這種裝置),由於硬體水平不是很發達,人們為了提高區域網路效率,減少廣播風暴的出現,他們生產了橋接器(一個只有兩個輸入/出連接埠的鏈路層裝置,這時的橋接器已經是個比較先進的裝置),然後他們把一個區域網路一分為2,中間用橋接器串連,這樣A發給BCD的資料就不會再廣播到EFGH了(橋接器發現如果資料包不是轉寄給下面這個子網的,它會自動丟棄此包),只有從A發到EFGH的資料包才能通過橋接器,到達另外一個子網(橋接器發現如果資料包是轉寄給下面這個子網的,它才會把包轉寄給這個子網)。
這樣一來,非必要的傳輸減少了,整個網路的效率也隨之提高可不少!人們發現橋接器真是個好東西呀,隨著硬體發展,出現了4個,8個連接埠的鏈路層裝置,這就是交換器,由於交換器可以使得網路更安全,網路效率更高,交換器漸漸替代了HUB,成為組建區域網路的重要裝置。
乙太網路是目前應用最廣泛的區域網路,其他區域網路類似ATM,都已經慢慢消失了。乙太網路主要描述二層結構。乙太網路的幀結構如下:
1.乙太網路的前置欄位和SFD是0xAAAAAAAAAAAAAAAB(8Byte,時序在前——時序在後),其中SFD是0xAB(10101011),其中的11區別於前置欄位,表明這是幀定界符,後面的就是資料部分了。
2. DA/SA指的都是MAC地址,6Byte。
如果MAC地址中第一個位元組的最低有效位為1,則該地址是組播目標地址。例如,01-00-00-00-F0-00。帶有組播目標地址的資料包將被送達一組選定的乙太網路節點。
如果目標地址欄位是保留的組播地址FF-FF-FF-FF-FF-FF,則該資料包是廣播資料包,它將被發送給共用該網路的每一個節點。
如果MAC地址中第一個位元組的最低有效位為0,則該地址是單播地址,資料包將僅供具有該地址的節點使用。
這裡要注意這三種播在IP地址和MAC地址中的不同。
3.類型/長度欄位定義後面的資料包屬於何種協議,如果該欄位小於等於0x05DCh(1500),說明該欄位是長度欄位。如果我們使用IP或者ARP協議的話,這個欄位就是類型欄位:IP(0x0800),ARP(0x0806)。
4.資料和填充這兩部分最小是46Byte,最大是1500Byte,如果資料部分小於46Byte,那麼就需要使用填充部分去填滿0x00,使得這兩部分是46Byte。這部分放上層的資訊,比如IP包就在以太幀的資料區段中。
5.最後這部分是CRC校正碼。
三.網路層
這一層的基本單元是包(Packet)。所有的包都有一個IP頭,IP就是用來在這層上面標識Packet的來源和目的地址的。
這層的一個主要概念就是”路由”,也就是和交換器一樣,把包轉寄到其他的地方。不過有個不同的地方,交換器只有知道具體的MAC在哪裡的情況下才能夠發送給指定的電腦,而路由則不需要知道最終IP所在的電腦在哪個位置,只要知道那個途徑可以過去就可以工作。
IP地址本質上是終點地址,它在跳過路由器(hop)的時候不會改變,而MAC地址則是下一跳的地址,每跳過一次路由器都會改變。
IP地址在三層,MAC地址在二層。當資訊還在二層,還未去三層解包的時候,IP地址其實只是二層中的資料部分。
1.版本號碼(Version):4bit。標識目前採用的IP協議的版本號碼。一般的值為0100(IPv4),0110(IPv6)
2. IP包頭長度(Header Length):4bit。這個欄位的作用是為了描述IP包頭的長度。單位為32bit(4個位元組),一個IP包頭的長度最長為“1111”,即15*4=60個位元組。IP包頭最小長度為20位元組。
3.服務類型(Type of Service):1Byte。按位被如下定義:PPP DTRC0
PPP:定義包的優先順序,取值越大資料越重要。
000 普通 (Routine)
001 優先的 (Priority)
010 立即的發送 (Immediate)
011 閃電式的 (Flash)
100 比閃電還閃電式的 (Flash Override)
101 CRI/TIC/ECP(找不到這個詞的翻譯)
110 網間控制 (Internetwork Control)
111 網路控制 (Network Control)
D 時延: 0:普通 1:延遲盡量小
T 輸送量: 0:普通 1:流量盡量大
R 可靠性: 0:普通 1:可靠性盡量大
M 傳輸成本: 0:普通 1:成本盡量小
0 最後一位被保留,恒定為0
4. IP包總長(Total Length):2Byte。以位元組為單位計算的IP包的長度 (包括頭部和資料),所以IP包最大長度65535位元組。
5.標識符(Identifier):2Byte。該欄位和Flags、Fragment Offest欄位聯合使用,對較大的上層資料包進行分段(fragment)操作。路由器將一個包拆分後,所有拆分開的小包被標記相同的值,以便目的端裝置能夠區分哪個包屬於被拆分開的包的一部分。
6.標記(Flags):3bit。該欄位第一位不使用。第二位是DF(Don’t Fragment)位,DF位設為1時表明路由器不能對該上層資料包分段。如果一個上層資料包無法在不分段的情況下進行轉寄,則路由器會丟棄該上層資料包並返回一個錯誤資訊。第三位是MF(More Fragments)位,當路由器對一個上層資料包分段,則路由器會在除了最後一個分段的IP包的包頭中將MF位設為1。
7.片位移(Fragment Offset):13bit。表示該IP包在該組分區包中位置,接收端靠此來組裝還原IP包。
8.存留時間(TTL):1Byte。當IP包進行傳送時,先會對該欄位賦予某個特定的值。當IP包經過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。如果TTL減少為0,則該IP包會被丟棄。這個欄位可以防止由於路由環路而導致IP包在網路中不停被轉寄。
9.協議(Protocol):1Byte。標識了上層所使用的協議。
以下是比較常用的協議號:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
10.頭部校正(Header Checksum):2Byte。用來做IP頭部的正確性檢測,不包含資料部分。路由器會為每個通過的資料包重新計算這個值因為每個路由器要改變TTL的值。
11.起源和目標地址(Source and Destination Addresses):這兩個欄位都是4Byte。標識了這個IP包的起源和目標地址。要注意除非使用NAT,否則整個傳輸的過程中,這兩個地址不會改變。
至此,IP包頭基本的20位元組已介紹完畢,此後部分屬於可選項,不是必須的部分。
12.可選項(Options):這是一個可變長的欄位。該欄位屬於可選項,主要用於測試,由起源裝置根據需要改寫。可選項目包含以下內容:
鬆散源路由(Loose source routing):給出一連串路由器介面的IP地址。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個IP地址之間跳過多個路由器。
嚴格源路由(Strict source routing):給出一連串路由器介面的IP地址。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中則表示發生錯誤。
路由記錄(Record route):當IP包離開每個路由器的時候記錄路由器的出站介面的IP地址。
時間戳記(Timestamps):當IP包離開每個路由器的時候記錄時間。
填充(Padding):因為IP包頭長度(Header Length)部分的單位為32bit,所以IP包頭的長度必須為32bit的整數倍。因此,在可選項後面,IP協議會填充若干個0,以達到32bit的整數倍。
四.傳輸層
TCP/IP代表的是一個協議族,由於這些協議中數TCP協議和IP協議最出名,就用這兩種協議代表這一族協議。這裡以TCP為例,是TCP幀結構:
TCP串連:
三向交握步驟:
1. A 的 TCP 向 B 發出串連請求報文段,其首部中的同步位SYN=1,並選擇序號seq=x,表明傳送資料時的第一個資料位元組的序號是x
2. B 的 TCP 收到串連請求報文段後,如同意,則發回確認(B在確認報文段中應使SYN=1,使 ACK=1,其確認號ack=x+1,自己選擇的序號seq = y)
3. A 收到此報文段後向 B 給出確認,其 ACK=1,確認號ack=y+1(A的 TCP通知上層應用進程,串連已經建立,B的TCP收到主機A的確認後,也通知其上層應用進程:TCP串連已經建立)
TCP釋放:
三向交握步驟:
1.資料轉送結束後,通訊的雙方都可釋放串連。現在A的應用進程先向其 TCP發出串連釋放報文段,並停止再發送資料,主動關閉TCP串連(A把串連釋放報文段首部的FIN=1,其序號seq=u,等待B的確認)
2. B發出確認,確認號ack=u+1,而這個報文段自己的序號seq=v(TCP 伺服器處理序通知高層應用進程。從A到B這個方向的串連就釋放了,TCP串連處於半關閉狀態。B若發送資料,A仍要接收)
3.若B已經沒有要向A發送的資料,其應用進程就通知TCP釋放串連
4. A收到串連釋放報文段後,必鬚髮出確認,在確認報文段中ACK=1,確認號ack=w+1,自己的序號seq=u+1
是Wireshark抓取的TCP包,其中1-3號是TCP串連,156-158號是TCP釋放,4-6號和7-9號分別是兩次資料轉送。
其中Seq和Ack這兩個序號分別代表已經發送的位元組數和接收的位元組數,這兩個數用於收發段的滑動視窗的計算。
【Reference】
百度文庫
其他部落格
(畢竟是基礎知識,資料太多)
電腦網路基礎