1. 由應用程序產生應用進程,應用進程產生進程端口號,端口號提供相應服務。
2.TCP發送進程以字節流的形式傳遞數據,而接收進程也把數據作為字節流來接收,類似於假想的管道
3.UDP發送進程發送的數據報文都是獨立的,一次UDP不是面向流協議。
4.緩存:數據流向的每一個方向上都有兩種緩存:發送緩存,接收緩存
5.在傳輸層想IP層發送數據是要以報文分組為單位,而不是按字節流來發送,TCP協議把若干字節構成一個分組,我們可以把這樣的分組成為報文段,這種報文段的長度是不定的,可以是幾個字節,也可以是幾千個字節
6.字節號:
以字節為單位
字節號的定義范圍為:0~(2^32 -1)
編號機制:隨機
舉例:加入隨機好正好是1057,而要發送6000個字節,那么字節編號范圍:1057~ 7056
7序號:
以字節為基礎,TCP給每一個報文段指派一個序號
每個報文段的序號就是在這個報文段中第一個字節數據的序號。
舉例:
比如TCP要傳輸6000個字節的文件。第一個字節的編號是10001.如果數據用5個報文段來發送,前四個報文段個攜帶1000字節的數據,最后一個報文段攜帶2000個數據:
報文段1 –> 序號:10001 (字節號范圍: 10001~ 11000)
報文段1 –> 序號:11001 (字節號范圍: 11001~ 12000)
報文段1 –> 序號:12001 (字節號范圍: 12001~ 13000)
報文段1 –> 序號:13001 (字節號范圍: 13001~ 14000)
報文段1 –> 序號:10001 (字節號范圍: 14001~ 16000)
TCP報文段格式及解析
- 源端口和目的端字段---各占兩個字節。端口是運輸層與應用層的服務接口。運輸層的復用和分用功能都要通過端口才能實現。
- 序號字段---占4個字節。TCP連接中傳輸的數據流中的每一個字節都邊上一個編號,序號字段的值則是指本報文所發送的數據第一個字節的序號。
- 確認字段---占4個字節,是期望收到對方的下一個報文段的數據的第一個字節的序號
- 收不長度---占4bit,它指出TCP首部共有四個字節,首部長度可以在20 ~ 60字節之間。因此,這個字段的值可以在5 (5 x 4 =20 )至 15(15 x 4 =60 )之間。
- 保留字段---占6bit,保留為今后使用,但目前應置為0
- 緊急URG---當URG =1 ,表名緊急指針字段有效,它告訴系統此報文段中有緊急數據,應當盡快傳送(相當於高優先級的數據)。
- 確認比特ACK---只用當ACK = 1 是確認號字段才有效,當ACK = 0 時,確認好無效。
- 推送比特PSH(push)---接收TCP收到推送比特置1的報文段,就盡快地交付給應用進程,而不再等到整個緩存都填滿了后再向上交付。
- 復位比特RST(ReSeT)---當RST =1 時 ,表明TCP連接中出現最嚴重差錯,(如由於主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。
10.同步比特SYN---同步畢業SYN置為1,就表示這是一個連接請求或連接接收報文。
11.終止比特FIN(FINAL)---用來釋放一個連接,當FIN = 1 時,表名此報文段的發送端的數據已發送完畢,並要求釋放運輸連接。
12.窗口字段---占2字節。窗口字段用來控制對方發送的數據量,單位是字節。TCP連接的一端根據設置的緩存空間的大小確定自己的接收窗口的大小,然后通知對方以確定對方的發送窗口的上限。
13.檢驗和---占2字節。檢驗和字段檢驗的范圍包括首部和數據這兩部分,在計算校驗和時,要在TCP報文段的前面加上12字節的偽首部。(TCP協議必填,UDP可有可無)
14.緊急指針字段---占16bit.緊急指針指出在本報文段中的緊急數據的最后一個字節的序號。
15.選項字段---長度可變。TCP只規定了一種選項,即最大報文段的長度MSS(Maximum Segment Size)。MSS告訴對方TCP:“我的緩存所能接受的報文段的數據字段的最大長度是MSS個字節”
MSS(Maximum Segment Size):最大報文段長度
MTU(Maxium Transmission Unit):最大傳輸單元
MSS = MTU – 20BYTE(IP首部) – 20BYTE(TCP首部)
16.填充字段---這是為了使整個首部長度是4字節的整數倍。(目前基本用不到)