<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試官問(wèn)你 TCP/IP 協(xié)議了嗎?

          共 2239字,需瀏覽 5分鐘

           ·

          2021-04-03 13:22


          久違的原創(chuàng),哈哈,最近太難了,有空跟大家閑聊一下。

          TCP/IP 協(xié)議族

          通常我說(shuō) TCP/IP 是指 TCP/IP 協(xié)議族。它是基于 TCP 和 IP 這兩個(gè)最初的協(xié)議之上的不同的通信協(xié)議的大集合。
          例如:http、https、ftp、icmp、arp、rarp、smtp(簡(jiǎn)單郵件傳輸協(xié)議)

          5528249957fb617f1b6ca0d224f13ec8.webp

          一個(gè)網(wǎng)絡(luò)請(qǐng)求是怎么傳輸?shù)模?/span>

          我們拿訪問(wèn)瀏覽器舉個(gè)栗子,如圖所示:

          1ac7d4e2a5ce2340da17e39c800cb9bd.webp

          TCP、UDP有什么區(qū)別?各有什么優(yōu)劣?

          TCP 面向連接,提供可靠交付。通過(guò) TCP 連接傳輸?shù)臄?shù)據(jù),無(wú)差錯(cuò)、不丟失、不重復(fù)、并且按序到達(dá)。相對(duì) UDP 開(kāi)銷(xiāo)大
          UDP 面向無(wú)連接,不保證可靠交付。無(wú)擁塞控制,支持一對(duì)一、一對(duì)多、多對(duì)多,開(kāi)銷(xiāo)小。

          關(guān)于 TCP 協(xié)議

          2d452450261cf2c9d761d25cfa1cabae.webp
          • 確認(rèn) ACK - ACKnowledgement 僅當(dāng)ACK = 1 時(shí),確認(rèn)才有效。簡(jiǎn)單來(lái)說(shuō),就是確認(rèn)收到數(shù)據(jù)。

          • 復(fù)位 RST - ReSet 標(biāo)明 TCP 出現(xiàn)嚴(yán)重差錯(cuò)時(shí),必須釋放連接,重新建立連接。

          • 同步 SYN - SYNchronization 在建立連接時(shí),用來(lái)同步序號(hào)。當(dāng) SYN = 1,ACK = 0 時(shí),表名這是一個(gè)連接請(qǐng)求報(bào)文。SYN = 1,ACK = 1 表示這是一個(gè)同意請(qǐng)求報(bào)文。

          • 終止 FNI - FINis(表示終、完)用來(lái)釋放連接。當(dāng) FNI = 1 表示此段報(bào)文發(fā)送方已發(fā)送完畢。

          關(guān)于 UDP 協(xié)議

          a9b7c0487545e590402cf3a24be0312a.webp

          解釋三次握手

          • 確認(rèn)號(hào) ack 期望收到對(duì)方下一個(gè)報(bào)文的序列號(hào)

          • 序列號(hào) seq

            120eebd7c7fd547d6a716ca1449bbaf1.webp
          1. SYN = 1 請(qǐng)求同步序列號(hào),A 的序列號(hào)為:x

          2. SYN = 1 ACK = 1,表示確認(rèn)請(qǐng)求。B 發(fā)送的數(shù)據(jù)的序列號(hào)為:y,期望收到 下一個(gè) A 的數(shù)據(jù)的序列號(hào)為:x + 1

          3. ACK = 1 ,表示確認(rèn)請(qǐng)求。A 發(fā)送的數(shù)據(jù)的序列號(hào)為:x + 1,期望收到下一個(gè) B 的數(shù)據(jù)的序列號(hào)為:y + 1

          說(shuō)說(shuō)TCP三次握手?為什么不兩次?

          如果發(fā)送兩次就可以建立連接話,那么只要客戶端發(fā)送一個(gè)連接請(qǐng)求,服務(wù)端接收到并發(fā)送了確認(rèn),就會(huì)建立一個(gè)連接。

          可能出現(xiàn)的問(wèn)題:如果一個(gè)連接請(qǐng)求在網(wǎng)絡(luò)中跑的慢,超時(shí)了,這時(shí)客戶端會(huì)從發(fā)請(qǐng)求,但是這個(gè)跑的慢的請(qǐng)求最后還是跑到了,然后服務(wù)端就接收了兩個(gè)連接請(qǐng)求,然后全部回應(yīng)就會(huì)創(chuàng)建兩個(gè)連接,浪費(fèi)資源!

          如果加了第三次客戶端確認(rèn),客戶端在接受到一個(gè)服務(wù)端連接確認(rèn)請(qǐng)求后,后面再接收到的連接確認(rèn)請(qǐng)求就可以拋棄不管了。

          說(shuō)說(shuō)TCP四次揮手?為什么不是三次?

          據(jù)傳輸結(jié)束后,通信的雙方都可以釋放連接。現(xiàn)在 A 和 B 都處于 ESTABLISHED 狀態(tài)。

          2ebb33f63609efed872e75c64ac2f8c5.webp

          第一次揮手:A 的應(yīng)用進(jìn)程先向其 TCP 發(fā)出連接釋放報(bào)文段,并停止再發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉 TCP 連接。A 把連接釋放報(bào)文段首部的終止控制位 FIN 置 1,其序號(hào) seq = u(等于前面已傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加 1),這時(shí) A 進(jìn)入 FIN-WAIT-1(終止等待1)狀態(tài),等待 B 的確認(rèn)。請(qǐng)注意:TCP 規(guī)定,F(xiàn)IN 報(bào)文段即使不攜帶數(shù)據(jù),也將消耗掉一個(gè)序號(hào)。

          第二次揮手:B 收到連接釋放報(bào)文段后立即發(fā)出確認(rèn),確認(rèn)號(hào)是 ack = u + 1,而這個(gè)報(bào)文段自己的序號(hào)是 v(等于 B 前面已經(jīng)傳送過(guò)的數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào)加1),然后 B 就進(jìn)入 CLOSE-WAIT(關(guān)閉等待)狀態(tài)。TCP 服務(wù)端進(jìn)程這時(shí)應(yīng)通知高層應(yīng)用進(jìn)程,因而從 A 到 B 這個(gè)方向的連接就釋放了,這時(shí)的 TCP 連接處于半關(guān)閉(half-close)狀態(tài),即 A 已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,但 B 若發(fā)送數(shù)據(jù),A 仍要接收。也就是說(shuō),從 B 到 A 這個(gè)方向的連接并未關(guān)閉,這個(gè)狀態(tài)可能會(huì)持續(xù)一段時(shí)間。A 收到來(lái)自 B 的確認(rèn)后,就進(jìn)入 FIN-WAIT-2(終止等待2)狀態(tài),等待 B 發(fā)出的連接釋放報(bào)文段。

          第三次揮手:若 B 已經(jīng)沒(méi)有要向 A 發(fā)送的數(shù)據(jù),其應(yīng)用進(jìn)程就通知 TCP 釋放連接。這時(shí) B 發(fā)出的連接釋放報(bào)文段必須使 FIN = 1。假定 B 的序號(hào)為 w(在半關(guān)閉狀態(tài),B 可能又發(fā)送了一些數(shù)據(jù))。B 還必須重復(fù)上次已發(fā)送過(guò)的確認(rèn)號(hào) ack = u + 1。這時(shí) B 就進(jìn)入 LAST-ACK(最后確認(rèn))狀態(tài),等待 A 的確認(rèn)。

          第四次揮手:A 在收到 B 的連接釋放報(bào)文后,必須對(duì)此發(fā)出確認(rèn)。在確認(rèn)報(bào)文段中把 ACK 置 1,確認(rèn)號(hào) ack = w + 1,而自己的序號(hào) seq = u + 1(前面發(fā)送的 FIN 報(bào)文段要消耗一個(gè)序號(hào))。然后進(jìn)入 TIME-WAIT(時(shí)間等待) 狀態(tài)。請(qǐng)注意,現(xiàn)在 TCP 連接還沒(méi)有釋放掉。必須經(jīng)過(guò)時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間 2MSL(MSL:最長(zhǎng)報(bào)文段壽命)后,A 才能進(jìn)入到 CLOSED 狀態(tài),然后撤銷(xiāo)傳輸控制塊,結(jié)束這次 TCP 連接。當(dāng)然如果 B 一收到 A 的確認(rèn)就進(jìn)入 CLOSED 狀態(tài),然后撤銷(xiāo)傳輸控制塊。所以在釋放連接時(shí),B 結(jié)束 TCP 連接的時(shí)間要早于 A。

          什么是擁塞控制?

          簡(jiǎn)單來(lái)說(shuō),就是通過(guò)網(wǎng)絡(luò)的擁塞情況來(lái)調(diào)整 TCP 發(fā)送端發(fā)送的數(shù)據(jù)量。發(fā)送量先由 1 指數(shù)級(jí)遞增,到一定量時(shí)(65535 個(gè)字節(jié))開(kāi)始慢下來(lái),這個(gè)時(shí)候還是遞增的。等到開(kāi)始丟包時(shí),又開(kāi)始降低發(fā)送速度。

          什么是流量控制?

          簡(jiǎn)單來(lái)說(shuō),就是 TCP 的接受端處理不過(guò)來(lái),讓 TCP 的發(fā)送端發(fā)送慢一點(diǎn)。接收端會(huì)維護(hù)一個(gè)處理窗口,即是接收端所能處理數(shù)據(jù)的能力。接收端將這個(gè)處理能力不斷反饋給發(fā)送端,以此來(lái)讓發(fā)送端調(diào)整發(fā)送的數(shù)據(jù)量的多少。


          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久奇米 | 黄色国产视频网站 | 久久色国产精品 | 色婷婷操逼 | 看美女操逼|