標籤:
運輸層
概述
- 運輸層向它上面的應用程式層提高通訊服務
- 當網路的邊緣部分中的兩個主機使用網路的核型部分的功能進行端到端的通訊時,只有主機的協議棧才有運輸層,而網路和興部分中的路由器在轉寄分組時都只用到下三層的功能。
- 網路層是為主機之間提供邏輯通訊,而運輸層為應用進程之間提供端到端的邏輯通訊。運輸層有複用和分用的功能。
-
應用程式層所有的應用進程都可以通過運輸層再傳送到IP層(網路層),這就是複用。運輸層從IP層收到資料後必須交付指明的應用進程,就是分用。
- 通過協議連接埠號碼將報文交付給特定的進程,這就是說,雖然通訊的終點是應用進程 ,但我們只要把要傳送的報文交到目的主機的某一個合適的目的連接埠,剩下的工作(即最後交付目的進程)就有TCP來完成。
UDP和TCP的首部格式中都有源連接埠和目的連接埠。
伺服器端常用的連接埠號碼
| 應用進程 |
FTP |
TELNET |
SMTP |
DNS |
TFTP |
HTTP |
SNMP |
SNMP(trap) |
| 熟知連接埠號碼 |
21 |
23 |
25 |
53 |
69 |
80 |
161 |
162 |
運輸層協議
TCP對應的協議:
(1) FTP:定義了檔案傳輸通訊協定,使用21連接埠。
(2) Telnet:遠程登入協議,一種用於遠程登陸的連接埠,使用23連接埠,使用者可以以自己的身份遠端連線到電腦上,可提供基於DOS模式下的通訊服務。
(3) SMTP:郵件傳送協議,用於發送郵件。伺服器開放的是25號連接埠。
(4) POP3:它是和SMTP對應,POP3用於內送郵件。POP3協議所用的是110連接埠。
(5)HTTP:是從Web伺服器傳輸超文本到本地瀏覽器的傳送協議。
UDP對應的協議:
(1) DNS:用於網域名稱解析服務,將網域名稱地址轉換為IP地址。DNS用的是53號連接埠。
(2) SNMP:簡易網路管理通訊協定,使用161號連接埠,是用來管理網路裝置的。由於網路裝置很多,不需連線的服務就體現出其優勢。
(3) TFTP(Trival File Tran敏感詞er Protocal),簡單檔案傳輸通訊協定,該協議在熟知連接埠69上使用UDP服務。
(4)NFS、BOOTP
UDP概述
使用者資料包通訊協定UDP只在IP的資料報服務之上增加了很少一點的功能,這就是複用和分用以及差錯檢測的功能。
1. UDP主要特點:
- UDP是不需連線的,因此減少了開銷和發送資料之前的時延
- UDP使用盡最大努力交付,不保證可靠交付,因此主機不需要維持複雜的連結狀態表
- UDPshi面向報文的。即一次交付一個完整的報文。因此,應用程式必須選擇合適大小的報文。若報文太長,UDP把它交付給IP層後,IP層在傳送時可能要進行分區,這會降低IP層的效率。反之,若報文太短,UDP把它交給IP層後,會使IP資料報的首部的相對長度太大,這也降低了IP層的效率。
- UDP沒有擁塞控制。因此網路出現的擁塞不會使源主機的發送速率降低。
- UDP支援一對一,一對多,多對一和多對多的互動通訊。
- UDP的首部開銷小,只有8個位元組,比TCP的20個位元組的首部短。
2. UDP首部格式
3. 連接埠分用
當運輸層從IP層收到UDP資料報時,就根據首部中的目的連接埠,把UDP資料報通過相應的連接埠,上交最後的終點-應用進程。如果接收方UDP發現收到的報文中的目的連接埠號碼不正確(即不存在對應於該連接埠號碼的應用進程),就丟棄該報文,並由網際控制報文協議ICMP發送“連接埠不可達”差錯報文給發送放。
4. 計算檢驗和
在計算檢驗和時,要在UDP使用者資料報之前增加12個位元組的偽首部。所謂“偽首部”只是在計算檢驗和時,臨時添加在UDP使用者資料報前面,得到一個臨時的UDP使用者資料報。檢驗和就是根據這個臨時的UDP使用者資料報來計算的。偽首部既不向下傳送也不向上遞交,而僅僅是為了計算檢驗和。
IP資料報的檢驗和只檢驗IP資料報的首部,但UDP的檢驗和時把首部和資料部分一起檢驗。
具體的計算過程還是看書吧
TCP
TCP概述
- TCP提供一種連線導向的、可靠的位元組流服務 。
- TCP提供可靠交付,無差錯,不丟失,不重複,且按序到達。
- 提供全雙工通訊,TCP串連的兩端都設有發送緩衝和接收緩衝,用來臨時存放雙向通訊的資料。
- 在一個TCP串連中,僅有兩方一對一進行彼此通訊。廣播和多播不能用於TCP
- TCP使用校正和,確認和重傳機制來保證可靠傳輸
- TCP使用累積確認
- TCP使用滑動視窗機制來實現流量控制,通過動態改變視窗的大小進行擁塞控制
三向交握與四次揮手
三向交握
所謂三向交握(Three-way Handshake),是指建立一個 TCP 串連時,需要用戶端和伺服器總共發送3個包。
三向交握的目的是串連伺服器指定連接埠,建立 TCP 串連,並同步串連雙方的序號和確認號,交換 TCP 視窗大小資訊。在 socket 編程中,用戶端執行 connect() 時。將觸發三向交握。
第一次握手(SYN=1, seq=x):
用戶端發送一個 TCP 的 SYN 標誌位置1的包,指明用戶端打算已連線的服務器的連接埠,以及初始序號 X,儲存在包頭的序號(Sequence Number)欄位裡。
發送完畢後,用戶端進入 SYN_SEND 狀態。
第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
伺服器發回確認包(ACK)應答。即 SYN 標誌位和 ACK 標誌位均為1。伺服器端選擇自己 ISN 序號,放到 Seq 域裡,同時將確認序號(Acknowledgement Number)設定為客戶的 ISN 加1,即X+1。
發送完畢後,伺服器端進入 SYN_RCVD 狀態。
第三向交握(ACK=1,ACKnum=y+1)
用戶端再次發送確認包(ACK),SYN 標誌位為0,ACK 標誌位為1,並且把伺服器發來 ACK 的序號欄位+1,放在確定欄位中發送給對方,並且在資料區段放寫ISN的+1
發送完畢後,用戶端進入 ESTABLISHED 狀態,當伺服器端接收到這個包時,也進入 ESTABLISHED 狀態,TCP 握手結束。
三向交握的過程的如下:
四次揮手
TCP的串連的拆除需要發送四個包,因此稱為四次揮手(Four-way handshake),也叫做改進的三向交握。用戶端或伺服器均可主動發起揮手動作,在 socket 編程中,任何一方執行 close() 操作即可產生揮手操作。
假設用戶端想要關閉串連,用戶端發送一個 FIN 標誌位置為1的包,表示自己已經沒有資料可以發送了,但是仍然可以接受資料。
發送完畢後,用戶端進入 FIN_WAIT_1 狀態。
伺服器端確認用戶端的 FIN 包,發送一個確認包,表明自己接受到了用戶端關閉串連的請求,但還沒有準備好關閉串連。
發送完畢後,伺服器端進入 CLOSE_WAIT 狀態,用戶端接收到這個確認包之後,進入 FIN_WAIT_2 狀態,等待伺服器端關閉串連。
伺服器端準備好關閉串連時,向用戶端發送結束串連請求,FIN 置為1。
發送完畢後,伺服器端進入 LAST_ACK 狀態,等待來自用戶端的最後一個ACK。
用戶端接收到來自伺服器端的關閉請求,發送一個確認包,並進入 TIME_WAIT狀態,等待可能出現的要求重傳的 ACK 包。
伺服器端接收到這個確認包之後,關閉串連,進入 CLOSED 狀態。
用戶端等待了某個固定時間(兩個最大段生命週期,2MSL,2 Maximum Segment Lifetime)之後,沒有收到伺服器端的 ACK ,認為伺服器端已經正常關閉串連,於是自己也關閉串連,進入 CLOSED 狀態。
四次揮手的如下:
SYN攻擊
在三向交握過程中,伺服器發送 SYN-ACK 之後,收到用戶端的 ACK 之前的 TCP 串連稱為半串連(half-open connect)。此時伺服器處於 SYN_RCVD 狀態。當收到 ACK 後,伺服器才能轉入 ESTABLISHED 狀態.
SYN 攻擊指的是,攻擊用戶端在短時間內偽造大量不存在的IP地址,向伺服器不斷地發送SYN包,伺服器回複確認包,並等待客戶的確認。由於源地址是不存在的,伺服器需要不斷的重發直至逾時,這些偽造的SYN包將長時間佔用未串連隊列,正常的SYN請求被丟棄,導致目標系統運行緩慢,嚴重者會引起網路堵塞甚至系統癱瘓。
SYN 攻擊是一種典型的 DoS/DDoS 攻擊。
檢測 SYN 攻擊非常的方便,當你在伺服器上看到大量的半串連狀態時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊。在 Linux/Unix 上可以使用系統內建的 netstats 命令來檢測 SYN 攻擊。
SYN攻擊不能完全被阻止,除非將TCP協議重新設計。我們所做的是儘可能的減輕SYN攻擊的危害,常見的防禦 SYN 攻擊的方法有如下幾種:
- 縮短逾時(SYN Timeout)時間
- 增加最大半串連數
- 過濾網關防護
- SYN cookies技術
TCP報文段首部格式
TCP雖然是面向位元組流的,但是TCP傳送的資料單元是報文段。
TCP報文段首部的前20個位元組是固定的。後面4n(n是整數)位元組是根據需要而增加的選項。因此TCP首部的最小長度是20位元組。
1.源連接埠和目的連接埠:各佔2個位元組,通過連接埠實現分用功能。
2.序號:佔4個位元組。TCP是面向位元組流的。在一個TCP串連中傳送的位元組流中的每一個位元組都按順序編號。
3.確認號: 佔4個位元組,是期望收到對方下一個報文的第一個資料位元組的序號。若確認號=N,則表明,到序號N-1為止的所有資料都已正確收到。
4.資料位移:占4位,它指出TCP報文段的資料起始處距離TCP報文段的起始處有多遠。這個欄位實際上是指出TCP報文段的首部長度。由於首部中還有長度不確定的選項欄位,因此資料位移欄位是必要的。4位位元能表示的最大數是15,因此資料位移最大值是60位元組,這也是TCP首部的最大長度(即選項長度不能超過40位元組)
5.保留: 佔6位,保留為今後使用,但目前應置為0;
以下6個控制位說明本報文段的性質
6. 緊急URG: 當URG=1時,,表明緊急指標欄位有效。它告訴系統此報文段中有緊急資料,應儘快傳送,而不要按原來的排隊順序來傳送。
7.確認ACK: 僅當ACK=1時確認號欄位才有效。當ACK=0時,確認號無效。TCP規定,在串連建立後所有傳送的報文段都必須把ACK置1。
8.推送PSH:當兩個應用進程進行互動通訊時,有時在一端的應用進程希望在鍵入一個命令後立即就能夠收到對方的響應。在這種情況下,TCP就可以使用推送操作。這時,發送方TCP把PSH置為1,並立即建立一個報文段發送出去。接收方TCP收到PSH=1的報文段,就儘快地交付接收應用進程,而不再等到整個緩衝都填滿了後再向上交付。
9.複位RST:當RST=1時,表明TCP串連中出現嚴重差錯,必須釋放串連,然後再重建立立運輸串連。RST置1還用來拒絕一個非法的報文段或拒絕開啟一個串連。
10. 同步SYN:在串連建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個串連請求報文段。對方若同意建立串連,則應在響應的報文段中使用SYN=1和ACK=1.因此SYN置為1表示這是一個串連請求或串連接受報文。
11.終止FIN:用來釋放一個串連。當FIN=1時,說明此報文段的發送方的資料已發送完畢,並要求釋放運輸串連。
12. 視窗: 佔2個位元組。視窗指的是發送本報文段的一方的接收視窗(而不是自己的發送視窗)。視窗告訴對方:從本報文段首部中的確認號算起,接收方目前允許對方發送的資料量。之所以要有這個限制,是因為接收方的資料緩衝空間是有限的。總之,視窗欄位明確指出了現在允許對方發送的資料量。視窗值是經常在動態變化著。
13.檢驗和: 佔2個位元組。檢驗和欄位檢驗的範圍包括首部和資料這兩部分。和UDP使用者資料報一樣,在計算檢驗和時,要在TCP報文段的前面加上12位元組的偽首部。
14.緊急指標:佔2個位元組。緊急指標僅在URG=1時才有意義,它指出本報文段中的緊急資料的位元組數(緊急資料結束後就是普通資料)。因此,緊急指標指出了緊急資料的末尾在報文段中的位置。注意,即使視窗為零時也可發送緊急資料。
15.選項:長度可變,最長可達40位元組。
TCP的流量控制
TCP的擁塞控制
電腦網路基礎之運輸層