tcp要點學習 基礎概念

2021-05-01 07:20:10 字數 2532 閱讀 7797

tcp要點學習-基礎概念

author : kevin lynx

tcp是tcp/ip協議簇中傳輸層上的一種網路協議,它是一種面向連線的、可靠的協議。為了提供這種可靠性,

tcp實現了各種有效的機制、演算法。為了從一種巨集觀的角度去了解這個協議,這裡先大致地提一下與之相關

的概念。

1. 什麼是『面向連線的』?

引用中的概念:

面向連線意味著兩個使用tcp的應用(通常是乙個客戶和乙個伺服器)在彼此交換資料之前必須先建立

乙個tcp連線。

2. 什麼是『三次握手』?

在建立tcp連線之前,兩個使用tcp的應用需要交換三次網路資料。這三個資料報的來往也就是所謂的『

三次握手』。

3. 報文段segment

我們說tcp是流式的網路協議,那是因為,應用程式可以一直往tcp寫資料,無論你是逐byte,還是write

a chunk,tcp對應用傳給它的資料進行緩衝,直到緩衝資料達到一定尺寸才傳送。可以看出,對於應用

而言,tcp就像是stream的。但事實上,在tcp層,資料還是以塊為單位的。這個塊也就是所謂的報文段

segment。

4. 什麼是mtu?

mtu即最大傳輸單元(maximum transmission unit,mtu)是指一種通訊協議的某一層上面所能通過的

大資料報大小(以位元組為單位)。我個人目前的理解認為,mtu是乙個網路在硬體層次上所允許的最大

資料報大小,例如乙太網大概是1500位元組。

5. 什麼是mss?

mss即最大報文段大小(maximum segment size),它是指tcp中乙個報文段上附加的使用者資料的最大大小。

這裡稍微說下應用層傳送某個資料報時整個tcp/ip協議棧的操作過程:應用層將自己的使用者資料傳給tcp

層(傳輸層),tcp在這些資料前新增自己的協議頭(簡單地理解為附加一些資料),然後將資料交給

ip層(網路層),ip層附加自己的協議頭,以此類推。

雖然mss意思是最大報文段大小,但事實上它是排除了協議頭的使用者資料。

6. mtu and mss ?

可以簡單地給你乙個這樣的公示:mss = mtu - tcp_header_size - ip_header_size。

而通常,ip協議附加的協議頭大小和tcp的協議頭大小都是20位元組,所以通常的mss為1460位元組。

注意,這裡說的數字並不見得正確,因為mss是可以被協商的。各種協議頭也可能被新增附加資料,但是

他們的關係是這樣的。

7. 什麼是視窗大小?

找本tcp的書看下tcp資料報的包頭(本文多次使用資料報、報文的概念,我這裡說的都是一樣的),你會

發現那個16位的視窗大小。

視窗這個域對於整個tcp協議都很重要。簡單地說,視窗大小是指接收端的接收快取的大小。上面說了,應用

在發資料的時候,tcp會快取這些資料,稍後傳送。接收資料時也一樣,tcp接收資料並快取起來,直到應用

呼叫recv之類的函式取資料時,tcp才將這些快取資料清除。

tcp傳送端會根據tcp接收端那個接收快取大小決定傳送多少資料(如何知道這個快取大小?稍後給概念)。

這樣,tcp接收端的接收快取才不至於緩衝溢位。

8. 提供可靠性的方法之一:ack確認?

這裡還不敢提序號、確認號、延時ack等亂七八糟的東西。我只能告訴你,當tcp傳送某些資料給tcp接收方

時,tcp接收方會發回乙個確認報文。tcp傳送方收到這個確認報文後,就可以確認剛才傳送的資料報成功到達。

為什麼這個確認報文叫ack確認(貌似是我臨時給的概念:d)?再翻到tcp包頭結構那張圖,ack是tcp包頭中

的1bit標誌位,如同syn、psh、rst之類的標誌一樣,這些標誌都有乙個專有的用途。當ack標誌位被設定為1

時,我就稱其為ack確認標誌,因為ack就是用於確認報文段的。

在上面所說的視窗大小中,我提到,傳送方如何知道接收方的接收快取大小呢?這也是通過確認報文段實現:

當接收方接收到資料後,傳送ack確認資料報給傳送方,就設定包頭中的視窗域。

9. 提供可靠性的方法之二:各種定時器

tcp中會設定很多計時器,這些定時器大多用於超時重傳(老半天得不到回應,所以重傳資料)。

10.什麼是全雙工?

全雙工就是你可以同時在乙個tcp連線上進行資料的傳送和接收。這種雙工特性也促使了關閉tcp連線時的四次

握手。

TCP學習要點

tcp是tcp ip協議簇中傳輸層上的一種網路協議,它是一種面向連線的 可靠的協議。為了提供這種可靠性,tcp實現了各種有效的機制 演算法。為了從一種巨集觀的角度去了解這個協議,這裡先大致地提一下與之相關 的概念。1.什麼是 面向連線的 引用中的概念 面向連線意味著兩個使用tcp的應用 通常是乙個客...

tcp要點學習 斷開連線

主要部分,四次握手 斷開連線其實從我的角度看不區分客戶端和伺服器端,任何一方都可以呼叫close or closesocket 之類 的函式開始主動終止乙個連線。這裡先暫時說正常情況。當呼叫close函式斷開乙個連線時,主動斷開的 一方傳送fin finish報文給對方。有了之前的經驗,我想你應該明...

C C 要點全掌握 一 基礎概念

最近參加了幾個公司到學校的招聘會,筆試時大多要求使用c c 語言,而且有些筆試考到了語言的細節部分。說來汗顏,c c 只在大一學習時使用了一年,之後一直在學習高階語言的元件開發,到現在c c 語言的有些細節,部分已經忘記。在此將c c 的基礎要點重拾一遍,以便往後忘記之時查閱。1 區域性變數儲存於堆...