TCP/IP五層網絡結構模型
物理層:物理層創建在物理通訊介質的基礎上,做爲系統和通訊介質的接口,用來實現數據鏈路實體間透明的比特 (bit) 流傳輸。只有該層爲真實物理通訊,其它各層爲虛擬通訊api
數據鏈路層:在物理層提供比特流服務的基礎上,創建相鄰結點之間的數據鏈路,經過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,並進行各電路上的動做系列。數據的單位稱爲幀(frame)服務器
網絡層:選擇合適的路由,使數據分組(packet)能夠交付到目的主機網絡
傳輸層:負責主機中進程間的通訊併發
應用層:直接爲用戶的應用程序提供服務less
UDP詳解
如下內容來自wiki - 最英俊的百科全書tcp
用戶數據報協議(英語:User Datagram Protocol,縮寫爲UDP),又稱使用者資料包協定,是一個簡單的面向數據報的傳輸層協議,正式規範爲RFC 768。
在TCP/IP模型中,UDP爲網絡層以上和應用層如下提供了一個簡單的接口。UDP只提供數據的不可靠傳遞
,它一旦把應用程序發給網絡層的數據發送出去,就不保留數據備份(因此UDP有時候也被認爲是不可靠的數據報協議)。UDP在IP數據報的頭部僅僅加入了複用和數據校驗(字段)。函數
UDP的優勢
- 無需創建鏈接(減小延遲)
- 實現簡單:無需維護鏈接狀態
- 頭部開銷小(最小值爲8byte)
- 沒有擁塞控制:應用能夠更好的控制發送時間和發送速率
UDP頭部:
UDP的頭部是由源端口號、目標端口號、包長和校驗4個部分組成,其中兩個是可選的。各16bit的來源端口和目的端口用來標記發送和接受的應用進程。由於UDP不須要應答
,因此來源端口是可選的,若是來源端口不用,那麼置爲零。在目的端口後面是長度固定的以字節爲單位的長度域,用來指定UDP數據報包括數據部分的長度,長度最小值爲8byte
。首部剩下地16bit是用來對首部和數據部分一塊兒作校驗和(Checksum)的,checksum主要是用來檢測UDP段在傳輸中是否發生了錯誤。還有就是,校驗和計算中也須要計算UDP僞頭部,僞頭部包含IP頭部的一些字段。咱們剛纔介紹了識別一個通訊須要5項信息,而UDP頭部只有端口號,餘下的三項在IP頭部,因此引入了僞頭部的概念。(IPv6的IP頭部沒有校驗和字段)ui
基於UDP協議的有:
- 域名系統(DNS)
- 簡單網絡管理協議(SNMP)
- 動態主機配置協議(DHCP)
- 路由信息協議(RIP)
- 自舉協議(BOOTP)
- 簡單文件傳輸協議(TFTP)
TCP詳解
如下內容來自wiki - 最英俊的百科全書
傳輸控制協議(英語:Transmission Control Protocol)是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由IETF的RFC 793定義。
在因特網協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不一樣主機的應用層之間常常須要可靠的、像管道同樣的鏈接,可是IP層不提供這樣的流機制,而是提供不可靠的包交換。
應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,而後TCP把數據流分區成適當長度的報文段(一般受該計算機鏈接的網絡的數據鏈路層的最大傳輸單元(MTU)的限制)。以後TCP把結果包傳給IP層,由它來經過網絡將包傳送給接收端實體的TCP層。TCP爲了保證不發生丟包,就給每一個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。而後接收端實體對已成功收到的包發回一個相應的確認(ACK);若是發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設爲已丟失將會被進行重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和編碼
三次握手
TCP用三路握手(three-way handshake)過程建立一個鏈接。在鏈接建立過程當中,不少參數要被初始化,例如序號被初始化以保證按序傳輸和鏈接的強壯性。3d
- 客戶端經過向服務器端發送一個SYN來建立一個主動打開,做爲三路握手的一部分。客戶端把這段鏈接的序號設定爲隨機數A。
- 服務器端應當爲一個合法的SYN回送一個SYN/ACK。ACK的確認碼應爲A+1,SYN/ACK包自己又有一個隨機序號B。
- 最後,客戶端再發送一個ACK。當服務端受到這個ACK的時候,就完成了三路握手,並進入了鏈接建立狀態。此時包序號被設定爲收到的確認號A+1,而響應則爲B+1。
TCP狀態編碼
下表爲TCP狀態碼列表,以S指代服務器,C指代客戶端,S&C表示二者,S/C表示二者之一:[1]
- LISTEN S
等待從任意遠程TCP端口的鏈接請求。偵聽狀態。
- SYN-SENT C
在發送鏈接請求後等待匹配的鏈接請求。經過connect()函數向服務器發出一個同步(SYNC)信號後進入此狀態。
- SYN-RECEIVED S
已經收到併發送同步(SYNC)信號以後等待確認(ACK)請求。
- ESTABLISHED S&C
鏈接已經打開,收到的數據能夠發送給用戶。數據傳輸步驟的正常狀況。此時鏈接兩端是平等的。
- FIN-WAIT-1 S&C
主動關閉端調用close()函數發出FIN請求包,表示本方的數據發送所有結束,等待TCP鏈接另外一端的確認包或FIN請求包。
- FIN-WAIT-2 S&C
主動關閉端在FIN-WAIT-1狀態下收到確認包,進入等待遠程TCP的鏈接終止請求的半關閉狀態。這時能夠接收數據,但再也不發送數據。
- CLOSE-WAIT S&C
被動關閉端接到FIN後,就發出ACK以迴應FIN請求,並進入等待本地用戶的鏈接終止請求的半關閉狀態。這時能夠發送數據,但再也不接收數據。
- CLOSING S&C
在發出FIN後,又收到對方發來的FIN後,進入等待對方對鏈接終止(FIN)的確認(ACK)的狀態。少見。
- LAST-ACK S&C
被動關閉端所有數據發送完成以後,向主動關閉端發送FIN,進入等待確認包的狀態。
- TIME-WAIT S/C
主動關閉端接收到FIN後,就發送ACK包,等待足夠時間以確保被動關閉端收到了終止請求的確認包。【按照RFC 793,一個鏈接能夠在TIME-WAIT保證最大四分鐘,即最大分段壽命(maximum segment lifetime)的2倍】
- CLOSED S&C
徹底沒有鏈接。
基於TCP實現的協議有
- HTTP/HTTPS,
- Telnet
- FTP
- SMTP
TCP(Transmission Control Protocol)和UDP(User DataGram Protocol)的區別
下面咱們主要從鏈接性(Connectivity)、可靠性(Reliability)、有序性(Ordering)、有界性(Boundary)、擁塞控制(Congestion or Flow control)、傳輸速度(Speed)、量級(Heavy/Light weight)、頭部大小(Header size)等8個方面來對比它們:
- TCP是面向鏈接(Connection oriented)的協議,UDP是無鏈接(Connection less)協議;
TCP用三次握手創建鏈接:1) Client向server發送SYN;2) Server接收到SYN,回覆Client一個SYN-ACK;3) Client接收到SYN_ACK,回覆Server一個ACK。到此,鏈接建成。UDP發送數據前不須要創建鏈接。
- TCP可靠,UDP不可靠;TCP丟包會自動重傳,UDP不會。
- TCP有序,UDP無序;消息在傳輸過程當中可能會亂序,後發送的消息可能會先到達,TCP會對其進行重排序,UDP不會。
- TCP無界,UDP有界;TCP經過字節流傳輸,UDP中每個包都是單獨的。
- TCP有流量控制(擁塞控制),UDP沒有;主要靠三次握手實現。
- TCP傳輸慢,UDP傳輸快;由於TCP須要創建鏈接、保證可靠性和有序性,因此比較耗時。這就是爲何視頻流、廣播電視、在線多媒體遊戲等選擇使用UDP。
- TCP是重量級的,UDP是輕量級的;TCP要創建鏈接、保證可靠性和有序性,就會傳輸更多的信息,如TCP的包頭比較大。
- TCP的頭部比UDP大;TCP頭部須要20字節,UDP頭部只要8個字節