<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>

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

          共 2362字,需瀏覽 5分鐘

           ·

          2020-08-18 00:47


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

          TCP/IP 協(xié)議族

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

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

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

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

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

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

          • 確認(rèn) ACK - ACKnowledgement 僅當(dāng)ACK = 1 時(shí),確認(rèn)才有效。簡單來說,就是確認(rèn)收到數(shù)據(jù)。

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

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

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

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

          解釋三次握手

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

          • 序列號 seq

          1. SYN = 1 請求同步序列號,A 的序列號為:x

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

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

          說說TCP三次握手?為什么不兩次?

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

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

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

          說說TCP四次揮手?為什么不是三次?

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

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

          第二次揮手:B 收到連接釋放報(bào)文段后立即發(fā)出確認(rèn),確認(rèn)號是 ack = u + 1,而這個(gè)報(bào)文段自己的序號是 v(等于 B 前面已經(jīng)傳送過的數(shù)據(jù)的最后一個(gè)字節(jié)的序號加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)沒有數(shù)據(jù)要發(fā)送了,但 B 若發(fā)送數(shù)據(jù),A 仍要接收。也就是說,從 B 到 A 這個(gè)方向的連接并未關(guān)閉,這個(gè)狀態(tài)可能會持續(xù)一段時(shí)間。A 收到來自 B 的確認(rèn)后,就進(jìn)入 FIN-WAIT-2(終止等待2)狀態(tài),等待 B 發(fā)出的連接釋放報(bào)文段。

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

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

          什么是擁塞控制?

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

          什么是流量控制?

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

          python爬蟲人工智能大數(shù)據(jù)公眾號


          瀏覽 47
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  夜色黄网站 | 特级毛片内射 | 国产精品高潮在线 | 真人视频,一级A片 | 黄色成人网站免费在线观看 |