對TCP/IP模型的理解
一.OSI七層網路協議模型
OSI七層協議:將網路連接過程分成多個層次,每個層次都有自己的作用,且每個層次的程序代碼可以獨立撰寫,每個層次間的功能不會相互干擾
每一層的作用:
- 應用層:應用程序並不屬於應用程序本身,用來同一管理調度數據對應其發送和接收的應用程序, 定義應用程序如何進入該層的溝通介面,以將數據接收或發送給應用程序,最終展示給用戶
- 表示層:網路服務(或程序)之間的數據格式轉換:將來自本地端應用程序的數據格式轉換或重新編碼成網路的標準格式、 加密解密技術
- 會話層:提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機制
- 傳輸層:發送端和接收端連接技術,如TCP、UDP… 包括數據包格式、數據包發送、流程的控制、傳輸過程的幀檢測與重新傳送
- 網路層:定義IP(Internet Protocol)和路由概念,計算機間的連接建立、終止和維持,數據包的傳輸路徑選擇
- 數據鏈路層:數據鏈路層又可分為兩層,偏向硬體介質:MAC數據幀,media Access Control frame,網路介面所能處理的主要數據包裹,被物理層編碼成比特流偏向軟體層面:邏輯鏈路層(Logical Link Control)多任務處理來自上層的數據包數據並轉換成MAC格式信息交換、流量可控制、數據問題處理
- 物理層: 定義傳輸設備的電壓與信號等,連接數據幀轉換成比特流的編碼方式,最後連接實際傳輸介質發送/接收比特信號
二.TCP/IP協議
TCP/IP協議是在OSI七層協議上進行簡化為四層結構,TCP/IP協議將應用層、表示層、會話層整合為應用層
(一)鏈路層:有時也稱作數據鏈路層或網路介面層,通常包括操作系統中的設備驅動程序和計算機中對應的網路介面卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理介面細節
(二)網路層:有時也稱作互聯網層,處理分組在網路中的活動,例如分組的選路。在TCP/IP協議族中,網路層協議包括IP網際協議,ICMP互聯網控制報文協議,以及IGMP組管理協議
(三)傳輸層:面向連接的、可靠的的進程到進程通信的協議。TCP提供全雙工服務,即數據可在同一時間雙向傳播。TCP將若干個位元組構成一個分組,此分組稱為報文段。提供了一種端到端的連接。傳輸層的協議主要有TCP 和 UDP,TCP(Transimision Control Protocal)是一種可靠的、面向連接的協議,傳輸效率低。UDP(User Datagram Protocal)是一種不可靠的、無連接的服務,傳輸效率高
下面介紹一下TCP的三次握手和四次揮手
1、TCP的功能
TCP主要是將數據進行分段打包傳輸,對每個數據包編號控制順序,運輸中丟失、重發和丟棄處理。
2、TCP頭的介紹
Source Port & Destination Port - 源埠號和目標埠號;計算機通過埠號識別訪問哪個服務,比如http服務或ftp服務;發送方埠號是進行隨機埠;目標埠號決定了接收方哪個程序來接收。
Sequence number - 32位序列號,TCP用序列號對數據包進行標記,以便在到達目的地後重新重裝。在建立連接時通常由計算機生成一個隨機數作為序列號的初始值。
Acknowledgment number - 32位確認號,確認應答號。發送端接收到這個確認應答後,可以認為這個位置以前所有的數據都已被正常接收。
Header Length - 首部長度。單位是 4個位元組,如果沒有可選欄位,那麼這裡的值就是 5。表示 TCP 首部的長度為 20 位元組。
checksum - 16位校驗和。用來做差錯控制,TCP校驗和的計算包括TCP首部、數據和其它填充位元組。
flags - 控制位。TCP的連接、傳輸和斷開都受這六個控制位的指揮
window size - 本地可接收數據的數目,這個值的大小是可變的。當網路通暢時將這個窗口值變大加快傳輸速度,當網路不穩定時減少這個值可以保證網路數據的可靠傳輸。它是來在TCP傳輸中進行流量控制的
3、三次握手和四次揮手
- 第一次握手: 建立連接。客戶端發送連接請求報文段,將SYN位置為1,Seq(Sequence Number)為X(由操作系統動態隨機選取一個32位長的序列號)。然後,客戶端進入SYN_SEND狀態,等待伺服器的確認。
- 第二次握手: 伺服器收到客戶端的SYN報文段。需要對這個SYN報文段進行確認,設置Ack(Acknowledgment Number)設置為X(第一次握手中的Seq的值)+1。同時,自己還要發送SYN請求信息,將SYN位置為1,Seq(Sequence Number)為Y(由操作系統動態隨機選取一個32位長的序列號)。伺服器端將上述所有信息一併發送給客戶端,此時伺服器進入SYN_RECV狀態。
- 第三次握手: 客戶端收到伺服器的報文段。然後將Ack(Acknowledgment Number)設置為Y(第二次握手中的Seq的值)+1,Seq(Sequence Number)設置為X+1
第二次握手中的Ack(Acknowledgment Number)值
,向伺服器發送ACK報文段,這個報文段發送完畢以後,客戶端和伺服器端都進入ESTABLISHED狀態,完成TCP三次握手。
- 第一次揮手: 主動關閉方(可以使客戶端,也可以是伺服器端,這裡標記為:A),將FIN置為1,ACK置為1,Seq(Sequence Number)設置為X
為上一次對方傳送過來的Ack(Acknowledgment Number)值
,Ack(Acknowledgment Number)設置為Y為上一次對方傳過來的Seq(Sequence Number)值+1
。設置好以上值後,將數據發送至被動關閉方(這裡標記為:B)。然後A進入FIN_WAIT_1狀態。 - 第二次揮手:B收到了A發送的FIN報文段,向A回復,將ACK置為1,Ack(Acknowledgment Number)設置為X
第一次揮手中的Seq(Sequence Number)值
+1,Seq(Sequence Number)設置為Y第一次揮手中的Ack(Acknowledgment Number)值
。然後B進入CLOSE_WAIT狀態,A收到B的回復後,進入FIN_WAIT_2狀態。 - 第三次揮手:B再次向A發送報文,將FIN置為1,ACK置為1,Ack(Acknowledgment Number)設置為X+1
第二次揮手中的Ack(Acknowledgment Number)值
,Seq(Sequence Number)設置為Y第二次揮手中的Seq(Sequence Number)值
。然後B進入LAST_ACK狀態,A收到B的報文後,進入TIME_WAIT狀態。 - 第四次揮手:A收到B發送的FIN報文段,像B回復,將ACK置為1,Ack(Acknowledgment Number)設置為Y
第三次揮手中的Seq(Sequence Number)值
+1,Seq(Sequence Number)設置為X+1第三次揮手中的Ack(Acknowledgment Number)值
。然後A進入TIME_WAIT狀態,B在收到報文後進入CLOSED狀態,A在發送完報文等待了2MSL時間後進入CLOSED狀態。
(四)應用層:負責處理特定的應用程序細節。幾乎各種不同的TCP/IP實現都會提供這些通用的應用程序:Telnet遠程登錄、FTP文件傳輸協議、SMTP簡單郵件傳送協議、SNMP簡單網路管理協議
參考文獻
TCP三次握手簡介TCP四次揮手簡介推薦閱讀:
※二層交換的傳輸鏈路,天津-貴陽長途傳輸,100M帶寬,TCP跑到三四十M就不行了,UDP測試沒問題。?
※IP層接收到比MTU大的數據包會先分片再重組,隨後在傳遞給上層協議(比如UDP)處理嗎?
※rip,ospf屬於應用層協議,但是路由器只是工作在下三層啊,網路層,數據鏈路層,以及物理層,這怎麼解釋啊?
※花生殼DDNS是什麼?
※進行 Linux 網路編程的人需不需要看 TCP/IP 詳解這種書?