HCIA - Datacom - 2.常用網路基礎知識
一、TCP和UDP
1、報文格式
2、TCP報文頭部
Source Port:源埠,標識哪個應用程式傳送,長度為16bit;
Destination Port:目的埠,標識哪個應用程式接收,長度為16bit;
Sequence Number:序號欄位,TCP連線中傳輸的資料流每個位元組都編上一個序號。序號欄位的值指的是本報文段所傳送資料的第一個位元組的序號。長度為32bit;
Acknowledgment Number:確認序列號,是期望收到對方下一個報文段資料的第1個位元組的序號,即上次已成功接收到的資料段的最後一個位元組資料的序號加1,只有Ack標識未1,此欄位有效,長度為32bit;
Header Length:頭部長度,指出TCP報文頭部長度,以32bit(4位元組)為計算單位,若無選項內容,則該欄位為5,即頭部為20位元組;
Reserved:保留,必須填0,長度為6bit;
Control bits:控制位,包含FIN、ACK、SYN等標誌位,代表不同狀態下的TCP資料段;
Windows:視窗TCP的流量控制,這個值表明當前接收端可接受的最大的資料總數(以位元組為單位)。視窗最大為65535位元組,長度為16bit;
Checksum:校驗欄位,是一個強制性的欄位,由發端計算和儲存,並由收端進行驗證,在計算校驗和時,要包括TCP頭部和TCP資料,同時在TCP報文段的前面加上12位元組的偽頭部,長度為16bit;
Urgent:緊急指標,只有當URG標誌置1時緊急指標才有效。TCP的緊急方式是傳送端向另一端傳送緊急資料的一種方式。緊急指標指出在本報文段中緊急資料共有多少個位元組(緊急資料防災本報文段資料的最前面),長度為16bit;
Options:選項欄位(可選),長度為0-40位元組;
3、UDP報文頭部(共8位元組)
Source Port:源埠,標識哪個應用程式傳送,長度為16bit;
Destination Port:目的埠,標識哪個應用程式接收,長度為16bit;
Length:該欄位指定UDP報頭和資料總共佔用的長度,可能的最小長度是8位元組,因為UDP報頭已經佔用了8位元組,由於這個欄位的存在,UDP報文總長不可能超過65535位元組(包括8位元組的報頭,和65527位元組的資料);
Checksum:覆蓋UDP頭部和UDP資料的校驗和,長度為16bit。
4、TCP和UDP - 埠號
二、TCP的建立 - 三次握手
TCP連線建立的詳細過程如下:
(1)由TCP連線發起方(PC1),傳送第一個SYN位置1的TCP報文,初始序列號a為一個隨機生成的數 字,因為沒收到過來自PC2的任何報文,所以確認序列號為0;
(2)接收方(PC2)接收到合法的SYN報文之後,回覆一個SYN和ACK置1的TCP報文,初始序列號b為一個 隨機生成的數字,同時因為此報文是回覆給PC1的報文,所以確認序列號為a+1;
(3)PC1接收到PC2傳送的SYN和ACK置位的TCP報文後,回覆一個ACK置位的報文,此時序列號為a+1,確 認序列號為b+1,PC2收到之後,TCP雙向連線建立。
三、TCP的序列號與確認序列號
假設PC1要給PC2傳送一段資料,傳輸過程如下:
(1)PC1將全部待TCP傳送的資料按照位元組為單位編上號,假設第一個位元組的編號為“a+1”,第二個位元組的序號為“a+2”,依次類推。
(2)PC1會把每一段資料的第一個位元組的編號作為序列號(Sequence number),然後將TCP報文傳送出去。
(3)PC2在收到PC1傳送來的TCP報文後,需要給予確認同時請求下一段資料,如何確定下一段資料呢?序列號(a+1)+載荷長度=下一段資料的第一個位元組的序號(a+1+12)。
(4)PC1在收到PC2傳送的TCP報文之後,發現確認序列號為“a+1+12”,說明“a+1”到“a+12”這一段資料已經被接受,需要從“a+1+12”開始傳送。
為了提升傳送效率,也可以一次性發送多端資料,由接收方統一確認。