TCP/IP協議原理與介紹
HTTP、FTP、SMTP、Telnet等等協議,哦!那個HTTP協議啊就是訪問網頁用的那個協議啊然後那個······其實······你懂得,我們應該從實際來了解他,理解網路協議的作用與功能,然後再從根本來看他是具體怎麼實現的。我們可以先從HTTP、FTP、DHCP、DNS、ARP等常見協議開始入手了解它是如何工作的,然後照著這個態度再去深入了解其他的協議。先不多扯了進入正題。
一、什麼是TCP/IP?
顧名思義 TCP/IP(Transmission Control Protocol/Internet Protocol),傳輸控制協議/網際協議,TCP/IP是現代Internet的核心技術,由IETF定義。所有的系統、終端、線路、用戶、開發者,都必須遵守TCP/IP協議族所規定的法則!IP世界的根本法就是TCP/IP協議族。這裡我又扯到協議族了,就像快樂家族,不僅僅我們很熟悉的何炅、謝娜。不僅包括主持人,還有導演、攝像等等其他工作人員。TCP/IP也就像一個組,協議族。其中還包括HTTP、Telnet、FTP、RIP、UDP等等。其名字來源於其中最主要的兩個協議-------TCP與IP。它們分別在TCP/IP模型的第二層與第三層。
二、OSI參考模型和TCP/IP參考模型
IP世界是由通信實體過程的,而通信實體,是要分層的。分層的好處在於:
1、各層之間是獨立的。
2、靈活性好。
3、結構上可分割開。
4、易於實現和維護。
5、能促進標準化工作。
所以通信實體必須分出層次,以保證各種網路技術能和諧地共存和良好地配合,並不斷激勵技術創新。所以在1984年,國際標準化組織(ISO)建立了一套非常抽象的分層結構,這就是著名的ISO/OSI(國際標準化組織的開發網路架構),這對我們分析網路通信是非常有幫助的。
物理層(第一層):物理層解決最基礎的傳送通道,涉及問題主要是建立、維護和釋放物理鏈路所需的機械的、電氣的/光學的、功能的和規程的特性,如光纜如何抗衰耗,無線設備如何提高發射功率,為什麼雙絞線要有屏蔽層等。
數據鏈路層(第二層):數據鏈路在物理層按「位」服務的基礎上,在相鄰的網路節點直接提供簡單的、傳輸以幀為單位的數據,同時還負責流量控制、差錯控制(信號會因機器、電器氣等原因出現錯誤)。以我們經常聽到的「乙太網幀」可以知道乙太網就是屬於這層的。
網路層(第三層):網路層對上層-----傳輸層提供兩種服務,一種叫做「面向連接」的網路服務,一種叫做「無連接」的網路服務。網路層擔負著四大任務:1.路由選擇 2.擁塞控制 3.區域網間互聯 4.統計和控制。我們津津樂道的IP協議就在這層起著重要的作用。
傳輸層(第四層):傳輸層的任務是向用戶提供可靠地、透明的端到端的數據傳輸以及差錯控制和流量控制機制。由於它的存在會話層、表示層、應用層的設計不必考慮底層細節,因此起到「承上啟下」的作用。假如兩台計算機A、B需要通信,那麼A、B之間進行直接的傳輸層的通信,而在A、B之間如果有若干網路節點,如路由器X、Y、Z那麼A與X,X與Y,Y與Z,Z與B之間都要進行第三層的通信。TCP與UDP就屬於傳輸層。
會話層(第五層):會話層提供許多增值服務,如互動式對話管理,允許一路交互、兩路交換、兩路同時回話;管理用戶登錄遠程分時系統;在兩機器之間傳輸文件,進行同步控制等。
表示層(第六層):表示層就處理通信進程之間交換數據的表示方法,包括語法轉換、數據格式的轉換、加密與解密、壓縮與解壓縮等。
第七層(應用層):應用層正所謂站在巨人的肩膀上面的產物,底層所有協議的最終目的都是為應用層提供可靠的傳送手段,底層協議並沒有直接瞞住用戶的任何實際需求。我們日常使用的收發電子郵件、傳送文件、流量網頁、交互及時信息等都屬於應用層,是用戶體驗最直觀的服務。
正所謂「優勝劣汰,適者生存」,OSI由於體系比較複雜,不太方便計算機軟體實現,逐漸退出人們關注的視野,TCP/IP得到了廣泛的應用。
對比ISO/OSI的七層結構,讀者會奇怪了:怎麼沒有表示層和會話層了呢?的確,在TCP/IP參考模型中這兩層並不是必需的。其中還有個四層模型的說法數據鏈路層與物理層表示成網路介面層。TCPIP體系結構最核心的部分就是上面三層:應用層、傳輸層、網路層。
(1)網路介面層:TCP/IP並沒有嚴格定義該層,它只是要求能夠提供給其上層-----網路層的一個訪問介面,以便在其上傳遞IP分組。由於這一層次未被定義,所以其具體的實現方法將隨著網路類型的不同而不同。乙太網是IP通信中數據鏈路層最常見的形式,除此之外還有PPP、HDLC等10Gbit/s以下的乙太網一般應用於區域網,而PPP、HDLC則應用於廣域網居多。
(2)網路層:俗稱IP層,它處理機器之間的通信。IP是一個不可靠的、無連接協議,它接收來自傳輸層的請求,傳輸某個具有目的地址信息的分組。IP負責給互聯網的每一台計算機或者終端分配一個地址,並將信息以IP包的形式傳送到正確的目的地。這是TCP/IP的核心。IP協議族中最關鍵的是路由協議。
(3)傳輸層:傳輸層控制協議(TCP)與用戶數據報協議(UDP)是該層的重要協議。TCP是一個面向連接的,可靠地協議。它將一台主機發出的位元組流無差錯地發往互聯網上的其他主機。在發送端,它負責把上層傳送下來的位元組流分成報文段並傳遞給下層。在接收端,它負責把收到的報文進行重組後遞交給上層。TCP還要處理端到端的流量控制(滑動窗口機制)。UDP則是一個不靠譜,無連接的協議,主要適用於不需要對報文進行排序和流量控制的場合。(比如在信息傳輸中像重要文檔與簡訊等等適用於TCP而視頻傳輸可使用UDP)。
各個層次也對應著不同的協議如圖:。
三TCP報文格式
TCP報文包括首部(報頭)和數據部分,其中首部的具體欄位如下。
(1)源埠號和目的埠欄位-----各佔16bit。
(2)序號欄位-----SEQ序號,佔32bit。TCP連接中傳送的的數據流中的每一個位元組都編上序號,序號欄位的值則是本報文段所發送的數據的第一個位元組的序號。
(3)確認序號-----ACK序號,32bit,是期望收到對方的寫下一個報文段的數據的第一個位元組的序號。只有ACK的標誌位為1是,確認序號欄位才有效,ACK=SEQ+1。
(4)標誌位:有6個如下
URG-----緊急信號表明緊急指針(urgent pointer),它能告訴系統此報文段有緊急數據,應儘快傳送。
ACK-----確認信號只有當ACK=1時確認號欄位才有效。當ACK=0時,確認號無效。
PSH-----推送信號接收TCP推送bit置1的報文段,則儘快交付給接收應用進程,無需緩存。
RST-----複位信號當RST=1時,表明TCP連接中有嚴重錯誤,則釋放連接,然後再重新建立連接。
SYN-----同步信號SYN表示一個連接請求或連接接收報文。
FIN-----終止信號用來釋放一個連接。當FIN=1,表明報文段的發送端的數據已發送完畢,要求釋放運輸連接。
(5)數據偏移-----佔4bit,它自出報文段的數據起始處距離TCP報文段起始處的位置。
(6)窗口欄位-----佔16bit,用來控制對方發送的數據量,單位為位元組。TCP連接的一端根據設置的緩存空間大小確定自己的接收窗口大小,然後通知對方確定對方的發送窗口上限。
(7)檢驗和-----佔16bit,檢驗報文段的首部和數據,在檢驗之前要加上12位元組的偽首部。
(8)緊急指針欄位-----16bit。緊急指針指出在本報文段的緊急數據的最後一個位元組的序號。
(9)選項欄位-----無固定長度,TCP只規定了一種選項最大報文段長度MSS。
(10)保留欄位-----佔6位,暫無。
四、TCP的三次握手和四次揮手
TCP的連接和建立都是採用客戶端伺服器方式。主動發起連接建立的進程叫做客戶端(Client)。被動等待連接建立的叫做伺服器(Server)。
建立TCP連接需要三次握手如圖
第一次握手:Client(主機A)想Server(主機B)發送一個連接請求,在這個包中標誌位SYN=1,發送序號SEQ=x,上圖中令x=200,Client進入SYN_SEND狀態,等待Server確認。
第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置為1,確認序號ACK=x+1=201,隨機闡釋一個發送序號y,令y=500。並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。
第三次握手:Client收到去人後,檢查確認序號ACK是否為x+1=201;標誌位ACK是否為1,如果正確,則將標誌位ACK置1,確認序號ACK=y+1=501,並將該數據包發送給Server,Server檢查確認需號ACK是否為y+1=501,標誌位是否為1,如果正確則 連接建立成功,Client和Server進入ESTABLISHED狀態。
形象地來理解,加入客戶端是小明,伺服器是小紅,小明寄了一份郵件給小紅郵件的標號就是SEQ,SYN就是簡訊裡面小明想處對象的意圖。小紅收到後,也寄了信給小明,SEQ同樣是小紅郵件的編號,ACK=SEQ+1就是表面自己已經收到小明前一份信息,ACK標誌位置1表明小紅同意了小明處對象的請求,SYN也表示小紅有相處對象的意圖。於是同理小明就開始寄信說我要開始追你了。然後兩人開始聊起未來······。三次握手走向未來~~~~~~!所以男生還是要主動點。
(形象理解會有小出入)
斷開TCP連接的四次揮手
第一次揮手:當客戶端A要斷開TCP連接時,發送一個包,其中標誌位FIN=1,ACK=1,發送序號SEQ=X,確認序號ACK=Z,Client進入FIN_WAIT狀態。
第二次揮手:客戶B知道A要斷開後,發送一個確認包,其中標誌位ACK=1,發送序號SEQ=Z確認序號ACK=x+1,Server進入CLOSE_WAIT狀態。
第三次揮手:客戶B也斷開TCP連接,此時發送一個包,其中,標誌位FIN=1,發送序號SEQ=Z+1
,Server進入LAST_ACK狀態。
第四次揮手:客戶A收到B的斷開請求後,Client進入TIME_WAIT狀態,接著發送一個確認包,標誌位ACK=1,發送序號SEQ=x+1,確認序號ACK=Z+2,Server進入CLOSE狀態。
同樣舉個栗子,就不拿小紅和小明作比較了畢竟剛剛才進入熱戀狀態,接下來是小濤和小翠。男人有錢就變壞,小濤是個渣男,所以首先簽了離婚協議書還有自己的一些證件(要求一個人小翠去辦理)(ack),然後附帶自己的分手信(seq)寄給小翠。ACK置1,FIN置1。小翠收到信件後,也二話沒說,先回了一份信並且說明已經收到小濤的分手信且同意了(seq+1)然後也把證件先遞過去(ack)。最後等待離婚證下來(ack+1)然後再把離婚證給小濤寄過去(ACK=1,FIN=1)。最後小濤還可恥的嘲笑了小翠一番(seq+1)ACK=1。
五、TCP/IP協議體系的常見術語
(1)包
包(Packet)是網路上傳輸的數據片段,也稱為分組。包是一種統稱,在不同的協議,不同層次,包有不同的名字,如TCP/IP中,數據鏈路層的包叫做幀(Frame),IP層的包稱為IP數據報,TCP層的包常稱為TCP報文等。大多數包都由包頭和信息組成:包頭常常包括源地址和目的地址、包的長度和類型指示符等。
(2)封裝
不同設備的對等層之間依靠封裝和解封裝來實現相互間的通信。封裝就像洗完澡光著身子穿衣服,解封裝就像洗澡前脫衣服,脫了一層又一層直到脫光。TCP/IP也是一種計算機數據打包和定址的標準方法。在數據傳送中,可以形象的理解為有兩個信封,TCP和IP就像信封,要傳遞的信息被劃分成若干段,每一段塞入一個TCP信封,並在上面記錄分段信息,然後再塞入IP大信封裡面。同理接收端一步一步拆開來並校驗,若發現錯誤,TCP機制則會要求重發。因此,TCP/IP在互聯網中幾乎可以無差錯地傳送數據。
(3)數據段,數據包.數據幀
通信過程中,TCP/IP層與層之間有協議數據單元(Protocol Data Unit)來交換彼此的信息,確保網路設備之間能夠通信。傳輸層在上層數據的基礎上加上TCP報頭得到的PDU叫做數據段(Segment),依次往下數據段傳給網路層,並添加IP報頭得到的PDU叫做數據包(Packet),數據包傳給數據鏈路層添加報頭得到的PDU稱作數據幀(Frame)。最後Frame被轉換為bit在物理層通過網路介質傳播。
TCP/IP的基本介紹就到這裡了,若有想要深入學習的同學,請不懼勞累的堅持學習下去。只有堅持下去了才會有收穫。
參考文獻:
《一本書讀懂TCP/IP》
《TCP/IP協議深入分析》
TCP/IP協議族 - cws1214的專欄 - CSDN博客
wireshark抓包圖解 TCP三次握手/四次揮手詳解
TCP協議中的三次握手和四次揮手(圖解) - Simple life - CSDN博客
推薦閱讀: