TCP
TCP的三次握手過程,為什麼需要三次握手
三次握手過程:
- 客戶端:向服務端傳送帶有 SYN=1,ACK=0的資料包,選擇一個初始的序號 x,第一次握手
- 服務端:向客戶端傳送SYN=1,ACK=1的資料包,確認號為 x+1,選擇一個初始的序號 y,第二次握手
- 客戶端:向服務端傳送ACK=1的資料據包,確認號為 y+1,序號為 x+1
為什麼要三次握手:
三次握手的目的是建立可靠的通訊通道,通訊簡單來說就是資料的傳送與接收,而三次握手最主要的目的就是雙方確認自己與對方的傳送與接收是正常的。
第一次握手:Client 什麼都不能確認;Server 確認了對方傳送正常
第二次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己接收正常,對方傳送正常
第三次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己傳送、接收正常,對方傳送接收正常
所以三次握手就能確認雙發收發功能都正常,缺一不可。
如果只有兩步是無法確定客戶端是否能夠正常接收,同時可能無法就Server的B的初始序號達成一致
第2步是為了Server向Client表示已經收到了Client的握手訊號,同時也是為了向Client傳送握手訊號,併發迸Server的初始序號。
第3步是為了表示Client的接收到了Server的握手資訊
補充內容:A表示Client,B表示Server
- 第一個包,即A發給B的SYN 中途被丟,沒有到達B。A會週期性超時重傳,直到收到B的確認
- 第二個包,即B發給A的SYN +ACK 中途被丟,沒有到達A。B會週期性超時重傳,直到收到A的確認
- 第三個包,即A發給B的ACK 中途被丟,沒有到達B。A發完ACK,單方面認為TCP為 Established狀態,而B顯然認為TCP為Active狀態:
- 假定此時雙方都沒有資料傳送,B會週期性超時重傳,直到收到A的確認,收到之後B的TCP 連線也為 Established狀態,雙向可以發包。
- 假定此時A有資料傳送,B收到A的 Data + ACK,自然會切換為established 狀態,並接受A的 Data。
- 假定B有資料傳送,資料傳送不了,會一直週期性超時重傳SYN + ACK,直到收到A的確認才可以傳送資料。
TCP的四次揮手的過程,為什麼要4次揮手
X=1, Y=1, Z=1
//第一次揮手,客戶端傳送FIN+ACK
FIN=1, ACK=1;
seq_number=X; // 1
ack_number=Z; // 1
// 第二次揮手,伺服器收到FIN後,發回一個ACK
ACK=1
seq_num=Z; // 1
ack_num=x+1; // 2
// 第三次揮手,伺服器關閉與客戶端的連線,傳送FIN
FIN=1, ACK=1;
seq_num=Y; //1
ack_num=X+1; //2
// 第四次揮手,客戶端收到伺服器傳送的FIN之後,發回ACK確認
ACK=1
seq_num=X+1; //2
ack_num=Y+1; //2
複製程式碼
主動斷開的一方:主動關閉方(A),另一方是被動關閉方(B)
- A向B傳送一個FIN,並且序號為u(等於前面已經傳送過來的資料的最後一個位元組的序號加1),此時表示A不再向B傳送資料包
- B收到這個 FIN,它發回一 個 ACK,確認序號為收到的序號加1,同時帶上序號為v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。此步僅僅是為了向A告知B已經知道了斷開連線的請求。B此時可能還需要處理A請求斷開之前的資料包,也可能向A傳送資料
- A收到B的確認請求後,此時,A就進入FIN-WAIT-2(終止等待2)狀態,等待B傳送連線釋放報文
- B在處理完資料包文後,便傳送給主動方FIN報文。並且序號為w,ack為u+1.這一步的目的是為了告訴A已經處理完斷開之前的資料包。
- A傳送ACK,確認已經收到B的FIN報文,確認序號為w+1。此時,A就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連線還沒有釋放,必須經過2∗MSL(最長報文段壽命)的時間後,當A撤銷相應的TCB後,才進入CLOSED狀態
- B只要收到了客戶端發出的確認,立即進入CLOSED狀態
為什麼建立連線是三次握手,關閉連線確是四次揮手呢?
建立連線的時候, 伺服器在LISTEN狀態下,收到建立連線請求的SYN報文後,把ACK和SYN放在一個報文裡傳送給客戶端。
而關閉連線時,伺服器收到對方的FIN報文時,僅僅表示對方不再傳送資料了但是還能接收資料,而自己也未必全部資料都傳送給對方了,所以己方可以立即關閉,也可以傳送一些資料給對方後,再傳送FIN報文給對方來表示同意現在關閉連線,因此,己方ACK和FIN一般都會分開傳送,從而導致多了一次。
TCP、UDP協議的區別
UDP提供無連線不可靠的資料傳輸服務。UDP 在傳送資料之前不需要先建立連線,主機在收到 UDP 報文後,不需要給出任何確認。UDP 不提供可靠交付,但在某些情況下 UDP 效率更高。
TCP 提供面向連線可靠的服務。在傳送資料之前必須先建立連線,資料傳送結束後要釋放連線。TCP不提供廣播或多播服務。由於 TCP 要提供可靠的,面向連線的運輸服務,增加了許多開銷,如確認,流量控制,計時器以及連線管理等。這不僅使協議資料單元的首部增大很多,還要佔用許多處理機資源。TCP 一般用於檔案傳輸、傳送和接收郵件、遠端登入等場景。
UDP的主要特點
- UDP 是無連線的;
- UDP 使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連結狀態(這裡面有許多引數);
- UDP 是面向報文的;
- UDP 沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如 直播,實時視訊會議等);
- UDP 支援一對一、一對多、多對一和多對多的互動通訊;
- UDP 的首部開銷小,只有8個位元組,比TCP的20個位元組的首部要短。
TCP的主要特點
- TCP 是面向連線的。(就好像打電話一樣,通話前需要先撥號建立連線,通話結束後要掛機釋放連線);
- 每一條 TCP 連線只能有兩個端點,每一條TCP連線只能是點對點的(一對一);
- TCP 提供可靠交付的服務。通過TCP連線傳送的資料,無差錯、不丟失、不重複、並且按序到達;
- TCP 提供全雙工通訊。TCP 允許通訊雙方的應用程式在任何時候都能傳送資料。TCP 連線的兩端都設有傳送快取和接收快取,用來臨時存放雙方通訊的資料;
- 面向位元組流。TCP 中的“流”(Stream)指的是流入程式或從程式流出的位元組序列。“面向位元組流”的含義是:雖然應用程式和 TCP 的互動是一次一個資料塊(大小不等),但 TCP 把應用程式交下來的資料僅僅看成是一連串的無結構的位元組流。
TCP 協議如何保證可靠傳輸
- 應用資料被分割成 TCP 認為最適合傳送的資料塊。
- TCP 給傳送的每一個包進行編號,接收方對資料包進行排序,把有序資料傳送給應用層。
- 校驗和: TCP 將保持它首部和資料的檢驗和。這是一個端到端的檢驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP 將丟棄這個報文段和不確認收到此報文段。
- TCP 的接收端會丟棄重複的資料。
- 流量控制: TCP 連線的每一方都有固定大小的緩衝空間,TCP的接收端只允許傳送端傳送接收端緩衝區能接納的資料。當接收方來不及處理髮送方的資料,能提示傳送方降低傳送的速率,防止包丟失。TCP 使用的流量控制協議是可變大小的滑動視窗協議。 (TCP 利用滑動視窗實現流量控制)
- 擁塞控制: 當網路擁塞時,減少資料的傳送。
- 停止等待協議 也是為了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止傳送,等待對方確認。在收到確認後再發下一個分組。 超時重傳: 當 TCP 發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
問題
1. 各層協議的作用,以及 TCP/IP 協議的特點。
物理層主要裝置:中繼器、集線器; 資料鏈路層主要裝置:二層交換機、網橋; 網路層主要裝置:路由器。
(1).應用層
應用層(application-layer)的任務是通過應用程式間的互動來完成特定網路應用。應用層協議定義的是應用程式(程式:主機中正在執行的程式)間的通訊和互動的規則。對於不同的網路應用需要不同的應用層協議。在網際網路中應用層協議很多,如域名系統DNS,支援全球資訊網應用的 HTTP協議,支援電子郵件的 SMTP協議等等。我們把應用層互動的資料單元稱為報文。
(2).運輸層
運輸層(transport layer)的主要任務就是負責向兩臺主機程式之間的通訊提供通用的資料傳輸服務。應用程式利用該服務傳送應用層報文。“通用的”是指並不針對某一個特定的網路應用,而是多種應用可以使用同一個運輸層服務。由於一臺主機可同時執行多個執行緒,因此運輸層有複用和分用的功能。所謂複用就是指多個應用層程式可同時使用下面運輸層的服務,分用和複用相反,是運輸層把收到的資訊分別交付上面應用層中的相應程式。運輸層主要使用TCP和UDP兩種協議
(3).網路層
網路層的任務就是選擇合適的網間路由和交換結點, 確保資料及時傳送。 在傳送資料時,網路層把運輸層產生的報文段或使用者資料包封裝成分組和包進行傳送。在 TCP/IP 體系結構中,由於網路層使用 IP 協議,因此分組也叫 IP 資料包 ,簡稱 資料包。
(4).資料鏈路層
資料鏈路層(data link layer)通常簡稱為鏈路層。兩臺主機之間的資料傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送資料時,資料鏈路層將網路層交下來的 IP 資料包組裝程幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括資料和必要的控制資訊(如同步資訊,地址資訊,差錯控制等)。
(5).物理層
物理層(physical layer)的作用是實現相鄰計算機節點之間位元流的透明傳送,儘可能遮蔽掉具體傳輸介質和物理裝置的差異。 使其上面的資料鏈路層不必考慮網路的具體傳輸介質是什麼。
2. 乙太網的特點,以及幀結構。
乙太網的特點
乙太網的優點主要表現在四個方面:廉價的介面卡卡、容易安裝、廣泛使用、速率高。缺點主要表現在兩個方面:重負荷下效能惡劣、很難跟蹤錯誤。
乙太網的兩種標準幀格式(大多數使用的是Ethernet II格式)
Ethernet_II的幀中各欄位說明如下:
- DMAC(Destination MAC)是目的MAC地址。DMAC欄位長度為6 個位元組,標識幀的接收者。
- SMAC(Source MAC)是源MAC地址。SMAC欄位長度為6個位元組 ,標識幀的傳送者。
- 型別欄位(Type)用於標識資料欄位中包含的高層協議,該欄位長度為2個位元組。型別欄位取值為0x0800的幀代表IP協議幀;型別字 段取值為0806的幀代表ARP協議幀。
- 資料欄位(Data)是網路層資料,最小長度必須為46位元組以保證幀長至少為64位元組,資料欄位的最大長度為1500位元組。
- 迴圈冗餘校驗欄位(FCS)提供了一種錯誤檢測機制。該欄位長度為4個位元組。
3. 集線器、交換機、路由器的作用,以及所屬的網路層。
(1)集線器(第一層 物理層)
它的作用可以簡單的理解為將一些機器連線起來組成一個區域網
(2)交換機(第二層 資料鏈路層)
作用與集線器大體相同。但是兩者在效能上有區別:集線器採用的式共享頻寬的工作方式,而交換機是獨享頻寬,能夠隔離衝突域。這樣在機器很多或資料量很大時,交換機的效能會更好。
(3)路由器(第三層 網路層)
它的作用在於連線不同的網段並且找到網路中資料傳輸最合適的路徑 ,可以說一般情況下個人使用者需求不大。路由器是產生於交換機之後,就像交換機產生於集線器之後,所以路由器與交換機也有一定聯絡,並不是完全獨立的兩種裝置。路由器主要克服了交換機不能路由轉發資料包的不足。
- 目前主要使用交換機和路由器的組合使用
4. IP 資料資料包常見欄位的作用。
(1)0100 = Version : 4(表示使用的 IPv4協議),對等層之間要使用同一種IP協議(IPv4協議); (2)0101 = Header Length : 20Bytes(5) 首部長度佔4 bit ,可表示的最大數值為15個單位(1111),一個單位一個位元組,最大為60位元組; (3)服務型別-佔8 bit ,(Differentiated Services Field)欄位來區分服務,Delay = 1 延遲小,Throughput = 1吞吐量大,Reliability = 1 質量比較高,Cost = 1 最小代價!同一時刻只有一位是1; (4)Total Length 總長度佔 16 bit:2^16 - 1 = 65535 位元組,值首部和資料之和的長度,單位為位元組,因此資料包的最大長度為65535位元組(MTU最大傳送單元); (5)標識(identification)佔16 bit,它是一個計數器,用來產生資料包的標識; (6)標誌(flag):資料包在傳輸的過程中,標誌欄位MF(More Fregment),MF = 1表示後面還有分片,MF = 0 表示最後一個分片; (7)片偏移:每個資料片不同時傳輸,標誌著謀片在原分組中的相對偏移位置,以8位元組為偏移單位; (8)生存時間(Time To Live)佔用 8bit ,使用“跳數“作為TTL的單位。資料包每經歷一個路由器時對應的TTL值就會減 1 ;防止資料包傳送在路由器中出現環路,因為資料包在傳送的過程中要佔用一定的頻寬(TTL值為零自動丟棄); (9)協議(8bit)欄位指出此資料包所攜帶上層資料使用的TCP協議還是UDP協議,以便對等層接收到資料包交給上層相應的協議(TCP或者UDP協議)進行處理; (10)首部檢驗和(Header checksum 16bit)欄位只校驗資料包的首部,不包含資料部分;看IP資料包頭部是否被破壞、被篡改和丟失等; (11)源地址:資料向外傳送,傳送機器本身的IP地址,也成為邏輯地址; (12)目的地址:資料具體要傳送目標及其的IP地址。
5. ARP 協議的作用,以及維護 ARP 快取的過程。
(1)什麼是ARP?
ARP (Address Resolution Protocol) 是個地址解析協議。最直白的說法是:在IP乙太網中,當一個上層協議要發包時,有了該節點的IP地址,ARP就能提供該節點的MAC地址
(2)ARP的作用?
OSI 模式把網路工作分為七層,彼此不直接打交道,只通過介面(layre interface). IP地址在第三層, MAC地址在第二層。 協議在發生資料包時,首先要封裝第三層 (IP地址)和第二層 (MAC地址)的報頭, 但協議只知道目的節點的IP地址,不知道其實體地址,又不能跨第二、三層,所以得用ARP的服務。
- 獲得目的主機的硬體地址
(3)ARP快取過程?
(1)ARP程式在本區域網上廣播一個ARP請求分組。ARP請求分組的主要內容是表明:我的IP地址是192.168.0.2,我的硬體地址是00-00-C0-15-AD-18.我想知道IP地址為192.168.0.4的主機的硬體地址。
(2)在本區域網上的所有主機上執行的ARP進行都收到此ARP請求分組。
(3)主機B在ARP請求分組中見到自己的IP地址,就向主機A傳送ARP響應分組,並寫入自己的硬體地址。其餘的所有主機都不理睬這個ARP請求分組。ARP響應分組的主要內容是表明:“我的IP地址是192.168.0.4,我的硬體地址是08-00-2B-00-EE-AA”,請注意:雖然ARP請求分組是廣播傳送的,但ARP響應分組是普通的單播,即從一個源地址傳送到一個目的地址。
(4)主機A收到主機B的ARP響應分組後,就在其ARP高速緩衝表中寫入主機B的IP地址到硬體地址的對映。
6. ICMP 報文種類以及作用;和 IP 資料包的關係;Ping 和 Traceroute 的具體原理。
(1)ICMP 報文種類
(2) 和IP協議的關係
ICMP 協議是 IP 協議的一部分。實際上 ICMP 協議是在 IP 協議基礎上實現的。
(3)ping的原理( 分組網際探測(Packet InterNet Groper, PING) )
其中,回顯請求的型別值是 8, 回顯應答的型別值是 0。其對應的程式碼值都為 0。 識別符號和序列號用於匹配回顯應答和回顯請求。有效負載可能包括一個表示傳輸時間的時間戳和一個序列號,這允許 PING 以無狀態的方式計算往返時間(Round Trip Time, RTT),而不需要記錄每個包的傳輸時間。
(4)Traceroute程式原理
- Traceroute程式可以讓我們看到IP資料包從以太主機傳到另外一臺主機所經過的路由。
Traceroute程式使用ICMP報文和和IP首部中的TTL欄位(生存週期)。 當路由器收到一份IP資料包,如果TTL欄位是0或者1,則路由器不轉發該資料包(接收到這種資料包的目的主機可以將它交給應用程式,這是因為不需要轉發該資料包。但是,在通常情況下系統不應該接收TTL欄位為0的資料包)。通常情況下是,路由器將該資料包丟棄,並給信源主機傳送一份ICMP超時資訊。Tracerouter程式的關鍵在於,這份ICMP超時資訊包含了該路由器的地址。
那麼,Tracerouter就通過傳送一份TTL欄位為1的IP資料包給目的主機。處理這份資料包的第一個路由器將TTL值減去1,丟棄該資料包,並回發一份超時ICMP報文。這樣就得到了該路徑中的第一個路由器的IP地址。然後Tracerouter傳送一份TTL為2的資料包,這樣就得到了第二個路由器的IP地址。那麼,繼續這個過程,直到達到目的主機。即使目的主機接收到一份TTL值為1的資料包也不會丟棄該資料包併產生一份ICMP報文,因為已經到達最終目的地。這個時候,Tracerouter程式傳送一份UDP資料包給目的主機,但選擇一個不可能的值作為目的埠號(大於30000),使得目的主機的任何一個程式都不可能使用該埠。因為,當該資料包到達時,將使目的主機的UDP模組產生一份“埠不可達”錯誤的ICMP報文,這樣Tracerouter程式要做的就是區分搜到的ICMP報文是是超時還是埠不可達,以判斷什麼時候結束。