挑戰408 一周網路 運輸層(3)

2021-09-28 16:34:24 字數 2742 閱讀 2062

tcp協議的主要特點

對比udp協議,tcp協議就要複雜很多了。對比udp協議,tcp協議有以下幾點不同:

tcp是面向連線的傳輸層協議。也就是說,使用tcp協議的通訊雙方事先就要建立連線,在整個連線過程當中控制個管理連線,並在通訊之後釋放整個連線。

tcp連線只能是一對一的。也就是每一條tcp連線只能是兩個端點。

tcp提供的是可靠交付服務。也就是通過tcp連線傳輸的資料,無差錯,不丟失,不重複,並按序到達。

tcp提供全雙工通訊。即允許通訊雙方的程序,在任何時候都可以傳送資料。這就要求通訊雙方要有自己的傳送和接收緩衝區,用來臨時存放雙方通訊的資料。

tcp是面向位元組流的。這部分後面再說

tcp的連線

每一條tcp連線有兩個端點,這個端點叫套接字,其表示方法是ip位址 + 埠號。

這樣,同乙個ip可以有多個不同的tcp連線(ip相同,埠號不一致),同乙個埠號也可以出現在多個tcp連線當中。

tcp首部

tcp的首部前20位元組是固定的,後面有4n個位元組是可選的。也就是說,tcp的首部最短是20位元組。

其他字段略過。

tcp的連線管理

tcp是面向連線的協議,而tcp運輸連線的建立都需要建立和釋放連線。對於tcp連線而言,運輸過程需要下面三個過程:建立連線資料傳送釋放連線。tcp連線採用c/s模式,發起連線建立的客戶端稱為客戶,而被動等待連線的稱為伺服器。

三次握手

tcp建立連線的過程稱為握手。建立連線的過程需要客戶端與服務端之間交換三次tcp報文段(這就是所謂的三次握手)。

初始狀態,雙方都處於關閉狀態。現在模擬a向b傳送tcp連線請求的過程:

a主動開啟連線,b被動開啟連線。(此時b處於listen,監聽狀態)

a打算與b建立tcp連線,於是向b發出請求連線報文段。根據剛剛學習的首部,這個時候syn = 1,seq = x。此報文不攜帶任何資料,但消耗乙個序號。同時為tcp連線分配快取空間和變數b收到後,若同意連線,於是向a傳送連線確認。此時syn = 1 ,ack = 1,seq=y,ack = x + 1. 注意,這裡的ack是tcp首部欄位的確認ack,而ack是確認號,也就是下次要傳送的序號。此報文不攜帶任何資料,但消耗乙個序號。同時為tcp連線分配快取空間和變數a收到b的確認後,還要給b傳送對b確認的確認。此時ack = 1,ack = y+1.seq = y+1.此時連線建立。可以正常傳輸資料。不帶資料可以不消耗乙個序號

以上步驟除去1,就是tcp三次握手的過程。

考慮這樣一種情況,如果a傳送給b的請求連線的報文超過一段時間都還沒有收到b的確認(即走到步驟2這一步走不下去了),根據我們之前的停止等待協議,我們就認為這個報文丟失了,這裡應該再次給b傳送連線請求。這是ab建立正常的tcp連線,然後傳輸資料,釋放連線。倘若此時,a的請求連線不是丟失,而是遲到了,當a的請求到達b的時候,ab早已完成通訊,此時,b會認為a再次請求連線,並且b給a傳送了確認。但是a此時並沒有請求通訊,如果此時a不在向b傳送確認的確認(也就是不要第4步),這樣伺服器只能苦苦等待a的請求,白白浪費伺服器資源

四次握手

tcp連線的釋放需要進行4次的握手。這裡有個概念,tcp是全雙工通訊,可以看成一條tcp連線上有兩條資料通路

通訊結束後通訊雙方都可以結束通訊。這裡模擬一下a主動結束通訊的過程。

通訊結束,a主動向b傳送連線釋放報文。並停止傳送資訊,主動關閉tcp連線(由於全雙工通訊,對方仍可以給a傳送資訊)。此時 fin = 1,seq = u,其中u的值是等於之前發過的資料最後乙個位元組的序號 + 1.tcp規定,fin報文要消耗掉乙個序號。

伺服器收到a發來的關閉連線的報文,於是向a發出確認。此時確認號ack = u+1,報文段自己的序號seq = v(這個值等於伺服器之前傳送過的最後乙個數值序號+1)。然後b進入 close -wait狀態(半關閉狀態)。此時客戶端到伺服器這個方向的連線關閉了。(但是伺服器到客戶端的仍未關閉,伺服器還是可以向客戶端傳送資料)。

若此時b已經沒有要向a傳送的資料了,此時,b發出釋放連線報文。置fin = 1.(此步驟跟1相似,不贅述)。

客戶端收到b發來的釋放連線時,還必須發出確認。具體引數的值見圖。此時伺服器進入time-wait狀態。這個狀態表明連線還沒完全釋放,必須等候一段時間,這個時間為時間等待計時器2msl。a才進入關閉連線狀態。

關於序號的分析,個人感覺還是自己分析一遍。填寫一遍才會印象深刻。

挑戰408 一周網路 網路層(1)

網路層應該向運輸層提供什麼樣的服務?網際網路採用的思路是這樣的 網路層向上只提供簡單靈活的,無連線的,盡最大努力交付的資料報 這裡的資料報就是ip分組 服務。網路層不提供服務質量的承諾,也就是說,所傳送的分組可能出錯,可能丟失也可能重複或者失序。網際協議ip是是tcp ip協議中最重要的兩個協議之一...

挑戰408 一周網路 網路層(2)

ip位址空間利用率低。試想a類位址能表示 2 31 個網路位址,全球的主機數遠不止如此。每個物理網路都分配乙個網路號,會使得路由表過大。二級位址不夠靈活。劃分子網就是為了解決這些問題的。具體的思路如下 注意 劃分子網是在原來的ip位址的主機號進行劃分,而不改變ip位址原有的網路號。子網掩碼 那麼資料...

挑戰408 一周網路 應用層(1)

c s模式 c s模式,即所謂的客戶端 伺服器模式。伺服器是乙個總是開啟著的主機,它服務於許多來自其他稱為客戶機的主機請求。c s的工作模式非常簡單。伺服器處於開啟狀態。客戶機放出服務請求,並等待接收結果 伺服器接收到請求後處進行處理,然後返回結果給客戶機。對此,客戶機一定要知道伺服器的位址,而伺服...