天天看點

關于TCP協定和TCP-IP協定的了解和相關整理、擴充

之前看《how tomcat works》及《實作領域驅動設計》裡面都涉及到了一些傳輸協定的知識點。前者是以一個簡單的servlet實作開始,後者是穿插介紹了類JMS的P2P模式實作。本身都是基于socket協定接口。在了解了RPC協定,HTTP協定的基礎上,對TCP協定想有一個進一步的了解。

TCP/IP協定不僅僅指的是TCP 和IP兩個協定,而是指一個由FTP、SMTP、TCP、UDP、IP等協定構成的協定
簇, 隻是因為在TCP/IP協定中TCP協定和IP協定最具代表性,是以被稱為TCP/IP協定。
           

TCP簡介

傳輸控制協定(TCP,Transmission Control Protocol)是一種面向連接配接的、可靠的、基于位元組流的傳輸層通信協定,由IETF的RFC 793定義。

網際網路絡與單個網絡有很大的不同,因為網際網路絡的不同部分可能有截然不同的拓撲結構、帶寬、延遲、資料包大小和其他參數。TCP的設計目标是能夠動态地适應網際網路絡的這些特性,而且具備面對各種故障時的健壯性。

tcp應用邏輯

當應用層向TCP層發送用于網間傳輸的、用8位位元組表示的資料流,TCP則把資料流分割成适當長度的封包段,最大傳輸段大小(MSS)通常受該計算機連接配接的網絡的資料鍊路層的最大傳送單元(MTU)限制。之後TCP把資料包傳給IP層,由它來通過網絡将包傳送給接收端實體的TCP層。

TCP為了保證封包傳輸的可靠,就給每個包一個序号,同時序号也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的位元組發回一個相應的确認(ACK);如果發送端實體在合理的往返時延(RTT)内未收到确認,那麼對應的資料(假設丢失了)将會被重傳。

TCP特點\規定

  1. 資料分片:在發送端對使用者資料進行分片,在接收端進行重組,由TCP确定分片的大小并控制分片和重組;
  2. 到達确認:接收端接收到分片資料時,根據分片資料序号向發送端發送一個确認;
  3. 逾時重發:發送方在發送分片時啟動逾時定時器,如果在定時器逾時之後沒有收到相應的确認,重新分片;
  4. 滑動視窗:TCP連接配接每一方的接收緩沖空間大小都固定,接收端隻允許另一端發送接收端緩沖區所能接納的資料,TCP在滑動視窗的基礎上提供流量控制,防止較快主機緻使較慢主機的緩沖區溢出;
  5. 失序處理:作為IP資料報來傳輸的TCP分片到達時可能會失序,TCP将對收到的資料進行重新排序,将收到的資料以正确的順序交給應用層;
  6. 重複處理:作為IP資料報來傳輸的TCP分片會發生重複,TCP的接收端必須丢棄重複的資料;
  7. 資料校驗:TCP将保持它首部和資料校驗和,這是一個端到端的校驗和,目的是檢測資料在傳輸過程中的任何變化。如果收到的分片檢驗和有差錯,TCP将丢棄這個分片,并不确認收到此封包導緻對端逾時并重發

TCP雖然是面向位元組流的,但TCP傳輸的資料單元卻是封包段。一個TCP封包段分為首部和資料兩部分,TCP的全部功能提現在它首部中的各個字段的作用

TCP的首部格式

找來兩張圖(中英文對照)

關于TCP協定和TCP-IP協定的了解和相關整理、擴充
關于TCP協定和TCP-IP協定的了解和相關整理、擴充
  • Source Port是源端口, 16位
  • Destination Port是目的端口, 16位
  • Sequence Number是發送資料包中的第一個位元組的序列号, 32位
  • Acknowledment Number是确認序列号, 32位
  • Data Offset是資料偏移,4位,該字段的值時TCP首部長度除以4
  • 标志位: 6位 (SYN, FIN, ACK, PSH, RST, URG.)
SYN:表示建立連接配接(Synchronize Sequence Numbers)
FIN:表示關閉連接配接(Finish)
ACK:表示确認響應(Acknowledge character)
PSH:表示有DATA資料傳輸
RST:表示連接配接重置(Reset)
URG:表示緊急指針字段值有效(urget pointer is vaild)

           
  • window表示接收緩沖區的空閑空間,16位,用來告訴TCP連接配接對端自己能夠接收的最大資料長度。
  • Checksum是校驗和,16位
  • Urgent Pointers是緊急指針,16位。隻有URG标志位被設定時該字段才有意義,表示緊急資料相對序列号(Sequence Number字段的值)的偏移。

TCP工作方式 - 建立連接配接

關于TCP協定和TCP-IP協定的了解和相關整理、擴充

TCP建立連接配接使用三次握手協定

這裡的SYN、ACK封包都是指TCP首部格式中僅SYN和ACK标記為1的封包

1. 用戶端發送SYN(SEQ=x)封包給伺服器端,進入SYN_SEND狀态。
2. 服務端接收到SYN封包,回應一個SYN(SEQ=y)ACK(ACK= x+1)封包,進入SYN_RECV狀态。
3. 用戶端收到伺服器端的SYN封包,回應一個ACK(ACK = Y+1)封包,進入Established狀态。

當三次握手完成,成功建立了連結,就可以傳輸資料了。
           

TCP工作方式 - 連接配接終止

關于TCP協定和TCP-IP協定的了解和相關整理、擴充

TCP終止連結需要經過四次握手,是由于TCP的半關閉決定的。

這裡的FIN、ACK封包都是指TCP首部格式中僅FIN和ACK标記為1的封包

1. 某個應用程式首先調用close,稱該端執行“主動關閉”。該端的TCP于是發送一個FIN分節,表示資料發送完畢。

2. 接收到這個FIN的對端執行“被動關閉”,這個FIN由TCP确認。

3. 一段時間後,接收到這個檔案結束符的應用程式将調用close關閉它的套接字。這導緻它的TCP也發送一個FIN.

4. 接收這個最終FIN的原發送端TCP确認這個FIN

每個方向都要一個FIN和一個ACK,是以需要四次
           

無論是用戶端還是伺服器端,任何一段都可以執行主動關閉。個别情況是伺服器執行主動關閉。

tcp的限流處理 - 滑動視窗協定

滑動視窗協定(Sliding Window Protocol),屬于TCP協定的一種應用,用于網絡資料傳輸時的流量控制,以避免擁塞的發生。該協定允許發送方在停止并等待确認前發送多個資料分組。由于發送方不必每發一個分組就停下來等待确認,是以該協定可以加速資料的傳輸,提高網絡吞吐量。

TCP/IP說明

在重複一遍,TCP/IP協定不僅僅指的是TCP 和IP兩個協定,而是指一個由FTP、SMTP、TCP、UDP、IP等協定構成的協定簇, 隻是因為在TCP/IP協定中TCP協定和IP協定最具代表性,是以被稱為TCP/IP協定。

TCP/IP協定在一定程度上參考了OSI的體系結構。OSI模型共有七層,從下到上分别是實體層、資料鍊路層、網絡層、運輸層、會話層、表示層和應用層。但是這顯然是有些複雜的,是以在TCP/IP協定中,它們被簡化為了四個層次。

(1)應用層、表示層、會話層三個層次提供的服務相差不是很大,是以在TCP/IP協定中,它們被合并為應用層一個層次。

(2)由于運輸層和網絡層在網絡協定中的地位十分重要,是以在TCP/IP協定中它們被作為獨立的兩個層次。

(3)因為資料鍊路層和實體層的内容相差不多,是以在TCP/IP協定中它們被歸并在網絡接口層一個層次裡。隻有四層體系結構的TCP/IP協定,與有七層體系結構的OSI相比要簡單了不少,也正是這樣,TCP/IP協定在實際的應用中效率更高,成本更低。

  1. 應用層:應用層是TCP/IP協定的第一層,是直接為應用程序提供服務的。

    (1)對不同種類的應用程式它們會根據自己的需要來使用應用層的不同協定,郵件傳輸應用使用了SMTP協定、網際網路應用使用了HTTP協定、遠端登入服務應用使用了有TELNET協定。

    (2)應用層還能加密、解密、格式化資料。

    (3)應用層可以建立或解除與其他節點的聯系,這樣可以充分節省網絡資源。

  1. 運輸層:作為TCP/IP協定的第二層,運輸層在整個TCP/IP協定中起到了中流砥柱的作用。且在運輸層中,TCP和UDP也同樣起到了中流砥柱的作用。
  1. 網絡層:網絡層在TCP/IP協定中的位于第三層。在TCP/IP協定中網絡層可以進行網絡連接配接的建立和終止以及IP位址的尋找等功能。
  1. 網絡接口層:在TCP/IP協定中,網絡接口層位于第四層。由于網絡接口層兼并了實體層和資料鍊路層是以,網絡接口層既是傳輸資料的實體媒介,也可以為網絡層提供一條準确無誤的線路。
關于TCP協定和TCP-IP協定的了解和相關整理、擴充

TCP/IP 的通信過程(涵蓋的各個協定的作用及流程、摘自百度)

源主機到目标主機的資料傳遞,層級是自上而下的。

應用層 -> 傳輸層 -> 網絡層 -> 網絡接口層(鍊路)

在網絡通信的過程中,将發出資料的主機稱為源主機,接收資料的主機稱為目的主機。當源主機發出資料時,資料在源主機中從上層向下層傳送。源主機中的應用程序先将資料交給應用層,應用層加上必要的控制資訊就成了封包流,向下傳給傳輸層。傳輸層将收到的資料單元加上本層的控制資訊,形成封包段、資料報,再交給網絡層。網絡層加上本層的控制資訊,形成IP資料報,傳給網絡接口層。網絡接口層将網際層交下來的IP資料報組裝成幀,并以比特流的形式傳給網絡硬體(即實體層),資料就離開源主機。

=鍊路層=

以太網協定規定,接入網絡的裝置都必須安裝網絡擴充卡,即網卡,資料包必須是從一塊網卡傳送到另一塊網卡。而網卡位址就是資料包的發送位址和接收位址,有了MAC位址以後,以太網采用廣播形式,把資料包發給該子網内所有主機,子網内每台主機在接收到這個包以後,都會讀取首部裡的目标MAC位址,然後和自己的MAC位址進行對比,如果相同就做下一步處理,如果不同,就丢棄這個包。

是以鍊路層的主要工作就是對電信号進行分組并形成具有特定意義的資料幀,然後以廣播的形式通過實體媒體發送給接收方。

=網絡層=

IP協定

網絡層引入了IP協定,制定了一套新位址,使得我們能夠區分兩台主機是否同屬一個網絡,這套位址就是網絡位址,也就是所謂的IP位址。IP協定将這個32位的位址分為兩部分,前面部分代表網絡位址,後面部分表示該主機在區域網路中的位址。如果兩個IP位址在同一個子網内,則網絡位址一定相同。為了判斷IP位址中的網絡位址,IP協定還引入了子網路遮罩,IP位址和子網路遮罩通過按位與運算後就可以得到網絡位址。

ARP協定

即位址解析協定,是根據IP位址擷取MAC位址的一個網絡層協定。其工作原理如下:ARP首先會發起一個請求資料包,資料包的首部包含了目标主機的IP位址,然後這個資料包會在鍊路層進行再次包裝,生成以太網資料包,最終由以太網廣播給子網内的所有主機,每一台主機都會接收到這個資料包,并取出标頭裡的IP位址,然後和自己的IP位址進行比較,如果相同就傳回自己的MAC位址,如果不同就丢棄該資料包。ARP接收傳回消息,以此确定目标機的MAC位址;與此同時,ARP還會将傳回的MAC位址與對應的IP位址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。

路由協定

首先通過IP協定來判斷兩台主機是否在同一個子網中,如果在同一個子網,就通過ARP協定查詢對應的MAC位址,然後以廣播的形式向該子網内的主機發送資料包;如果不在同一個子網,以太網會将該資料包轉發給本子網的網關進行路由。網關是網際網路上子網與子網之間的橋梁,是以網關會進行多次轉發,最終将該資料包轉發到目标IP所在的子網中,然後再通過ARP擷取目标機MAC,最終也是通過廣播形式将資料包發送給接收方。而完成這個路由協定的實體裝置就是路由器,路由器扮演着交通樞紐的角色,它會根據信道情況,選擇并設定路由,以最佳路徑來轉發資料包。

是以,網絡層的主要工作是定義網絡位址、區分網段、子網内MAC尋址、對于不同子網的資料包進行路由。

=傳輸層=

鍊路層定義了主機的身份,即MAC位址,而網絡層定義了IP位址,明确了主機所在的網段,有了這兩個位址,資料包就從可以從一個主機發送到另一台主機。但實際上資料包是從一個主機的某個應用程式發出,然後由對方主機的應用程式接收。而每台電腦都有可能同時運作着很多個應用程式,是以當資料包被發送到主機上以後,是無法确定哪個應用程式要接收這個包。是以傳輸層引入了UDP協定來解決這個問題,為了給每個應用程式辨別身份。

UDP協定

UDP協定定義了端口,同一個主機上的每個應用程式都需要指定唯一的端口号,并且規定網絡中傳輸的資料包必須加上端口資訊,當資料包到達主機以後,就可以根據端口号找到對應的應用程式了。UDP協定比較簡單,實作容易,但它沒有确認機制,資料包一旦發出,無法知道對方是否收到,是以可靠性較差,為了解決這個問題,提高網絡可靠性,TCP協定就誕生了。

TCP協定

TCP即傳輸控制協定,是一種面向連接配接的、可靠的、基于位元組流的通信協定。簡單來說TCP就是有确認機制的UDP協定,每發出一個資料包都要求确認,如果有一個資料包丢失,就收不到确認,發送方就必須重發這個資料包。為了保證傳輸的可靠性,TCP協定在UDP基礎之上建立了三次對話的确認機制,即在正式收發資料前,必須和對方建立可靠的連接配接。TCP資料包和UDP一樣,都是由首部和資料兩部分組成,唯一不同的是,TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確定單個TCP資料包不必再分割。

傳輸層的主要工作是定義端口,辨別應用程式身份,實作端口到端口的通信,TCP協定可以保證資料傳輸的可靠性。

=應用層=

理論上講,有了以上三層協定的支援,資料已經可以從一個主機上的應用程式傳輸到另一台主機的應用程式了,但此時傳過來的資料是位元組流,不能很好的被程式識别,操作性差,是以,應用層定義了各種各樣的協定來規範資料格式,常見的有http,ftp,smtp等,在請求Header中,分别定義了請求資料格式Accept和響應資料格式Content-Type,有了這個規範以後,當對方接收到請求以後就知道該用什麼格式來解析,然後對請求進行處理,最後按照請求方要求的格式将資料傳回,請求端接收到響應後,就按照規定的格式進行解讀。

是以應用層的主要工作就是定義資料格式并按照對應的格式解讀資料。

祭出完整的OSI模型

高清大圖

關于TCP協定和TCP-IP協定的了解和相關整理、擴充

之前整理的網絡協定簡介和相關socket、tcp-ip、udp、rpc、http的關系說明

最後,感覺通過整理,還是學習到了不少東西了,對于之前腦子裡的模糊概念似乎變得清晰一點了。由一個知識點引出的内容還是非常龐大的,費腦啊…