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