協(xié)議(protocol):計(jì)算機(jī)之間進(jìn)行通信的格式約定、標(biāo)準(zhǔn)。
TCP/IP 協(xié)議
Transmission Control Protocol/Internet Protocol
傳輸控制協(xié)議/網(wǎng)絡(luò)互聯(lián)協(xié)議(又名:網(wǎng)絡(luò)通訊協(xié)議)
TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在設(shè)備之間傳輸?shù)臉?biāo)準(zhǔn)。是Internet最基本的協(xié)議、Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。
四層網(wǎng)絡(luò)架構(gòu)協(xié)議體系:每一層都呼叫它的下一層所提供的協(xié)議來(lái)完成自己的需求。
層級(jí) | 名稱 | 說(shuō)明 |
---|---|---|
1 | 應(yīng)用層 | HTTP、FTP、Telnet、SMTP、SNMP |
2 | 傳輸層 | TCP、UDP |
3 | 網(wǎng)絡(luò)層 | IP、ICMP、IGMP |
4 | 鏈路層 | 定義物理設(shè)備標(biāo)準(zhǔn),如網(wǎng)線的接口類型、光纖的接口類型、各種傳輸介質(zhì)的傳輸速率等。它的主要作用是傳輸比特流。如何讓格式化數(shù)據(jù)以進(jìn)行傳輸,以及如何讓控制對(duì)物理介質(zhì)的訪問(wèn) |
1. 應(yīng)用層
負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)。幾乎各種不同的TCP/IP實(shí)現(xiàn)都會(huì)提供下面這些通用的應(yīng)用程序:
- Telnet 遠(yuǎn)程登錄
- FTP 文件傳輸協(xié)議
- SMTP 簡(jiǎn)單郵件傳送協(xié)議。
- SNMP 簡(jiǎn)單網(wǎng)絡(luò)治理協(xié)議。
2. 傳輸層
主要為兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端的通信。在TCP/IP協(xié)議簇中,有兩個(gè)互不相同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。
TCP協(xié)議的報(bào)文中包含端口信息(包裹IP報(bào)文)。
報(bào)文(message):是網(wǎng)絡(luò)中交換與傳輸?shù)臄?shù)據(jù)單元,即站點(diǎn)一次性要發(fā)送的數(shù)據(jù)塊。報(bào)文包含了將要發(fā)送的完整的數(shù)據(jù)信息,其長(zhǎng)短很不一致,長(zhǎng)度不限且可變。
3. 網(wǎng)絡(luò)層
也稱作互聯(lián)網(wǎng)層,處理分組在網(wǎng)絡(luò)中的活動(dòng),例如分組的選路。在TCP/IP協(xié)議簇中,網(wǎng)絡(luò)層協(xié)議包括IP協(xié)議(網(wǎng)際協(xié)議),ICMP協(xié)議(internet互聯(lián)網(wǎng)控制報(bào)文協(xié)議),以及IGMP協(xié)議(internet組治理協(xié)議)。
4. 鏈路層
也稱數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細(xì)節(jié)。
IP協(xié)議
Internet Protocol 網(wǎng)絡(luò)互聯(lián)協(xié)議
是為計(jì)算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計(jì)的協(xié)議。在因特網(wǎng)中,能使連接到網(wǎng)上的所有計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)相互通信的一套規(guī)則,規(guī)定了計(jì)算機(jī)在因特網(wǎng)上進(jìn)行通信時(shí)應(yīng)當(dāng)遵守的規(guī)則。任何廠家生產(chǎn)的計(jì)算機(jī)系統(tǒng),只要遵守IP協(xié)議就可以與因特網(wǎng)互連互通。IP地址具有唯一性,根據(jù)用戶性質(zhì)的不同,可以分為5類。
TCP協(xié)議
Transmission Control Protocol 傳輸控制協(xié)議
是面向連接的通信協(xié)議,通過(guò)三次握手建立連接,通訊完成需四次斷開連接,只能用于端到端的通訊。
TCP提供的是一種可靠的數(shù)據(jù)流服務(wù),采用“帶重傳的肯定確認(rèn)”技術(shù)來(lái)實(shí)現(xiàn)傳輸?shù)目煽啃浴?/p>
3次握手過(guò)程
條件:主機(jī)A、主機(jī)B
- A發(fā)送一個(gè)含有同步序列號(hào)的標(biāo)志位的數(shù)據(jù)段向B,并請(qǐng)求建立連接,該數(shù)據(jù)段中,A告訴B兩件事:
- 我想要和你通信。
- 你可以用哪個(gè)序列號(hào)作為起始數(shù)據(jù)段來(lái)回應(yīng)我。
- B收到A的請(qǐng)求后,用一個(gè)帶有確認(rèn)應(yīng)答(ACK)和同步序列號(hào)(SYN)標(biāo)志位的數(shù)據(jù)段響應(yīng)A,并告訴A兩件事:
- 我已收到你的請(qǐng)求,你可以傳輸數(shù)據(jù)了。
- 你要用哪個(gè)序列號(hào)作為起始數(shù)據(jù)段來(lái)回應(yīng)我。
- A收到數(shù)據(jù)段后,再發(fā)送一個(gè)確認(rèn)應(yīng)答,確認(rèn)已收到B的數(shù)據(jù)段:“我已收到回復(fù),我現(xiàn)在要開始傳輸實(shí)際數(shù)據(jù)”。
如此完成3次握手,主機(jī)A和主機(jī)B 便可以傳輸數(shù)據(jù).
特點(diǎn):沒(méi)有應(yīng)用層的數(shù)據(jù)SYN這個(gè)標(biāo)志位只有在TCP建產(chǎn)連接時(shí)才會(huì)被置1握手完成后SYN標(biāo)志位被置0。
4次斷開
- 當(dāng)A完成數(shù)據(jù)傳輸后,將控制位FIN置1,提出停止TCP連接的請(qǐng)求。
- B收到FIN后對(duì)其作出響應(yīng),確認(rèn)這一方向上的TCP連接將關(guān)閉,將ACK置1。
- B再提出反方向的關(guān)閉請(qǐng)求,將FIN置1。
- A對(duì)B的請(qǐng)求進(jìn)行確認(rèn),將ACK置1,雙方向的關(guān)閉結(jié)束。
通過(guò)三次握手和四次斷開可以看出,TCP使用面向連接的通信方式,提高了數(shù)據(jù)通信的可靠性,使發(fā)送數(shù)據(jù)端和接收端在數(shù)據(jù)正式傳輸前就有了交互,為數(shù)據(jù)正式傳輸打下了可靠的基礎(chǔ)。
ACK TCP:報(bào)頭的控制位之一,對(duì)數(shù)據(jù)進(jìn)行確認(rèn)。確認(rèn)由目的端發(fā)出,用它來(lái)告訴發(fā)送端這個(gè)序列號(hào)之前的數(shù)據(jù)段都收到了。比如:確認(rèn)號(hào)為X,則表示前X-1個(gè)數(shù)據(jù)段都收到了,只有當(dāng)ACK=1時(shí),確認(rèn)號(hào)才有效,當(dāng)ACK=0時(shí),確認(rèn)號(hào)無(wú)效,這時(shí)會(huì)要求重傳數(shù)據(jù),保證數(shù)據(jù)的完整性。
SYN:同步序列號(hào),TCP建立連接時(shí)將這個(gè)位置1。
FIN :發(fā)送端完成發(fā)送任務(wù)位,當(dāng)TCP完成數(shù)據(jù)傳輸需要斷開時(shí),提出斷開連接的一方將這位置1。
TCP包頭結(jié)構(gòu):最小長(zhǎng)度,為20字節(jié)
名稱 | 長(zhǎng)度 | 名稱 | 長(zhǎng)度 | |
---|---|---|---|---|
源端口 | 16位 | 目標(biāo)端口 | 16位 | |
位序列號(hào) | 32位 | 位回應(yīng)序號(hào) | 32位 | |
TCP頭長(zhǎng)度 | 4位 | reserved | 6位 | |
控制代碼 | 6位 | 窗口大小 | 16位 | |
偏移量 | 16位 | 校驗(yàn)和 | 16位 | |
選項(xiàng) | 32位(可選) | : | : |
UDP協(xié)議
User Data Protocol 用戶數(shù)據(jù)報(bào)協(xié)議
- 是一個(gè)非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時(shí)就簡(jiǎn)單地去抓取來(lái)自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計(jì)算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個(gè)消息段放在隊(duì)列中,應(yīng)用程序每次從隊(duì)列中讀一個(gè)消息段。
- 由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護(hù)連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺(tái)服務(wù)機(jī)可同時(shí)向多個(gè)客戶機(jī)傳輸相同的消息。
- 信息包的標(biāo)題很短,只有8個(gè)字節(jié),相對(duì)于TCP的20個(gè)字節(jié)信息包的額外開銷很小。
- 吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機(jī)性能的限制。
- 使用盡最大努力交付,即不保證可靠交付,因此主機(jī)不需要維持復(fù)雜的鏈接狀態(tài)表(這里面有許多參數(shù))。
- 是面向報(bào)文的。發(fā)送方的UDP對(duì)應(yīng)用程序交下來(lái)的報(bào)文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報(bào)文的邊界,因此,應(yīng)用程序需要選擇合適的報(bào)文大小。使用“ping”命令來(lái)測(cè)試兩臺(tái)主機(jī)之間TCP/IP通信是否正常,其實(shí)“ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來(lái),那么網(wǎng)絡(luò)就是通的。
UDP包頭結(jié)構(gòu)
名稱 | 長(zhǎng)度 | 名稱 | 長(zhǎng)度 | |
---|---|---|---|---|
源端口 | 16位 | 目標(biāo)端口 | 16位 | |
長(zhǎng)度 | 16位 | 校驗(yàn)和 | 16位 |
TCP、UDP的區(qū)別
- 基于連接與無(wú)連接;
- 對(duì)系統(tǒng)資源的要求(TCP較多,UDP少);
- UDP程序結(jié)構(gòu)較簡(jiǎn)單;
- 流模式與數(shù)據(jù)報(bào)模式 ;
- TCP保證數(shù)據(jù)正確性,UDP可能丟包,TCP保證數(shù)據(jù)順序,UDP不保證。