1)TCP
?????? TCP傳輸控制協(xié)議,是一種面向連接的,可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
??????優(yōu)點:可靠、穩(wěn)定。TCP的可靠體現(xiàn)在數(shù)據(jù)傳遞之前,會有三次握手來建立連接,在數(shù)據(jù)傳遞時,有確認、窗口、重傳、擁塞控制機制,在數(shù)據(jù)完成后,會斷開連接節(jié)約系統(tǒng)資源
??????缺點:慢,效率低,占用系統(tǒng)資源高,易被攻擊。 在傳遞數(shù)據(jù)之前要先建立連接,這會消耗時間,而且在數(shù)據(jù)傳遞時,確認機制. 重傳機制. 擁塞機制等都會消耗大量時間,而且要在每臺設備上維護所有的傳輸連接。然而,每個連接都會占用系統(tǒng)的CPU,內存等硬件資源。因為TCP有確認機制. 三次握手機制,這些也導致TCP容易被利用,實現(xiàn)DOS. DDOS. CC等攻擊。
2)UDP
??????UDP 是用戶數(shù)據(jù)報協(xié)議,是OSI/RM模型中隸屬于傳輸層的面向無連接的網(wǎng)絡數(shù)據(jù)傳輸協(xié)議。
??????優(yōu)點:快,比TCP稍安全。UDP沒有TCP擁有的各種機制,是一種無狀態(tài)的傳輸協(xié)議,所以傳輸數(shù)據(jù)非??欤瑳]有TCP的這些機制,被攻擊利用的機會就少一些,但是也無法避免被攻擊。
??????缺點:不可靠,不穩(wěn)定。因為沒有TCP的這些機制,UDP在傳輸數(shù)據(jù)時,如果網(wǎng)絡質量不好,就會很容易丟包,造成數(shù)據(jù)的缺失。
3)TCP與UDP的異同
??????同:都是傳輸層協(xié)議,為用戶提供服務
??????異:
| TCP | UDP |
|---|---|
| TCP的傳輸是可靠傳輸 | UDP的傳輸是不可靠傳輸 |
| TCP是基于連接的協(xié)議,在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。 | UDP是和TCP相對應的協(xié)議,它是面向非連接的協(xié)議,它不與對方建立連接,而是直接把數(shù)據(jù)包發(fā)送出去 |
| TCP是一種可靠的通信服務,負載相對而言比較大,TCP采用套接字(socket)或者端口(port)來建立通信。 | UDP是一種不可靠的網(wǎng)絡服務,負載比較小。 |
| CP和UDP結構不同,TCP包括序號、確認信號、數(shù)據(jù)偏移、控制標志(通常說的URG、ACK、PSH、RST、SYN、FIN)、窗口、校驗和、緊急指針、選項等信息。 | UDP包含長度和校驗和信息。 |
| TCP提供超時重發(fā),丟棄重復數(shù)據(jù),檢驗數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。 | UDP不提供可靠性,它只是把應用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達目的地。 |
| TCP在發(fā)送數(shù)據(jù)包前在通信雙方有一個三次握手機制,確保雙方準備好,在傳輸數(shù)據(jù)包期間,TCP會根據(jù)鏈路中數(shù)據(jù)流量的大小來調節(jié)傳送的速率,傳輸時如果發(fā)現(xiàn)有丟包,會有嚴格的重傳機制,故而傳輸速度很慢。 | UDP在傳輸數(shù)據(jù)報前不用在客戶和服務器之間建立一個連接,且沒有超時重發(fā)等機制,故而傳輸速度很快。 |
| TCP支持全雙工和并發(fā)的TCP連接,提供確認、重傳與擁塞控制。 | UDP適用于哪些系統(tǒng)對性能的要求高于數(shù)據(jù)完整性的要求,需要“簡短快捷”的數(shù)據(jù)交換、需要多播和廣播的應用環(huán)境。 |
4.三次握手與四次揮手
??????TCP是一種面向連接的,可靠的、基于字節(jié)流的傳輸層通信協(xié)議,通過三次握手與四次揮手完成連接的可靠性。
三次握手:
第一次握手:客戶端向服務器端發(fā)送連接請求包SYN(syn=j),等待服務器回應;
第二次握手:服務器端收到客戶端連接請求包SYN(syn=j)后,將客戶端的請求包SYN(syn=j)放入到自己的未連接隊列,此時服務器需要發(fā)送兩個包給客戶端;
?。?)向客戶端發(fā)送確認自己收到其連接請求的確認包ACK(ack=j+1),向客戶端表明已知道了其連接請求
?。?)向客戶端發(fā)送連接詢問請求包SYN(syn=k),詢問客戶端是否已經(jīng)準備好建立連接,進行數(shù)據(jù)通信;
即在第二次握手時服務器向客戶端發(fā)送ACK(ack=j+1)和SYN(syn=k)包,此時服務器進入SYN_RECV狀態(tài)。
第三次握手:客戶端收到服務器的ACK(ack=j+1)和SYN(syn=k)包后,知道了服務器同意建立連接,此時需要發(fā)送連接已建立的消息給服務器;
向服務器發(fā)送連接建立的確認包ACK(ack=k+1),回應服務器的SYN(syn=k)告訴服務器,我們之間已經(jīng)建立了連接,可以進行數(shù)據(jù)通信。
ACK(ack=k+1)包發(fā)送完畢,服務器收到后,此時服務器與客戶端進入ESTABLISHED狀態(tài),開始進行數(shù)據(jù)傳送。

四次揮手:
第一次揮手:主機A向主機B發(fā)送FIN包;A告訴B,我(A)發(fā)送給你(B)的數(shù)據(jù)大小是N,我發(fā)送完畢,請求斷開A->B的連接。
第二次揮手:主機B收到了A發(fā)送的FIN包,并向主機A發(fā)送ACK包;B回答A,是的,我總共收到了你發(fā)給我N大小的數(shù)據(jù),A->B的連接關閉。
第三次揮手:主機B向主機A發(fā)送FIN包;B告訴A,我(B)發(fā)送給你(A)的數(shù)據(jù)大小是M,我發(fā)送完畢,請求斷開B->A的連接。
第四次揮手:主機A收到了B發(fā)送的FIN包,并向主機B發(fā)送ACK包;A回答B(yǎng),是的,我收到了你發(fā)送給我的M大小的數(shù)據(jù),B->A的連接關閉。
