UDP和TCP都屬于Socket協(xié)議蔫仙。
UDP的特點(diǎn):
1鲸伴、每一次發(fā)送數(shù)據(jù)都需要綁定IP和端口號澜沟。相當(dāng)于發(fā)送郵件灾票,只管是否發(fā)送成功,不保證對方是否接收到數(shù)據(jù)茫虽,所以UDP是不安全的刊苍,有可能會(huì)丟失數(shù)據(jù)包。
2濒析、UDP:類似于HTTP正什,也屬于短連接。
TCP的特點(diǎn):
1号杏、只需要一次連接婴氮,屬于 長連接,只要不斷開的情況可以一直使用盾致。TCP好像打電話主经,雙方要通話,首先庭惜,要確定對方不是開機(jī)(網(wǎng)絡(luò)可以到達(dá))罩驻,然后要確定是不是沒有信號,然后還需要對方接聽(通信鏈接)蜈块。
2鉴腻、TCP通過3次“握手”來保證數(shù)據(jù)發(fā)送的安全性,不會(huì)丟失數(shù)據(jù)包百揭。
詳解:
OSI:開放系統(tǒng)互連參考模型:由下往上為
物理層爽哎、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層器一、傳輸層课锌、會(huì)話層、表示層祈秕、應(yīng)用層
其中:
傳輸層:分割并重新組裝上層提供的數(shù)據(jù)流渺贤,為數(shù)據(jù)流提供端到端的傳輸服務(wù)。
因?yàn)榍朊瑢?yīng)傳輸層而言志鞍,它只需要知道目標(biāo)主機(jī)上的哪個(gè)服務(wù)程序來響應(yīng)這個(gè)程序,而不需要知道這個(gè)服務(wù)程序是干什么的方仿。因此固棚,我們只需要能夠抽象的表示出來這些應(yīng)用程序和服務(wù)程序即可统翩。我們使用端口號來抽象標(biāo)識每個(gè)網(wǎng)絡(luò)程序。
傳輸層有兩大協(xié)議此洲,即:TCP(傳輸控制協(xié)議)UDP(用戶數(shù)據(jù)包協(xié)議)厂汗。TCP和UDP可以接收來自多個(gè)應(yīng)用程序的數(shù)據(jù)流,并用端口號標(biāo)識他們呜师,然后把他們送給Internet層處理娶桦。同時(shí)TCP和UDP接收來自Internet層的數(shù)據(jù)包,也用端口號區(qū)分他們汁汗,然后交給不同的應(yīng)用程序衷畦。
因此:在同一IP地址(同一個(gè)目標(biāo)主機(jī))上不同的端口號是兩個(gè)不同的鏈接。IP地址和端口號用來唯一的確定網(wǎng)絡(luò)上數(shù)據(jù)的目的地碰酝。
TCP中的“三次握手”:
目的:TCP是面向鏈接的(即端to端)霎匈,在面向鏈接的環(huán)境中,開始傳輸數(shù)據(jù)之前送爸,在兩個(gè)中端之間必須先建立一個(gè)鏈接铛嘱。建立鏈接的過程可以確保通信雙方在發(fā)送應(yīng)用程序數(shù)據(jù)包之前,都已經(jīng)準(zhǔn)備好了傳送和接收數(shù)據(jù)袭厂。并且使通信雙方統(tǒng)一了初始化序列號墨吓。
過程:傳輸前,需要進(jìn)行三次握手建立鏈接纹磺。而通信結(jié)束后帖烘,通信雙方都會(huì)使用改進(jìn)的三次握手來關(guān)閉鏈接。
SYN:seq=X;
1橄杨、A的TCP程序秘症,為這個(gè)鏈接分配一個(gè)端口(設(shè)為9090)。
2式矫、同時(shí)邏輯上的將TCP連接的狀態(tài)設(shè)置為:正在連接乡摹。(通過在鏈接狀態(tài)表中添加一條記錄,記錄中狀態(tài)為:正在連接)
3采转、同時(shí)聪廉,隨機(jī)生成一個(gè)初始序列號X,生成一個(gè)TCP包故慈,將初始化序列號X設(shè)置為TCP中的序列號板熊,發(fā)送給主機(jī)B。
SYN:seq=Y ? ACK:ack=X+1;
1察绷、B上TCP程序收到該數(shù)據(jù)包干签,查詢9091端口狀態(tài),如果可以鏈接拆撼。
2筒严、同樣的丹泉,在邏輯上的將TCP連接的狀態(tài)設(shè)置為:正在連接
3情萤、同時(shí)鸭蛙,隨機(jī)生成一個(gè)初始化序列號Y,根據(jù)接收的序列號X筋岛,生成應(yīng)答號X+1娶视,生成一個(gè)TCP包,將序列號和應(yīng)答號分別設(shè)置到TCP包頭中睁宰,將TCP數(shù)據(jù)包發(fā)給主機(jī)A肪获。
SYN:seq=X+1 ? ACK:ack=Y+1.
1、A上的TCP程序接收到數(shù)據(jù)包柒傻,查詢9090端口狀態(tài)孝赫。
2、根據(jù)收到的SYN:seq=Y;ACK:ack=X+1; 封裝一個(gè)TCP包 SYN:seq=x+1;ACK:ack=Y+1;發(fā)送給主機(jī)B红符。同時(shí)青柄,TCP程序?qū)㈡溄訝顟B(tài)表中該條記錄狀態(tài)設(shè)置為已連接。
3预侯、主機(jī)B收到數(shù)據(jù)包致开,TCP程序?qū)㈡溄訝顟B(tài)表中該條記錄狀態(tài)設(shè)置為已連接。
至此萎馅,一個(gè)TCP鏈接建立(三次握手)完成双戳。
我們可以看到:
第一:傳送的都是IP數(shù)據(jù)包,其實(shí)只是將收到的數(shù)據(jù)包交給TCP程序處理糜芳。
第二:鏈接狀態(tài)飒货,只是TCP程序中的一個(gè)邏輯狀態(tài)。