????????IP協(xié)議無(wú)連接的通信協(xié)議淘正,它不會(huì)占用兩個(gè)正在通信的計(jì)算機(jī)之間的通信線路摆马。這樣IP就降低了對(duì)網(wǎng)絡(luò)線路的需求臼闻,每條線可以同時(shí)滿足許多不同的計(jì)算機(jī)之間的通信需要。通過(guò)IP 消息或者其他數(shù)據(jù)呢會(huì)被分割為較小的獨(dú)立的包囤采。并通過(guò)因特網(wǎng)在計(jì)算機(jī)之間傳送述呐。IP負(fù)責(zé)將每個(gè)包路由至它的目的地。但是IP協(xié)議并沒(méi)有做任何事情來(lái)確認(rèn)數(shù)據(jù)包是否按順序發(fā)送或者包是否被破壞蕉毯。所以IP數(shù)據(jù)包是不可靠的乓搬,需要由它的上層協(xié)議來(lái)做出控制。
????????傳輸控制協(xié)議TCP是屬于傳輸層的協(xié)議(Transmission Control Protocol 縮寫就是TCP)是一種面向連接的代虾、可靠的进肯、基于字節(jié)流的傳輸層通信協(xié)議,數(shù)據(jù)傳輸時(shí)應(yīng)用層向TCP發(fā)送數(shù)據(jù)流棉磨。然后TCP把數(shù)據(jù)流分割成適當(dāng)長(zhǎng)度的報(bào)文段江掩,報(bào)文段的長(zhǎng)度通常受該計(jì)算機(jī)連接的網(wǎng)絡(luò)的數(shù)據(jù)鏈路層的最大傳輸單元(MTU)的限制,之后TCP把結(jié)果包傳給IP層乘瓤,由它通過(guò)網(wǎng)絡(luò)將數(shù)據(jù)傳輸給目標(biāo)節(jié)點(diǎn)的TCP層环形。TCP為了保證不丟失包,就給每個(gè)包一個(gè)序列號(hào)(sequence number)衙傀,保證了包傳送到目標(biāo)節(jié)點(diǎn)的按序處理抬吟,然后接收端對(duì)已成功接收的包發(fā)回一個(gè)相應(yīng)的確認(rèn)(ACK確認(rèn))。如果接收端在合理的發(fā)送時(shí)延(也稱傳輸時(shí)延)內(nèi)未收到確認(rèn)统抬,那么對(duì)應(yīng)的數(shù)據(jù)包就會(huì)被定義為假設(shè)已丟失火本,且會(huì)對(duì)其進(jìn)行重傳?
TCP用一個(gè)奇偶校驗(yàn)“”累加和函數(shù)“”檢驗(yàn)是否有錯(cuò)誤,在發(fā)送和接收時(shí)都會(huì)校驗(yàn)和
TCP報(bào)文頭
? ? ? 如圖所示聪建,其中Source Port和Destination Port 分別表示源端口和目的端口发侵,各占兩個(gè)字節(jié)。TCP和UDP的數(shù)據(jù)包妆偏,都不包含IP地址信息的刃鳄,那是IP層上的事,但是TCP和UDP均會(huì)有源端口和目的端口钱骂,端口是屬于傳輸層知識(shí)范疇的叔锐。兩個(gè)進(jìn)程在計(jì)算機(jī)內(nèi)部進(jìn)行通信,可以由管道见秽、內(nèi)存共享愉烙、信號(hào)量、消息隊(duì)列等方法進(jìn)行通信的解取。而兩個(gè)進(jìn)程如果需要進(jìn)行通信最基本的前提是能夠唯一的標(biāo)識(shí)步责,通過(guò)唯一標(biāo)識(shí)找到對(duì)應(yīng)的進(jìn)程。在本地進(jìn)程通信中,我們可以使用PID(進(jìn)程標(biāo)識(shí)符)來(lái)唯一標(biāo)識(shí)一個(gè)進(jìn)程蔓肯,但是PID只在本地唯一遂鹊,如果把兩個(gè)進(jìn)程放到兩臺(tái)不同的計(jì)算機(jī),然后進(jìn)行通信的話蔗包,那PID就不夠用了秉扑,這樣就需要另外一個(gè)手段。解決這個(gè)問(wèn)題的方法调限,就是在傳輸層中使用協(xié)議端口號(hào)(Protocol port number)舟陆,簡(jiǎn)稱端口。
IP層的ip地址可以唯一標(biāo)識(shí)主機(jī)耻矮,而TCP協(xié)議和端口號(hào)可以唯一標(biāo)識(shí)主機(jī)中的一個(gè)進(jìn)程秦躯。所以我們可以利用IP地址+協(xié)議+端口號(hào)去標(biāo)識(shí)網(wǎng)絡(luò)中的一個(gè)進(jìn)程,俗稱套接字(socket)裆装。
????????雖然通信的重點(diǎn)是應(yīng)用進(jìn)程宦赠,我們只要把要傳送的報(bào)文交給目的主機(jī)的某一個(gè)合適的端口,剩下的工作米母,就由TCP來(lái)完成。
Sequence Number(seq序號(hào))
????????占了4個(gè)字節(jié)毡琉。TCP連接中傳送的字節(jié)流中的每一個(gè)字節(jié)都按順序編號(hào)铁瞒,例如一段報(bào)文的序號(hào)字段值是107,而攜帶的數(shù)據(jù)共有100個(gè)字段桅滋。如果有下一個(gè)報(bào)文段慧耍。其序號(hào)應(yīng)該是107+100=207開(kāi)始。接下來(lái)丐谋。
Acknowledgment Number(ACK確認(rèn)號(hào))
??????????占了4個(gè)字節(jié)芍碧。是期望收到對(duì)方下一個(gè)報(bào)文的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào),例如B收到A發(fā)送過(guò)來(lái)的報(bào)文号俐,其序列號(hào)字段值為301泌豆,而數(shù)據(jù)長(zhǎng)度是200字節(jié)。這表明了B正確的收到了A發(fā)送得到序號(hào)500(301+200-1)為止的數(shù)據(jù)吏饿。所以B希望收到A的下一個(gè)數(shù)據(jù)序號(hào)是501踪危。于是B在發(fā)送給A的確認(rèn)報(bào)文段中會(huì)把ACK確認(rèn)號(hào)置為501。
Offset(數(shù)據(jù)偏移)
????????由于頭部有可選字段猪落,長(zhǎng)度不固定贞远,所以由它指出TCP報(bào)文的數(shù)據(jù)距離TCP報(bào)文的起始處有多遠(yuǎn)。
Reserved(保留域)
? ? ? ? 保留今后使用的笨忌,目前都是被標(biāo)為0
TCP Flags(控制位)
? ? ? ? 主要有八個(gè)標(biāo)志位來(lái)組成蓝仲,每個(gè)標(biāo)志位標(biāo)識(shí)一個(gè)控制功能(CEUAPRSF)
常見(jiàn)的6個(gè):
? ? ? ? ? ? ? ? URG:緊急指針標(biāo)志(當(dāng)它為1時(shí),表示緊急指針有效,為0則忽略緊急指針)袱结;
? ? ? ? ? ? ? ? ACK:確認(rèn)序號(hào)標(biāo)志? ?(當(dāng)它為1時(shí)亮隙,表示確認(rèn)號(hào)有效,為0表示報(bào)文信息中不含確認(rèn)信息擎勘,忽略確認(rèn)號(hào)字段)咱揍;
? ? ? ? ? ? ? ? PSH:push標(biāo)志 (當(dāng)它為1時(shí),是表示帶有push的標(biāo)志棚饵,指示報(bào)文的接收端接收到報(bào)文信息后應(yīng)該盡快將報(bào)文數(shù)據(jù)交給應(yīng)用程序煤裙,而不在緩沖區(qū)排隊(duì))
? ? ? ? ? ? ? ? RST:重置連接標(biāo)志(用于重置因?yàn)橹鳈C(jī)崩潰或者其他原因錯(cuò)誤的標(biāo)志,或者用于拒絕非法的報(bào)文段的連接請(qǐng)求)
? ? ? ? ? ? ? ? SYN:同步序號(hào)噪漾,用于建立連接過(guò)程(當(dāng)它為1時(shí)和ACK為0時(shí)硼砰,表示該數(shù)據(jù)段沒(méi)有使用捎帶的確認(rèn)域,而連接應(yīng)答捎帶一個(gè)確認(rèn)域需要syn=1欣硼,ack=1)
? ? ? ? ? ? ? ? FIN:finish標(biāo)志题翰,用于釋放連接(當(dāng)它為1時(shí),表示發(fā)送方已經(jīng)沒(méi)有數(shù)據(jù)發(fā)送了诈胜,關(guān)閉本方數(shù)據(jù)流)
? ? ? ? ? ? ? ? 注:加粗部分留意使用
window(指的是滑動(dòng)窗口的大小)
? ? ? ? 用來(lái)告知發(fā)送端和接收端的緩存大小 以此控制發(fā)送端發(fā)送數(shù)據(jù)的速率豹障,從而達(dá)到流量控制
Checksum(檢驗(yàn)和)
? ? ? ? 奇偶校驗(yàn),此校驗(yàn)和時(shí)對(duì)整個(gè)TCP報(bào)文段(包括TCP頭部和TCP數(shù)據(jù))以16位進(jìn)行計(jì)算所得由發(fā)送端計(jì)算和存儲(chǔ)焦匈,并由接收端進(jìn)行驗(yàn)證。
Urgent Pointer(緊急指針)
? ? ? ? 只有在TCP flags中的URG(緊急指針標(biāo)志)為1的時(shí)候才有效缓熟,指出本次報(bào)文中緊急數(shù)據(jù)的字節(jié)數(shù)
TCP Options(可選項(xiàng))
? ? ? ? 長(zhǎng)度可變,定義其他的可選參數(shù)
????????當(dāng)應(yīng)用程序希望通過(guò)TCP與另一個(gè)應(yīng)用程序通信時(shí)垦写。會(huì)發(fā)送一個(gè)通信請(qǐng)求,這個(gè)請(qǐng)求必須被送到一個(gè)確切的地址梯投。在雙方握手之后。TCP將在兩個(gè)應(yīng)用之間建立一個(gè)全雙工(full duplex)的通信况毅。這個(gè)全雙工的通信將占用兩個(gè)計(jì)算機(jī)之間的通信線路,直到它被一方或雙方關(guān)閉為止俭茧。全雙工(計(jì)算機(jī)A給B發(fā)送數(shù)據(jù)的同時(shí),B也可以給A發(fā)送數(shù)據(jù))
未完待續(xù)···太困了 打游戲去了