協(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國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成矢棚。
四層網(wǎng)絡(luò)架構(gòu)協(xié)議體系:每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求郑什。
層級(jí) | 名稱 | 說明 |
---|---|---|
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ì)的訪問 |
1. 應(yīng)用層
負(fù)責(zé)處理特定的應(yīng)用程序細(xì)節(jié)悍引。幾乎各種不同的TCP/IP實(shí)現(xiàn)都會(huì)提供下面這些通用的應(yīng)用程序:
- Telnet 遠(yuǎn)程登錄
- FTP 文件傳輸協(xié)議
- SMTP 簡單郵件傳送協(xié)議恩脂。
- SNMP 簡單網(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ù)信息联贩,其長短很不一致漫仆,長度不限且可變。
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é)議涨醋,通過三次握手建立連接,通訊完成需四次斷開連接逝撬,只能用于端到端的通訊浴骂。
TCP提供的是一種可靠的數(shù)據(jù)流服務(wù),采用“帶重傳的肯定確認(rèn)”技術(shù)來實(shí)現(xiàn)傳輸?shù)目煽啃浴?/p>
3次握手過程
條件:主機(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ù)段來回應(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ù)段來回應(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):沒有應(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é)束湘捎。
通過三次握手和四次斷開可以看出,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ā)出翻伺,用它來告訴發(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)無效旦事,這時(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):最小長度点楼,為20字節(jié)
名稱 | 長度 | 名稱 | 長度 | |
---|---|---|---|---|
源端口 | 16位 | 目標(biāo)端口 | 16位 | |
位序列號(hào) | 32位 | 位回應(yīng)序號(hào) | 32位 | |
TCP頭長度 | 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í)就簡單地去抓取來自應(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)用程序交下來的報(bào)文,在添加首部后就向下交付給IP層笛谦。既不拆分抱虐,也不合并,而是保留這些報(bào)文的邊界饥脑,因此恳邀,應(yīng)用程序需要選擇合適的報(bào)文大小懦冰。使用“ping”命令來測(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í)反饋回來,那么網(wǎng)絡(luò)就是通的乳附。
UDP包頭結(jié)構(gòu)
名稱 | 長度 | 名稱 | 長度 | |
---|---|---|---|---|
源端口 | 16位 | 目標(biāo)端口 | 16位 | |
長度 | 16位 | 校驗(yàn)和 | 16位 |
TCP内地、UDP的區(qū)別
- 基于連接與無連接;
- 對(duì)系統(tǒng)資源的要求(TCP較多赋除,UDP少)阱缓;
- UDP程序結(jié)構(gòu)較簡單;
- 流模式與數(shù)據(jù)報(bào)模式 举农;
- TCP保證數(shù)據(jù)正確性荆针,UDP可能丟包,TCP保證數(shù)據(jù)順序颁糟,UDP不保證航背。