Download presentation
Presentation is loading. Please wait.
1
TCP/IP 簡介
2
Outlines TCP/IP Protocol Stack Internet Protocol(IP)
User Datagram Protocol(UDP) Transmission Control Protocol(TCP)
3
TCP/IP Introduction ARPANET & TCP/IP history Internet v.s. internet
Internet:以 ARPANET 為前身的世界性網路 internet:指稱以 IP 所架構的網路
4
TCP/IP 的特點 TCP/IP 是 Open Protocol Standard。 TCP/IP 不受限於特定的網路硬體。
適用的 Addressing(定址設計)。 標準化的高階協定,提供 Users 廣泛而一致的服務。
5
TCP/IP 與 OSI 的對應 4. 應用層Application Layer 7. Application Layer
6. Presentation Layer 5. Session Layer 3. 傳輸層 Host-to-host Transport Layer 4. Transport Layer 2. 網際層 Internet Layer 3. Network Layer 1. 網路存取層 Network Access Layer 2. Data Link Layer 1. Physical Layer
6
TCP/IP 的層級 4. 應用層 Application Layer 由網路應用程式與相關的處理程序所組成
3. 傳輸層 Host-to-host Transport Layer 提供端點對端點的資料傳遞服務 2. 網際層 Internet Layer 定義資料段並掌控資料的傳輸路徑 1. 網路存取層 Network Access Layer 定義存取實體網路的例行程序
7
TCP/IP 的資料結構 TCP 資料流(stream) UDP 訊息(message) 應用層 傳輸層 資料節(segment)
封包(packet) 網際層 資料段(datagram) 資料段(datagram) 網路存取層 訊框(frame) 訊框(frame)
8
TCP/IP 的資料封裝(Encapsulation)
應用層 資料 stream、message 發送 接收 傳輸層 表頭 資料 segment、packet 網際層 表頭 表頭 資料 datagram 封裝 Encapsulation 解封裝 Decapsulation 網路存取層 表頭 表頭 表頭 資料 frame Note: 表頭 header
9
網路存取層 Network Access Layer
包含 OSI 的最低二層,其功能為: 把 IP 資料段封裝到網路所傳送的訊框內 把 IP 位址對應到網路使用的實體位址 網路存取協定種類繁多,各對應一種實體網路標準,以驅動程式的形態出現。 最常用的網路存取層協定: RFC826,位址解析協定(Address Resolution Protocol,ARP),把IP位址對應成Ethernet位址。 RFC894,規範 IP 資料段封裝的一套標準。
10
網際層 Internet Layer 提供異質網路上的定址能力與資料封包格式的轉換。 最常用的網際層協定:
RFC 791,網際協定(Internet Protocol,IP),提供基本的封包傳送服務。 RFC 792,網際控制訊息協定(Internet Control Message Protocol,ICMP),透過IP來傳送控制訊號。 IP 從最早的 RFC 791, 後來有修正案 RFC 950, 919, 920. 另外 FRC 1122 與 1123 說明 host 使用 IP 的需求. RFC 1812 說明 router 使用 IP 的需求.
11
傳輸層 Host-to-host Transport Layer
提供端點對端點之間的資料傳輸服務。 最常用的網際層協定: 使用者資料段協定(User Datagram Protocol,UDP),只負責將訊息傳到網路上,是一種不可靠、非連結導向的協定。 RFC 793,傳輸控制協定(Transmission Control Protocol,TCP),會檢查資料是否循序正確的傳到網路上,提供可靠、連結導向的傳輸服務。 使用者依據應用程式的特性來選擇TCP或UDP。
12
可靠 v.s. 不可靠 可靠(reliable):檢查資料是否依適當順序正確地傳過網路
不可靠(unreliable):表示此協定不包含驗證資料是否正確到達網路另一端的技術。
13
連結導向 v.s. 非連結導向 連結導向(connection-oriented):在傳送資料前,會和遠端主機交換控制訊息(handshake),以確定對方已準備好接收資料。當handshake完成,就表示已建立connection。 非連結導向(connectionless):表示此協定只負責將訊息傳到網路上,不在傳輸資料前先建立connection ,不檢查資料是否被接收。
14
Connection-oriented v.s. Connectionless
Connection-oriented(WWW,FTP, ,….) Telephone System Users first establishes a connection, uses the connection and then releases the connection. Slow speed. Connectionless(DNS,broadcast,….) Postal System No connection is established Quick speed.
15
應用層 Application Layer 定義如何利用傳輸層協定來遞送資料的程序。 大多為提供服務給使用者的 protocol。
16
常見的應用層協定(1/3) telnet:網路終端機協定(Network Terminal Protocol),提供透過網路遠端登入(remote login)的服務。 FTP:檔案傳輸協定(File Transfer Protocol),讓使用者可以與遠端的主機傳輸檔案。 SMTP:簡易郵件傳送協定(Simple Mail Transfer Protocol),傳送電子郵件。 HTTP:超文件傳輸協定(Hyper Test Transfer Protocol),透過網路傳送網頁。
17
常見的應用層協定(2/3) DNS:網域名稱服務(Domain Name Server),將網路裝置的名稱對應到 IP 位址。
OSPF:開放式最短路徑優先協定(Open Shortest Path First),網路設備可透過 OSPF 交換選徑資訊。 NFS:網路檔案系統(Network File System),讓網路上每個主機可共享檔案。
18
常見的應用層協定(3/3) SNMP:簡單網路管理協定(Simple Network Management Protocol),管理網路運作。
19
TCP/IP Architecture PING TFTP BOOTP Telnet FTP SMTP ICMP UDP TCP IP
ARP RARP PPP UART: universal asynchronous receiver-transmitter RS-232C Driver Ethernet Driver UART Ethernet
20
網際協定(Internet Protocol,IP)
提供基本封包傳送服務: 定義 Internet 基本的傳送單位:資料段(segment)的格式。 定義 Internet 的定址方式。 在網路存取層與傳輸層之間移動資料。 決定資料段到遠端主機的路徑(route)。 執行資料段的分解與重組。
21
IP 的特性 IP 提供非連線性的服務(Connectionless) IP 是不可靠(Un-reliable)的協定
IP 在傳送資料前,不會和遠端主機交換控制訊息(handshake)建立連線。 IP 是不可靠(Un-reliable)的協定 IP 不具備錯誤偵測(Error Detection)與錯誤更正(Error Correction)的功能。 Variable Length of Datagram Best Effort Delivery
22
Variable Length of Datagram
對 IPv4 而言,應用程式可調整 IP datagram 的長度的特性,使得 IP 可適用於各種不同的應用。 一個 datagram 容納(來自上層)的資料量最少為一個 byte,最多為 64K bytes。 IP header 會含有所有傳送該 Datagram 的 Information。
23
Best-Effort Delivery IP 不處理下列的問題
Datagram遺失 延遲或順序不對 資料損壞 Datagram 重覆接收 因為 IP 被設計用於任何實體網路,因此底層的實體網路可能不可靠,造成 IP datagram 遺失、重覆接收、延遲、順序不對或損壞。IP上層的協定程式必須要處理這些問題。 所謂 Best Effort 指正常情況下, packet 會正確送達對方. 但是若是有 congestion in buffers 或傳輸設備或線路損毀, 就可能有 error 產生, 此時 IP 是不會做任何的處理的.
24
The IP datagram header format
25
IP 的資料段 Datagram Bit 4 8 16 24 31 1 版本 IHL 服務型態 總長度 2 識別碼 旗標 段落的偏移量
4 8 16 24 31 1 版本 IHL 服務型態 總長度 2 識別碼 旗標 段落的偏移量 字組 Word 3 存活時間 協定號碼 表頭的加總查核碼 表頭Header 4 來源位址 目的位址 5 6 選項 填補 資料由此開始…
26
IP Datagram Header 欄位(1)
版本(Version,4bits): IP 版本,目前為 version 4 IHL (Internet Header Length,4bits):表頭長度(以32bits為單位) 服務型態(Service Type,8bits):表示可靠性、precedence、delay、throughput 的旗標 總長度(Total Length,16bits): IP Datagram 的長度(以byte為單位)
27
IP Datagram Header 欄位(2)
識別碼(Identification,16bits):傳送端會將一個獨一無二的識別碼存在送出的 datagram 。當路由器重新切割 datagram時,路由器會複製識別碼給每一個片段(fragment)。 旗標(Flags,3bits):指出 Datagram 分割成片段時的一些選項。 段落偏移量(Fragment Offset ,13bits ):指出此資料段是具有相同識別碼的第幾個。接收端使用識別碼及 IP 來源位址將片段重組時,利用段落偏移量欄位可將片段排續。 這一頁的三個欄位: Identification, Flags, Fragment Offset 都是當一個 IP datagram (原先在一個大的 fragment 中) 必須切割成許多小的 datagram, 以放入較小的 fragments 才能傳送時, 在接收端用以重組所需的欄位. Ex: 從底層為 Ethernert 送到底層為 x.25 的網路. Data link layer 最大的傳輸量為 FDDI 4352 bytes、Ethernet 1500 bytes、x bytes、PPP 296 bytes Flag 包括用來指出此 packet 是否有被切割, 是否為最後一個 packet.
28
IP Datagram Header 欄位(3)
存活時間(Time To Live,8bits):設定此 Datagram 可以經過幾個閘道器。 協定號碼或型態(Protocol Number 或 Type,8bits):利用協定號碼可決定是資料是來自那一個傳輸層協定。 表頭的加總查核碼( Header Checksum,16bits):每個閘道器都會檢查 IP Header 的 Checksum。 TTL 欄位由最開始的 hop 所設定, 每經一個 hop, TTL 就減一. 當 TTL=0, 此 packet 就會被丟棄. Protocol number 代表 data 要送給上層的那一個程式, TCP 的 protocol value = 6, UDP 的 protocol value = 17.
29
IP Datagram Header 欄位(4)
來源位址(Source Address,32bits):傳送端主機的 IP Address 目的位址(Destination Address,32bits):目的地主機的 IP Address 選項(Option):例如路由規格等傳送端可設定的選項等。 填補(Padding):加在Option後面使IP Header長度為32 bits倍數。 資料(Data,16bits):上層的資料,但應避免使IP datagram 超過 bytes。
30
IP 傳送資料的過程 以唯一的 IP 位址決定傳送路徑。 封裝且透過網路存取層傳送 IP 資料段。 傳送資料給傳輸層
利用header中的協定號碼決定是那一個傳輸層協定。 將萃取資料送給此傳輸層協定模組。 傳輸層協定以 port 號碼決定資料屬於那一個應用行程。
31
網際控制訊息協定(Internet Control Message Protocol,ICMP)
透過IP來傳送控制訊號 常用的功能: 流量控制 偵測無法到達的目的地 重導路徑 偵測遠端主機
32
使用者資料段協定(User Datagram Protocol,UDP)
只負責將訊息傳到網路上,是一種不可靠、非連結導向的協定。 簡單、效率高、延遲時間小 使AP在協定所在造成的額外負擔最少的情況下,經由網路交換訊息。
33
UDP 的封包 Packet 格式 Bit 16 31 來源埠 Source Port 目的埠 Destination Port 訊息長度
16 31 來源埠 Source Port 目的埠 Destination Port 訊息長度 加總查核碼 Checksum 應用層傳來的訊息(Message)資料
34
UDP Packet Header 欄位 來源埠(Source Port,16bits):傳送端主機的 Port Number
目的埠(Destination Port,16bits):目的地主機的 Port Number 訊息長度(Length,16bits):header+data 的長度(以byte為單位) 加總查核碼(Checksum,16bits):header+pseudo header+data 資料(Data,16bits):應用層傳來的訊息(Message)資料
35
傳輸控制協定(Transmission Control Protocol,TCP)
端點對端點之間的錯誤偵測與更正功能,提供可靠、連結導向的傳輸服務。 用 16 bits 的埠號(Port Number)決定所服務的上層AP。 以三段式交握(3-way & 4-way Hands-hake)來建立與結束連結。 以確認重傳(Positive Acknowledgement with Re-transmission,PAR)的方式來提供可靠性。 使用 TCP 的 application 包括 Web browsing, , file transfer.
36
TCP Segment Format TCP 將上層的 data stream 切割成 segment, 每一個 segment 會配上相對應的一個 segment header, 再送到 IP layer 封裝於一個 packet 中.
37
TCP 的資料節 segment Bit 4 8 16 24 31 1 來源埠 目的埠 2 序號 Sequence Number
4 8 16 24 31 1 來源埠 目的埠 2 序號 Sequence Number 字組 Word 3 確認號碼 Acknowledge Number 表頭Header 4 偏移量 保留 旗標 訊框 Window 加總查核碼 checksum 緊急指標 5 6 選項 填補 資料由此開始…
38
TCP Segment Header 欄位(1)
來源埠(Source Port,16bits):傳送端主機的 port number 目的埠(Destination Port,16bits):目的地主機的 port number 序號(Sequence Number,32bits): SYN=0:此序號指出該 Segment 的第一個 Byte 是整個 Stream 的第幾個 Byte。 SYN=1:為初始序號(Initial Sequence Number,ISN),整個 Stream 的第一個 Segment 的第一個位元的號碼為 ISN+1。 由於 TCP 上層有許多不同的應用程式, ex: Web, FTP, 因此需要指出 segment data 來自於那裡, 送到那裡去. Port number 是用於指出使用此 segment 的 application 的 instance. 在建立 TCP session 前, 兩端的應用程式都會分配到一個 port number 代表此 process. 利用 port number, 就可知此 segment 是要給誰.
39
TCP Segment Header 欄位(2)
確認號碼(Acknowledge Number,32bits):代表下一次希望收到 Segment 的 Sequence Number。 資料位移(Data Offset,4 bits):TCP Header 的長度(以 32 bit 字組為單位) 保留(Reserved,6 bits):均設為 0 訊窗(Windows,16 bits):緩衝器(Buffers)還能接收的 byte 數目。 假設在接收端得到的 segment 有 sequence number=100, 內含 150 個 bytes 的資料, 則回傳的 segment 中, 便會填入 acknowledge number = 250. Data Offset 隱含的意義在說明 data 的真正起始位置. Windows 指出接收端有多大的 buffer 可以儲存 data, 等待上層 application 把資料取走. 用於避免傳送端送出多於 buffer 大小的資料量.
40
TCP Segment Header 欄位(3)
控制位元(Control Bits,6 bits): URG:Urgent Pointer field significant ACK:Acknowledgement field significant PSH:Push Function RST:Reset the connection SYN:Synchronize sequence numbers FIN:No more data from sender URG=1 代表 segment 中內含緊急的資料. urgent point 指出從目前這個 segment 開始, 到存放的 urgent data 結束後的第一個byte間的 offset. 像緊急的資料的結束位置. 所以 urgent point 代表 urgent data 的長度. Ex: 使用者按下 Ctrl-C, 此時 TCP會用 out-of-band 的方式, 將 signal 放在 data 中送給 receiver. ACK=1 代表 segment 是一個 acknowledgement. 除了建立 connection 的最早的 segment, 其他 segment 的 ACK 均為 1. PSH=1 代表 push function, 此 segment 必須迅速的送到接收端. RST=1 代表 session 因為 error 必須 abort. FIN=1 代表這是最後一個 segment, 結束這個方向的 connection.
41
TCP Segment Header 欄位(4)
加總查核碼(Checksum,16bits):所有Header 與 Text 的 16 bit 字組的總和取其 1’s complement 緊急指標(Urgent Pointer,16 bits) 選項(Option) 填補(Padding):加在Option後面使 TCP Header長度為32 bits倍數 資料(Data,16bits):上層的資料 Checksum 是 TCP header, data, pseudoheader, 每 16 bits word 的 1’s complement 總合, 取其 1’s complement. 用於檢查是否有 error. 唯一在 RFC 793 中實際的 option 只有 maximum segment size. 指出接收端能夠處理的最大資料量.
42
3-way handshake 建立連結 Host 1 設定同步訊號 SYN(包含 ISN)送給Host 2
Host 2 收到 SYN 後設定ACK以及自己的SYN,通知 Host 1。 Host 1 送出ACK給Host 2 建立 connection: 上層 AP 將 data 送給 TCP, TCP 建立一個 TCP segment, 包括 source port, destination port, (option) maximum segment size, SYN=1, initial sequence number (ISN=2000), 並將 segment 送到對方. 此時 window size是沒有意義的, 如果 client 需要 server 提供 a large window 則要用 option 來設定 window scale factor. ACK=0, ACK # 是沒有意義的. 此時是沒有送 data 的. 接收者傳回 response, 其中 SYN=1, 自己的 ISN=4000, ACK=1, acknowledgement number (對方的 ISN+1=2001), 將 segment 送到對方. Client 開始送資料, 並回覆 Server, ACK # =4001, 可以開始送資料了. 傳送過程中 如果 Client 一下子送三個 100 bytes 的 segments, SYN=100,200,300, 給 server, server 不需一一回覆, 只需要送一個 ACK, 回覆 ACK=401 即可.
43
4-way Handshake 結束連結 Host 1 設定結束訊號 FIN 送給Host 2
Host 2 收到 FIN 後設定ACK以及自己的FIN,通知 Host 1。 Host 1 送出ACK給Host 2 結束 connection: Client 或 Server 都可以要求結束 connection. 如果只有一方想結束 connection, 另一方仍想要傳資料, 則 four-way handshaking 是無法避免的. 如果同時想結束 connection, 才會變成 3-way handshaking. 在上圖中 Client 想先結束 client 送 data 給 server 這個方向的 connection, 送出 FIN=1 的 segment (已經沒有帶有資料了). Server 送回 ACK=1, 代表有收到 client 的 FIN, 並把 ACK # 加 1 送回. 這時 server 也想結束 server 送 data 給 client 這個方向的 connection, 送出 FIN=1 的 segment (也沒有資料). Client 送回 ACK=1, 代表有收到 client 的 FIN, 並把 ACK # 加 1 送回.
44
TCP 的確認重傳 以確認重傳(Positive Acknowledgement with Retransmission,PAR)的方式來提供可靠性。 封包遺失需要重傳。或是接收對方的 segment,使用 checksum 檢查是否正確: good:送 ACK 給對方(確認)。 bad:丟棄此 segment。經一段時間(timeout)對方發現沒有收到ACK便會重送(retransmit)此 segment。
45
資料遺失與重傳 設定重傳的 timeout 時間
這是收一筆message就送回一個ack的範例. 若 timeout 仍未收到 ack, 便會重傳. 然而TCP不見得要收到上一個ack才能送第二個message. 因為常常一端會大量送資料, 另一端可能都沒有甚麼資料要送, 就會是 send many message, 然後才 1 個 ack message.
46
可調節的重傳時間 計算每次收到回應的時間,便可求出此連結平均的 round-trip delay,以設定重傳的 timeout 時間
47
TCP 的流量控制(Flow Control)
TCP 將資料視為連續不斷的 byte-stream,因此必需維護 bytes 順序與流量控制。 在建立 Connection 時,雙方以 SYN 通知對方自己的 ISN。每個 Segment 依照其 Sequence Number 重組為 Stream。 Receiver 利用 ACK 讓 Sender 知道它已接收那些資料,以及還能接收多少資料。
48
Window (specifies which streams are want to be received)
Sliding Window Window (specifies which streams are want to be received) 1 1001 2001 3001 4001 5001 6001 7001 Window Slides Window 已收到的資料 1 1001 2001 3001 4001 5001 6001 7001
49
流量控制範例一 Window=6000 已收到的資料 目前的segment Source 目前送出segment 的序號=4001
1001 2001 3001 4001 5001 6001 7001 Sender 每次送出 2000 bytes. Receiver 只收到第一個 sender 的 segment, 所以 Acknowledge number =2001, window size=6000. Sender 因為知道 window size=6000, 所以最多只能送到 目前送到第三次, Receiver 即使先收到 segment 3, 也會存在 buffer 中. 然而若有回 ack 的話, 仍然 acknowledge number=2001. Source 目前送出segment 的序號=4001 確認號碼=2001 起始序號(ISN)=0
50
流量控制範例二 這是一個正常的 message flow.
在 receiver 端一旦 buffer 滿了, 送回 window=0, sender 便不會再送 segment. 此時若上層 application layer 的 process 把 buffer 中的資料讀走, window 清出來, receiver 端就會送一個 segment 给對方說明 window size 改變.
51
Congestion Control 一但資料遺失,TCP便進行 congestion control。
不再嘗試填滿接收端的緩衝器,TCP 一開始時只送出一個 segment 能容納的資料量。 如果未有進一步的資料遺失,TCP 將送出的資料量加倍。 以這樣 exponential 速增加為接收端建議 Windows 的一半,這時 TCP 將減緩送出的資料量增加的速度。
Similar presentations