一、簡述TCP\UDP的區別
UDP(User Datagram Protocol),用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯)參考模型中一種無連接的傳輸層協議,提供面向事物的簡單不可靠信息傳送服務。UDP不提供數據包的分組、組裝和不能對數據包進行排序的缺點,換言之,當報文發送之後,是無法得知其是否安全完整到達的。特點如下:
- 由於傳輸數據不建立連接,因此不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶機傳輸相同的消息。
- UDP信息包的標題很短,只有8個字節,開銷較小。
- 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸寬帶、源端和終端主機性能的限制。
- UDP是面向報文的,發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付給IP層。既不拆分也不合並,而是保留這些報文的邊界,因此應用程序需要選擇合適的報文大小。
TCP(Transmission Control Protocol),傳輸控制協議是爲了在不可靠的互聯網絡上提供可靠的端到端字節流而設計的傳輸協議。具有如下規定:
- 數據分片:在發送端對用戶數據進行分片,在接收端進行重組,由TCP確定分片的大小並控制分片和重組
- 到達確認:接收端接收到分片數據時,根據分片數據序號向發送端發送一個確認
- 超時重發:發送方在發送分片時啓動超時定時器,如果在定時器超時之後沒有收到相應的確認,重新分片
- 滑動窗口:TCP連接每一方的接收緩衝空間大小都是固定的,接收端只允許另一端發送接收端緩衝區所能接納的數據,TCP在滑動窗口的基礎上提供流量控制,防止較快主機致使較慢主機的緩衝區溢出
- 失序處理:作爲IP數據報來傳輸的TCP分片到達時可能會失序,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層
- 重複處理:作爲IP數據報來傳輸的TCP分片可能會發生重複,TCP的接收端必須丟棄重複的數據
- 數據校驗:TCP將保持它的首部和數據的檢驗和,端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收的到的分片的檢驗和有差錯,TCP將丟棄這個分片,並不確認收到次報文段導致對端超時並重發。
具有一下特點:
- 基於流的方式
- 面向連接
- 可靠的通信方式
- 在網絡狀況不佳的時候儘量降低系統由於重傳帶來的寬帶開銷
- 通信連接維護是面向通信的兩個端點,而不考慮中間網段和節點
主要的區別大致如下:
- TCP是面向連接,UDP是面向非連接即發送數據前不需要建立連接
- TCP提供可靠的服務(數據傳輸),UDP是不可靠的傳輸
- TCP面向字節流,UDP面向數據報文
- TCP數據傳輸慢,UDP數據傳輸快
- TCP發送失敗會重發,UDP不會重發
二、簡單說一下了解的端口以及對應的服務?
三、描述TCP的三次握手和四次揮
三次握手建立連接:
- 客戶端發送SYN(SEQ = x)報文給服務器端,進入SYN_SEND狀態
- 服務端收到SYN報文,迴應一個SYN(SEQ = y)ACK(ACK = x+1)報文,進入SYN_RECV狀態
- 客戶端收到服務端的SYN報文,迴應一個ACK(ACK = y+1)報文,進入Established狀態。
爲什麼要有三次握手?
第一次握手:Client什麼都無法確認,Server確認了對方發送正常
第二次握手:Client確認:自己發送、接收正常,對方發送、接收正常;Server確認:自己接收正常,對方發送正常
第三次握手:Client確認:自己發送、接收正常,對方發送接收正常;Server確認:自己發送、接收正常,對方發送接收正常。
四次揮手:終止一個連接,這是由TCP的半關閉(half-close)造成的。
- 客戶端發送一個FIN,用來關閉客戶端到服務其的數據傳送。(主動關閉)
- 服務器收到這個FIN,發回一個ACK,確認序號爲收到的序號加1,和SYN一樣,一個FIN將佔用一個序號
- 服務器關閉與客戶端的連接沒法送一個FIN給客戶端
- 客戶端發回ACK報文確認,並將確認序號設置爲收到序號加1
爲什麼有四次揮手?