TCP介紹
傳輸控制協(xié)議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
TCP是為了在不可靠的互聯(lián)網(wǎng)絡上提供可靠的端到端字節(jié)流而專門設計的一個傳輸協(xié)議。
當應用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)摹⒂?位字節(jié)表示的數(shù)據(jù)流,TCP則把數(shù)據(jù)流分割成適當長度的報文段,最大傳輸段大小(MSS)通常受該計算機連接的網(wǎng)絡的數(shù)據(jù)鏈路層的最大傳送單元(MTU)限制。之后TCP把數(shù)據(jù)包傳給IP層,由它來通過網(wǎng)絡將包傳送給接收端實體的TCP層。
TCP為了保證報文傳輸?shù)目煽浚?/p>
給每個包一個序號
,同時序號也保證了傳送到接收端實體的包的
按序接收
。然后接收端實體對已成功收到的字節(jié)發(fā)回一個相應的
確認(ACK)
;如果發(fā)送端實體在合理的往返時延(RTT)內(nèi)未收到確認,那么對應的數(shù)據(jù)(假設丟失了)將會被重傳(超時重傳)。
TCP工作過程
首先,我們可以很明顯從圖中看出,tcp工作需要分兩個主體,一個客戶端,一個服務器。我用超級大白話來幫助理解:①tcp服務器
買部手機
插上電話卡
設置手機為正常的接聽狀態(tài)
等待他人來電
②在程序中的
創(chuàng)建socket套接字
綁定本機地址信息
設置套接字為被動連接
等待客戶端的連接
收發(fā)數(shù)據(jù)
我們先運行這個程序,然后打開網(wǎng)絡調(diào)試助手進行連接:
然后我們在服務器端口發(fā)送消息至客戶端:
當然,我們也可以脫離網(wǎng)絡調(diào)試助手,我們自己協(xié)議簡易客戶端程序:
同樣地,手機要先開機才能接電話,所以先運行服務器,再運行客戶端:
切換到服務器:
回到客戶端:
同樣也是非常簡單,客戶端的寫法只需要發(fā)送建立連接即可,也就是通過connect方法撥通電話。
當然,你也可以選擇加入循環(huán)語句進行循環(huán)收發(fā),但想要達到聊天軟件那種收發(fā)無規(guī)律的效果,還是需要并發(fā)編程(后面我也會出的)。
TCP工作方式(原理)
一、三次握手
TCP是因特網(wǎng)中的傳輸層協(xié)議,使用
三次握手協(xié)議
建立連接。當主動方發(fā)出SYN連接請求后,等待對方回答SYN+ACK,并最終對對方的 SYN 執(zhí)行 ACK 確認。這種建立連接的方法可以防止產(chǎn)生錯誤的連接。
術(shù)語:
SYN:同步位,SYN=1,表示進行一個連接請求;
ACK:確認位,ACK=1,確認有效,ACK=0,確認無效;
seq:序號;
FIN:斷開連接并且會停止發(fā)送數(shù)據(jù)。
TCP三次握手的過程如下:
1. 客戶端發(fā)送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態(tài)。
2. 服務器端收到SYN報文,回應一個SYN (SEQ=y)ACK(ACK=x+1)報文,進入SYN_RECV狀態(tài)。
3. 客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態(tài)。
三次握手完成,TCP客戶端和服務器端成功地建立連接,可以開始傳輸數(shù)據(jù)了。
形象點就是:
客戶端說:服務器我要連接你了,你同意嗎?
服務器說:我同意。客戶端,我要連接你了,你同意嗎?
客戶端說:我也同意。
TCP三次握手的原因:
防止已失效的連接請求又傳送到服務器端,因而產(chǎn)生錯誤。三次握手的過程即是通信雙方相互告知序列號起始值, 并確認對方已經(jīng)收到了序列號起始值的必經(jīng)步驟。如果只是兩次握手, 至多只有連接發(fā)起方的起始序列號能被確認, 另一方選擇的序列號則得不到確認。
二、四次揮手
形象點就是:
客戶端說:服務器,我要斷開你了!
服務器說:好的!讓我傳完數(shù)據(jù)!
數(shù)據(jù)傳輸結(jié)束后
服務器說:客戶端,我要斷開你了!
客戶端說:好的!
這就表現(xiàn)出了四次揮手,和三次握手不同的是,結(jié)束的時候,可能仍然有數(shù)據(jù)在進行傳輸,tcp為了保證數(shù)據(jù)傳輸?shù)耐暾裕瑪嚅_連接會在數(shù)據(jù)傳輸結(jié)束之后再進行,因此這里也體現(xiàn)出一次揮手。
TCP簡易聊天器(局域網(wǎng))
仍然是先服務端再客戶端。
審核編輯:劉清
-
服務器
+關(guān)注
關(guān)注
12文章
9021瀏覽量
85184 -
TCP
+關(guān)注
關(guān)注
8文章
1350瀏覽量
78987 -
傳輸協(xié)議
+關(guān)注
關(guān)注
0文章
78瀏覽量
11439 -
RTT
+關(guān)注
關(guān)注
0文章
65瀏覽量
17086
發(fā)布評論請先 登錄
相關(guān)推薦
評論