學習筆記19 TCP建立和釋放連線的過程

2021-08-07 11:12:56 字數 2602 閱讀 9920

在世界上,各種各樣的電腦執行著各自不同的作業系統,就像世界各地的人們說著不同的語言,他們不能直接溝通交流,所以需要制定一系列的規則來幫助他們互相理解交流,然後才能將世界連線起來。

同樣,要建立乙個計算機網路,也需要這樣一系列的規則,這就是tcp/ip協議。

其中傳輸層主要有兩個協議:

tcp(transmission control protocol 傳輸控制協議)和udp(user data protocol 使用者資料報協議)

tcp是面向連線的協議。

也就是說,在資料傳輸前,雙方必須建立乙個可靠的連線。

udp是非連線的協議。

傳輸資料之前,源端和終端不建立連線。

udp協議,當源端想要傳送資料時,就簡單地去抓取應用程式的資料,然後盡可能快地把它扔到網路上。也就是說傳送資料僅僅受應用程式生成資料的速度,計算機的能力和傳輸頻寬的限制。

在終端,udp把每個訊息段放到佇列中,應用程式自己去讀訊息佇列。

常見的基於tcp的應用層協議有:

telnet(teletype over the network) 遠端登入

ftp(file transfer protocol) 檔案傳輸協議

smtp(****** mail transfer protocol) 簡單郵件傳輸協議 用來傳送電子郵件

pop3(post office protocol 3)郵件讀取協議 用來接收電子郵件

http(hyper text transfer protocol)超文字傳輸協議

https(hyper text transfer protocol secure)安全超文字傳輸協議

常見的基於udp的應用層協議有:

nfs(network file system)網路檔案系統

tftp(trivial file transfer protocol)簡單檔案傳輸協議

snmp(****** network management protocol) 簡單網路管理協議 用於網路資訊的收集和網路管理

dhcp(dynamic host configuration protocol)動態主機配置協議

ntp(network time protocol) 網路時間協議 用於網路同步

bootp(boot protocol)啟動協議 用於無盤裝置

常見的基於tcp和udp的有:

dns(domain name service) 網域名稱服務 用於完成位址查詢,郵件**等工作

echo(echo protocol) 迴繞協議 用於查錯及測量應答時間

關於比較常見的http協議,有兩種:長連線和短連線

短連線:指通訊雙方有資料互動時,就建立乙個連線,資料傳送完,則斷開連線

長連線:指每次操作完之後不斷開連線,下次就可以直接傳送資料報了,不用再建立連線。

當然長連線不能無限期的維持,會有乙個超時時間,超過這個時間,伺服器會告訴客戶端連線過期。

其中tcp為應用程序提供可靠交付的,全雙工的通訊,也就是保證通訊的資料不會丟失或者錯亂,且通訊雙方可以傳送和接收資料。

從圖中可以看到,傳送方給要傳送的資料加上了乙個tcp首部,構成乙個完整的tcp報文,這個首部的格式如下:

其中有幾個關鍵位置比較重要,首先是ack位,只有當ack=1時確認號字段才有效,表示響應請求。然後是syn位,當syn=1時表示這是乙個連線建立請求或者連線接受報文。最後是fin位,當fin=1時表示傳送完畢,要求釋放連線。

下面進入正題:

tcp建立連線的過程可以概括為三次握手:

第一次握手:主機a傳送位碼為syn=1,隨機產生seq number=1234567的資料報到伺服器,主機b由syn=1知道,a要求建立聯機;

第二次握手:主機b收到請求後要確認聯機資訊,向a傳送ack number=(主機a的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;

第三次握手:主機a收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機a會再傳送ack number=(主機b的seq+1),ack=1,主機b收到後確認seq值與ack=1則連線建立成功。

完成三次握手,主機a與主機b開始傳送資料。

tcp釋放連線的過程可以概括為四次揮手:

(1)客戶端c傳送乙個fin,用來關閉客戶a到伺服器b的資料傳送。

(2)伺服器s收到這個fin,它發回乙個ack,確認序號為收到的序號加1。然後伺服器s向上一層確認是否可以關閉連線。

(3)伺服器s跟上層確認關閉與客戶端c的連線後,傳送乙個fin給客戶端c。

(4)客戶端c發回ack報文確認,確認序號設定為收到的序號加1。

TCP連線建立和釋放

cp是面向連線的運輸層協議,它提供可靠交付的 全雙工的 面向位元組流的點對點服務。http協議便是基於tcp協議實現的。雖然作為應用層協議,http協議並沒有明確要求必須使用tcp協議作為運輸層協議,但是因為http協議對可靠性的的要求,預設http是基於tcp協議的。若是使用udp這種不可靠的 盡...

基礎教程 TCP連線的建立和釋放 1

tcp首部格式 先看tcp報文段的格式,如下 tcp報文段首部的前20個位元組是固定的,後面有4n位元組是根據需要而增加的選項。因此tcp報文段的最小長度為20個位元組。首部固定部分的各字段的意義如下 1 源埠和目的埠 加上ip首部的源ip位址和目的ip位址,確定唯一的乙個tcp連線。另外通過目的埠...

APUE學習筆記 執行緒建立和退出

一 執行緒的建立 這個程式讓主程序 啟動乙個執行緒,主程序和執行緒都列印一次 pid 程序id 和tid 執行緒id include apue.h include pthread t ntid void printids const char s void thr fn void arg int m...