TCP协议以及三次握手
TCP協議,傳輸控制協議(英語:TransmissionControl Protocol,縮寫為 TCP)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IETF的RFC793定義。
tcp通信需要經過創建連接、數據傳送、終止連接三個步驟。
?
?可靠傳輸:
1)TCP采用發送應答機制
TCP發送的每個報文段都必須得到接收方的應答才認為這個TCP報文段傳輸成功
2)超時重傳
發送端發出一個報文段之后就啟動定時器,如果在定時時間內沒有收到應答就重新發送這個報文段。
TCP為了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的包發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數據包就被假設為已丟失將會被進行重傳。
3)錯誤校驗
TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。
4)?流量控制和阻塞管理
流量控制用來避免主機發送得過快而使接收方來不及完全收下。
?
TCP與UDP的不同點
- 面向連接(確認有創建三方交握,連接已創建才作傳輸。)
- 有序數據傳輸
- 重發丟失的數據包
- 舍棄重復的數據包
- 無差錯的數據傳輸
- 阻塞/流量控制
?
?
我們把tcp通信的報文稱為段。
?
客戶端發出段1,SYN位表示連接請求。序號是1000(實際是一個隨機數,此處以1000為例),這個序號在網絡通訊中用作臨時的地址,每發一個數據字節,這個序號要加1,這樣在接收端可以根據序號排出數據包的正確順序,也可以發現丟包的情況。mss表示最大段尺寸,如果一個段太大,封裝成幀后超過了鏈路層的最大幀長度,就必須在IP層分片,為了避免這種情況,客戶端聲明自己的最大段尺寸,建議服務器端發來的段不要超過這個長度。
?
服務器發出段2,也帶有SYN位,同時置ACK位表示確認,確認序號是1001,表示“我接收到序號1000及其以前所有的段,請你下次發送序號為1001的段”,也就是應答了客戶端的連接請求,同時也給客戶端發出一個連接請求SYN,序號是8000(實際也是一個隨機數,此處以8000為例),同時聲明最大尺寸為1024。
?
客戶端發出段3,對服務器的連接請求進行應答,確認序號是8001。
在這個過程中,客戶端和服務器分別給對方發了連接請求,也應答了對方的連接請求,其中服務器的請求和應答在一個段中發出,因此一共有三個段用于建立連接,稱為“三次握手(three-way-handshake)”。在建立連接的同時,雙方協商了一些信息,例如雙方發送序號的初始值、最大段尺寸等。
?
在TCP通訊中,如果一方收到另一方發來的段,讀出其中的目的端口號,發現本機并沒有任何進程使用這個端口,就會應答一個包含RST位的段給另一方。例如,服務器并沒有任何進程使用8080端口,我們卻用telnet客戶端去連接它,服務器收到客戶端發來的SYN段就會應答一個RST段,客戶端的telnet程序收到RST段后報告錯誤Connectionrefused。
?
?
總結
以上是生活随笔為你收集整理的TCP协议以及三次握手的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用bootstrap框架做了一个采摘节
- 下一篇: 小案例:编写立方体六个面,合成一张全景图