10.17 騰訊內推面試題,怎麼做到精通http,tcp

一、 什麼是TCP/IP

一、 什麼是TCP/IP

TCP/IP是一組用於實現網絡互連的通信協議。Internet網絡體系結構以TCP/IP為核心。基於TCP/IP的參考模型將協議分成四個層次,它們分別是:網絡訪問層、網際互聯層、傳輸層(主機到主機)、和應用層。

ISO/OSI七層模型和TCP/IP模型的關係

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

簡單的講TCP/IP是一系列協議的集合,是構成網絡通信的核心骨架,它定義了電子設備如何連入因特網,以及數據如何在它們之間進行傳輸。

二、什麼是http

超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。

HTTP連接最顯著的特點是客戶端發送的每次請求都需要服務器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為“一次連接”。

1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。

2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。

3 ) 在HTTP2.0中,採用二進制格式而非文本格式,完全多路複用的,而非有序並阻塞的——只需一個連接即可實現並行。

由於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種“短連接”,要保持客戶端程序的在線狀態,需要不斷地向服務器發起連接請求。

通常的做法是即使不需要獲得任何數據,客戶端也保持每隔一段固定的時間向服務器發送一次“保持連接”的請求,服務器在收到該請求後對客戶端進行回覆,表明知道客戶端“在線”。若服務器長時間無法收到客戶端的請求,則認為客戶端“下線”,若客戶端長時間無法收到服務器的回覆,則認為網絡已經斷開。

HTTP協議,通常來說是建立在TCP之上的應用,之所以用“通常”,是因為HTTP協議中,並沒有規定必須使用TCP/IP協議或支持TCP/IP協議支持的層。任何能夠提供這種保證的協議都可以被其使用。因此也就是其在TCP/IP協議族使用TCP作為其傳輸層。

HTTP協議是在TCP協議之上的,所以建立一個HTTP連接就需要一次三次握手的過程。

建立TCP需要三次握手才能建立,而斷開連接則需要四次揮手。整個過程如下圖所示:

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

先來看看如何建立連接的。

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

首先Client端發送連接請求報文,Server段接受連接後回覆ACK報文,併為這次連接分配資源。Client端接收到ACK報文後也向Server段發生ACK報文,並分配資源,這樣TCP連接就建立了。

三、什麼是SOCKET

套接字(socket)是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象表示,包含進行網絡通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議端口,遠地主機的IP地址,遠地進程的協議端口。

socket則是對TCP/IP協議的封裝,Socket 只是個接口不是協議,通過 Socket 我們才能使用 TCP/IP 協議,除了 TCP,也可以使用 UDP 協議來傳遞數據。

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力

HTTP、TCP/IP協議與socket之間的區別

網絡由下往上分為:

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

一.TCP/IP連接

手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網絡建立TCP連接。TCP協議可以對上層網絡提供接口,使上層網絡數據的傳輸建立在“無差別”的網絡之上。

建立起一個TCP連接需要經過“三次握手”:

第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

二.HTTP連接

HTTP協議即超文本傳送協議(Hypertext Transfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。

HTTP連接最顯著的特點是客戶端發送的每次請求都需要服務器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為“一次連接”。

在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。

在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。

三.SOCKET原理

套接字(socket)概念

建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於服務器端,稱為ServerSocket 。

套接字之間的連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。

服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。

客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端套接字提出連接請求。

連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。

四.SOCKET連接與TCP/IP連接

創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。

socket則是對TCP/IP協議的封裝和應用(程序員層面上)。也可以說,TPC/IP協議是傳輸層協議,主要解決數據 如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和HTTP協議的關係,網絡有一段比較容易理解的介紹:

“TCP/IP只是一個協議棧,就像操作系統的運行機制一樣,必須要具體實現,同時還要提供對外的操作接口。這個就像操作系統會提供標準的編程接口,比如win32編程接口一樣,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口。”

實際上,傳輸層的TCP是基於網絡層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP編程的接口。socket是對端口通信開發的工具,它要更底層一些.

五.Socket連接與HTTP連接

由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網絡應用中,客戶端到服務器之間的通信往往需要穿越多箇中間節點,例如 路由器 、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網絡,該連接處於活躍狀態。

而HTTP連接使用的是“請求—響應”的方式,不僅在請求時需要先建立連接,而且需要客戶端向服務器發出請求後,服務器端才能回覆數據。

很多情況下,需要服務器端主動向客戶端推送數據,保持客戶端與服務器數據的實時與同步。此時若雙方建立的是Socket連接,服務器就可以直接將數據傳送給客戶端;若雙方建立的是HTTP連接,則服務器需要等到客戶端發送一次請求後才能將數據傳回給客戶端,因此,客戶端定時向服務器端發送連接請求,不僅可以保持在線,同時也是在“詢問”服務器是否有新的數據,如果有就將數據傳給客戶端。

http協議是應用層的協義

有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。

兩個計算機之間的交流無非是兩個端口之間的數據通信,具體的數據會以什麼樣的形式展現是以不同的應用層協議來定義的如HTTP、FTP…

TCP/IP協議面試常問知識點

1、網絡包的組成:

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

2、TCP頭部由TCP模塊負責添加,頭部格式如下:(最小20字節)

發送方端口號

接收方端口號

序號(發送數據的順序編號):發送方告訴接收方該網絡包發送的數據相當於所有發送數據的第幾個字節。

ACK號(接收數據的順序編號)

數據偏移量

保留

控制位:

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

窗口:接收方告知發送方窗口的大小(即無需等待確認認可一起發送的數據量)

校驗和

緊急指針

可選字段

3、IP頭部和MAC頭部由IP模塊負責添加。

IP頭部:IP用的頭部,包含IP頭部

MAC頭部:以太網的頭部,包含MAC地址

IP頭部格式如下:

版本號

頭部長度

服務類型

總長度:表示IP消息的總長度

ID號:用於識別包的編號,一般為包的序列號。如果一個包被IP分片,則所有的分片都擁有相同的ID

標誌:該字段有3個比特,有效的是前兩個比特。分別表示是否允許分片,當前包是否是分片包

分片偏移量

生存時間

協議號:十六進制表示,TCP:06 UDP:11 ICMP:01

頭部校驗和

發送方IP地址

接收方IP地址

可選字段

MAC頭部的格式如下:

接收方MAC地址(48比特,5字節)

發送方MAC地址

以太類型:使用的協議類型0000-05DC:IEEE802.3 0800:IP協議 0806:ARP協議 86DD:IPV6

4、數據包分片、重組操作:

(1)發送方:

將數據包分為多個TCP頭部+數據包的組合,TCP頭部中存著不同的數據序號;之後將多個組合交由IP模塊,統一添加IP頭部和MAC頭部,IP頭部的ID號設為統一的。

(2)接收方:

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

5、滑動窗口機制:

所謂滑動窗口,就是在發送一個包之後,不等待ACK號的返回,直接發送後續的一系列包。有效利用等待ACK號的這段時間。

窗口大小:能夠接收的最大數據量。

注意接收緩衝區的概念、TCP頭部中的滑動窗口字段的使用(三次握手時傳遞互相的窗口大小,並且中途還會更新大小)

6、IP頭部的兩個IP地址分別為:發送方網卡的IP地址;應用程序提供的接收方IP地址。

MAC頭部的發送方和接受方的MAC地址分別是發送方網卡的MAC地址;利用ARP(地址解析協議)協議,根據接收方IP地址廣播得到的接收方MAC地址。

注意:ARP緩存概念。

7、ICMP協議:

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

8、UDP傳輸協議:

UDP協議使用的具體案例:

向DNS服務器查詢IP地址的時候就是使用的UDP協議。

發送音頻和視頻數據。

像DNS查詢等交換控制信息的操作基本上都可以在一個包的大小範圍內解決,這種場景下就可以使用UDP協議傳輸。UDP協議沒有TCP的接收確認、窗口機制。在收發數據前不需要交換控制信息,也就是說不需要建立和斷開連接。

UDP頭部的格式如下:(8字節)

發送方端口號

接收方端口號

數據長度:UDP頭部後面數據的長度

校驗和:用於校驗錯誤

發送數據:

從應用程序獲取的數據前面加上UDP頭部,然後交給IP進行發送就OK了。

接收數據:

根據IP頭部中的接收方和發送方IP地址,以及UDP頭部中的接收方和發送方的端口號,找到對應的套接字並將數據交給相應的應用程序就OK了。

9、TCP與UDP的區別: (轉載)

騰訊內推面試題,怎麼做到精通http,tcp/ip協議

10、TCP與UDP的區別:

(1)回答發送數據前是否存在建立連接的過程。

(2)TCP過確認機制,丟包可以重發,保證數據的正確性;UDP不保證正確性,只是單純的負責發送數據包。

(3) UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因 此,應用程序需要選擇合適的報文大小。

(4)UDP的頭部,只有8個字節,相對於TCP頭部的20個字節信息包的額外開銷很小。需要面試資料的可以後臺私信我;資料;分享大家


分享到:


相關文章: