關(guān)于TCP協(xié)議,我想你應(yīng)該懂了!(1)
本文關(guān)鍵詞:tcp協(xié)議,由筆耕文化傳播整理發(fā)布。
TCP是什么?
TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接(連接導(dǎo)向)的、可靠的、 基于IP的傳輸層協(xié)議。TCP在IP報文的協(xié)議號是6。TCP是一個超級麻煩的協(xié)議,而它又是互聯(lián)網(wǎng)的基礎(chǔ),也是每個程序員必備的基本功。首先來看看OSI的七層模型:
我們需要知道TCP工作在網(wǎng)絡(luò)OSI的七層模型中的第四層——Transport層,IP在第三層——Network層,ARP 在第二層——Data Link層;在第二層上的數(shù)據(jù),我們把它叫Frame,在第三層上的數(shù)據(jù)叫Packet,第四層的數(shù) 據(jù)叫Segment。 同時,我們需要簡單的知道,數(shù)據(jù)從應(yīng)用層發(fā)下來,會在每一層都會加上頭部信息,進行 封裝,然后再發(fā)送到數(shù)據(jù)接收端。這個基本的流程你需要知道,就是每個數(shù)據(jù)都會經(jīng)過數(shù)據(jù)的封裝和解封 裝的過程。 在OSI七層模型中,每一層的作用和對應(yīng)的協(xié)議如下:
TCP是一個協(xié)議,那這個協(xié)議是如何定義的,它的數(shù)據(jù)格式是什么樣子的呢?要進行更深層次的剖析,就 需要了解,甚至是熟記tcp協(xié)議中每個字段的含義。哦,來吧。
上面就是tcp協(xié)議頭部的格式,由于它太重要了,是理解其它內(nèi)容的基礎(chǔ),下面就將每個字段的信息都詳 細的說明一下。
Source Port和Destination Port:分別占用16位,表示源端口號和目的端口號;用于區(qū)別主機中的不同進程, 而IP地址是用來區(qū)分不同的主機的,源端口號和目的端口號配合上IP首部中的源IP地址和目的IP地址就能唯一 的確定一個TCP連接;
Sequence Number:用來標(biāo)識從TCP發(fā)端向TCP收端發(fā)送的數(shù)據(jù)字節(jié)流,它表示在這個報文段中的的第一個數(shù)據(jù) 字節(jié)在數(shù)據(jù)流中的序號;主要用來解決網(wǎng)絡(luò)報亂序的問題;
Acknowledgment Number:32位確認(rèn)序列號包含發(fā)送確認(rèn)的一端所期望收到的下一個序號,因此,確認(rèn)序號應(yīng) 當(dāng)是上次已成功收到數(shù)據(jù)字節(jié)序號加1。不過,只有當(dāng)標(biāo)志位中的ACK標(biāo)志(下面介紹)為1時該確認(rèn)序列號的字 段才有效。主要用來解決不丟包的問題;
Offset:給出首部中32 bit字的數(shù)目,需要這個值是因為任選字段的長度是可變的。這個字段占4bit(最多能 表示15個32bit的的字,即4*15=60個字節(jié)的首部長度),因此TCP最多有60字節(jié)的首部。然而,沒有任選字段, 正常的長度是20字節(jié);
TCP Flags:TCP首部中有6個標(biāo)志比特,它們中的多個可同時被設(shè)置為1,主要是用于操控TCP的狀態(tài)機的,依次 為URG,ACK,PSH,RST,SYN,F(xiàn)IN。每個標(biāo)志位的意思如下:
URG:此標(biāo)志表示TCP包的緊急指針域(后面馬上就要說到)有效,用來保證TCP連接不被中斷,并且督促 中間層設(shè)備要盡快處理這些數(shù)據(jù);
ACK:此標(biāo)志表示應(yīng)答域有效,就是說前面所說的TCP應(yīng)答號將會包含在TCP數(shù)據(jù)包中;有兩個取值:0和1, 為1的時候表示應(yīng)答域有效,反之為0;
PSH:這個標(biāo)志位表示Push操作。所謂Push操作就是指在數(shù)據(jù)包到達接收端以后,立即傳送給應(yīng)用程序, 而不是在緩沖區(qū)中排隊;
RST:這個標(biāo)志表示連接復(fù)位請求。用來復(fù)位那些產(chǎn)生錯誤的連接,也被用來拒絕錯誤和非法的數(shù)據(jù)包;
SYN:表示同步序號,用來建立連接。SYN標(biāo)志位和ACK標(biāo)志位搭配使用,當(dāng)連接請求的時候,SYN=1,, ACK=0;連接被響應(yīng)的時候,SYN=1,ACK=1;這個標(biāo)志的數(shù)據(jù)包經(jīng)常被用來進行端口掃描。掃描者發(fā)送 一個只有SYN的數(shù)據(jù)包,如果對方主機響應(yīng)了一個數(shù)據(jù)包回來 ,就表明這臺主機存在這個端口;但是由于這 種掃描方式只是進行TCP三次握手的第一次握手,因此這種掃描的成功表示被掃描的機器不很安全,一臺安全 的主機將會強制要求一個連接嚴(yán)格的進行TCP的三次握手;
FIN: 表示發(fā)送端已經(jīng)達到數(shù)據(jù)末尾,也就是說雙方的數(shù)據(jù)傳送完成,沒有數(shù)據(jù)可以傳送了,發(fā)送FIN標(biāo)志 位的TCP數(shù)據(jù)包后,連接將被斷開。這個標(biāo)志的數(shù)據(jù)包也經(jīng)常被用于進行端口掃描。
Window:窗口大小,也就是有名的滑動窗口,用來進行流量控制;這是一個復(fù)雜的問題,這篇博文中并不會進行 總結(jié)的;
好了,基本知識都已經(jīng)準(zhǔn)備好了,開始下一段的征程吧。
1
內(nèi)容導(dǎo)航
第 1 頁:TCP是什么? 第 2 頁:三次握手又是什么?
原文:關(guān)于tcp協(xié)議,我想你應(yīng)該懂了!(1) 返回網(wǎng)絡(luò)頻道首頁
本文關(guān)鍵詞:tcp協(xié)議,由筆耕文化傳播整理發(fā)布。
本文編號:159034
本文鏈接:http://sikaile.net/wenshubaike/xxkj/159034.html