TCP協(xié)議
Transmission Control
Protocol,傳輸控制協(xié)議
面向連接的協(xié)議
需要三次握手建立連接
需要四次揮手斷開連接
TCP報頭最小長度:20字節(jié)
三次握手的過程:
客戶端發(fā)送:SYN = 1,SEQ = X, 端口號
服務器回復:SYN = 1, ACK = X +1, SEQ = Y
客戶端發(fā)送:ACK = Y + 1, SEQ = X+ 1
確認應答信號ACK =收到的SEQ1坛怪。連接建立中,同步信號SYN始終為1。連接建立后,同步信號SYN=0糕伐。
四次揮手過程
A向B提出停止連接請求择份,F(xiàn)IN = 1
B收到,ACK = 1
B向A提出停止連接請求俐载,F(xiàn)IN = 1
A收到蟹略,ACK = 1
優(yōu)點:
可靠,穩(wěn)定1遏佣、傳遞數據前挖炬,會有三次握手建立連接2、傳遞數據時状婶,有確認意敛、窗口、重傳膛虫、擁塞控制3草姻、傳遞數據后,會斷開連接節(jié)省系統(tǒng)資源
缺點:
傳輸慢稍刀,效率低撩独,占用系統(tǒng)資源高1、傳遞數據前账月,建立連接需要耗時2综膀、傳遞數據時,確認局齿、重傳剧劝、擁塞等會消耗大量時間以及CPU和內存等硬件資源
易被攻擊1、因為有確認機制抓歼,三次握手等機制讥此,容易被人利用拢锹,實現(xiàn)DOS、DDOS攻擊
如何保證接收的順序性:
TCP協(xié)議使用SEQ和ACK機制保證了順序性TCP的每個報文都是有序號的萄喳。確認應答信號ACK=收到的SEQ+1
UDP協(xié)議
User Data Protocol卒稳,用戶數據包協(xié)議
面向無連接的協(xié)議
UDP報頭只有8字節(jié)
簡介:
傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據取胎,并盡可能快的把它扔到網絡上
在發(fā)送端展哭,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制
在接收端闻蛀,UDP把每個消息段放在隊列中匪傍,應用程序每次從隊列中讀一個消息段
由于傳輸數據不建立連接,因此也就不需要維護連接狀態(tài)觉痛,包括收發(fā)狀態(tài)等役衡,因此一臺服務機可同時向多個客戶機傳輸相同的消息
UDP信息包的標題很短,只有8個字節(jié)薪棒,相對于TCP的20個字節(jié)信息包的額外開銷很小
吞吐量不受擁擠控制算法的調節(jié)手蝎,只受應用軟件生成數據的速率、傳輸帶寬俐芯、源端和終端主機性能的限制
UDP使用盡最大努力交付棵介,即不保證可靠交付,因此主機不需要維持復雜的鏈接狀態(tài)表吧史。
UDP是面向報文的邮辽。發(fā)送方的UDP對應用程序交下來的報文,在添加首部后就向下交付給IP層贸营。既不拆分吨述,也不合并,而是保留這些報文的邊界钞脂,因此揣云,應用程序需要選擇合適的報文大小。
使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常冰啃,其實“ping”命令的原理就是向對方主機發(fā)送UDP數據包邓夕,然后對方主機確認收到數據包,如果數據包是否到達的消息及時反饋回來阎毅,那么網絡就是通的焚刚。
優(yōu)點:
傳輸速率快1、傳輸數據前净薛,不需要像TCP一樣建立連接2汪榔、傳輸數據時蒲拉,沒有確認肃拜、窗口痴腌、重傳、擁塞控制等機制
較安全1燃领、由于沒有了TCP的一些機制士聪,被攻擊者利用的漏洞就少了
缺點:
不可靠,不穩(wěn)定1猛蔽、由于沒有了TCP的機制剥悟,在數據傳輸時如果網絡不好,很可能丟包
用UDP協(xié)議通訊時怎樣得知目標機是否獲得了數據包
仿造TCP的做法曼库,每發(fā)一個UDP包区岗,都在里面加一個SEQ序號,接收方收到包后毁枯,將SEQ序號回復給發(fā)送方慈缔。如果發(fā)送方在指定時間以內沒有收到回應,說明丟包了种玛。
TCP與UDP的區(qū)別
TCP面向有鏈接的通信服務
UDP面向無連接的通信服務
TCP提供可靠的通信傳輸
UDP不可靠,會丟包
TCP保證數據順序
UDP不保證
TCP數據無邊界
UDP有邊界
TCP速度快
UDP速度慢
TCP面向字節(jié)流
UDP面向報文
TCP一對一
UDP可以一對一藐鹤,一對多
TCP報頭至少20字節(jié)
UDP報頭8字節(jié)
TCP有流量控制,擁塞控制
UDP沒有
為什么UDP比TCP快
TCP需要三次握手
TCP有擁塞控制赂韵,控制流量等機制
為什么TCP比UDP可靠
TCP是面向有連接的娱节,建立連接之后才發(fā)送數據;而UDP則不管對方存不存在都會發(fā)送數據祭示。
TCP有確認機制肄满,接收端每收到一個正確包都會回應給發(fā)送端。超時或者數據包不完整的話發(fā)送端會重傳绍移。UDP沒有悄窃。因此可能丟包。
什么時候使用TCP
當對網絡通訊質量有要求的時候蹂窖,比如:整個數據要準確無誤的傳遞給對方轧抗,這往往用于一些要求可靠的應用,比如HTTP瞬测、HTTPS横媚、FTP等傳輸文件的協(xié)議,POP月趟、SMTP等郵件傳輸的協(xié)議灯蝴。在日常生活中,常見使用TCP協(xié)議的應用如下:瀏覽器孝宗,用的HTTP FlashFXP穷躁,用的FTP
Outlook,用的POP因妇、SMTP Putty问潭,用的Telnet猿诸、SSH
QQ文件傳輸
什么時候應該使用UDP:
當對網絡通訊質量要求不高的時候,要求網絡通訊速度能盡量的快狡忙,這時就可以使用UDP梳虽。比如,日常生活中灾茁,常見使用UDP協(xié)議的應用如下:QQ語音QQ視頻TFTP
TCP無邊界窜觉,UDP有邊界
TCP無邊界
客戶端分多次發(fā)送數據給服務器,若服務器的緩沖區(qū)夠大北专,那么服務器端會在客戶端發(fā)送完之后一次性接收過來禀挫,所以是無邊界的;
UDP有邊界
客戶端每發(fā)送一次拓颓,服務器端就會接收一次特咆,也就是說發(fā)送多少次就會接收多少次,因此是有邊界的录粱。