原文鏈接:https://blog.csdn.net/weixin_42716620/article/details/82888576
前言:在看面試題之前,先了解一下基本定義。
HTTP、TCP、IP協議基本定義
HTTP:
(HyperText Transport Protocol)是超文本傳輸協議的縮寫,它用於傳送WWW方式的數據,關於HTTP協議的詳細內容請參考RFC2616。HTTP協議采用了請求/響應模型。
TCP:
(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內 [1] 另一個重要的傳輸協議。
IP:
網絡之間互連的協議也就是為計算機網絡相互連接進行通信而設計的協議
tcp/ip基礎知識
TCP/IP全稱是Transmission Control Protocol/Internet Protocol。 IP地址共32位,4字節。
IP地址分為兩部分:網絡標識和主機標識。
A類IP地址:第一段為網絡標識,剩下三段為主機標識。網絡地址最高位必須為零。網絡標識長度為7位,主機標識長度為24位。A類網絡的主機數最多可以達到1600多台。
B類IP地址:第一、二段位網絡標識,第三、四段為主機標識。網絡地址最高位必須為10。網絡標識長度為14位,主機標識長度位16位。每個網絡最多能容納6萬多台主機。
C類IP地址:前三段位網絡標識,剩下一段為主機標識。網絡地址最高位必須為110。網絡標識長度為21位,主機標識長度為8位。每個網絡最多容納254台主機。
子網掩碼也是32位的一個IP地址,它的用途是識別本網絡內的計算機。兩台不同主機的IP地址同時與子網掩碼進行AND運算,如果得出結果相同,則說明這兩台計算機處於同一個子網內,可以進行直接通信。 域名的構成:主機名+機構名+網絡名+最高層域名。
常見面試題
一、Http的報文結構。
(1)HTTP請求報文
一個HTTP請求報文由請求行、請求頭部、空行和請求數據4個部分組成,下圖是請求報文的一般格式。
(2)HTTP響應也由三個部分組成,分別是:狀態行、消息報頭、響應正文。
二、TCP與UDP的區別。
(1)TCP:面向連接,可靠的,速度慢,效率低。
(2)UDP:無連接、不可靠、速度快、效率高。
當進程需要傳輸可靠的數據時應使用TCP,當進程需要高效傳輸數據,可以忽略可靠性時應使用UDP協議。
三、TCP/IP:四層模型。
①網絡接口層:對應物理層和數據鏈路層。
②網絡層
③傳輸層
④應用層:包括會話層、表示層、應用層。
四、HTTP與HTTPS有什么區別?
HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,為了保證這些隱私數據能加密傳輸,於是網景公司設計了SSL(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。
簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。
HTTPS和HTTP的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
五、Ping,ICMP報文是什么。
PING (Packet Internet Groper),因特網包探索器,用於測試網絡連通性的程序。
Ping發送一個ICMP(Internet Control Messages Protocol,因特網信報控制協議);回聲請求消息給目的地並報告是否收到所希望的ICMPecho (ICMP回聲應答)。
工作原理:利用網絡上機器IP地址的唯一性,給目標IP地址發送一個數據包,再要求對方返回一個同樣大小的數據包來確定兩台網絡機器是否連接相通,時延是多少。
為了提高IP
數據報交付成功機會,在網絡層使用過了網際控制報文協議(ICMP
)來允許主機或路由器報告差錯和異常情況。ICMP
報文作為IP
層數據報的數據,加上數據報首部,組成IP
數據報發出去。ICMP
協議是IP
層協議。
六、http1.0與http1.1的區別
1、HTTP 1.0中瀏覽器與服務器只保持短暫的連接,瀏覽器的每次請求都與服務器建立一個TCP連接,服務器完成請求處理后立即斷開TCP連接,服務器不跟蹤每個客戶也不記錄過去的請求。
2、http1.1提供永久性連接(即1.0使用非持久連接,HTTP1.0沒有host的字段).
3、HTTP 1.1中增加Host請求頭字段后,實現了在一台WEB服務器上可以在同一個IP地址和端口號上使用不同的主機名來創建多個虛擬WEB站點。
4、http1.1提供身份認證(HTTP1.1提供一個基於口令的基本認證方式,)
TCP三次握手
所謂三次握手,是指建立一個TCP連接時,需要客戶端和服務器總共發送3個包。
三次握手的目的是連接服務器指定端口,建立TCP連接,並同步連接雙方的序列號和確認號並交換 TCP 窗口大小信息.在socket編程中,客戶端執行connect()時。將觸發三次握手。(2) 第二次握手:服務器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器B進入SYN_RECV狀態。
(3) 第三次握手:客戶端A收到服務器B的SYN+ACK包,向服務器B發送確認包ACK(ACK=k+1),此包發送完畢,客戶端A和服務器B進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。
TCP的連接的拆除需要發送四個包,因此稱為四次揮手。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。
1. 序列號seq
占4個字節,用來標記數據段的順序,TCP把連接中發送的所有數據字節都編上一個序號,第一個字節的編號由本地隨機產生,給字節編上序號后,就給每一個報文段指派一個序號,序列號seq就是這個報文段中的第一個字節的數據編號。
2. 確認號ack
占4個字節,期待收到對方下一個報文段的第一個數據字節的序號,序列號表示報文段攜帶數據的第一個字節的編號,而確認號指的是期望接受到下一個字節的編號,因此擋牆報文段最后一個字節的編號+1即是確認號。
3. 確認ACK
占1個比特位,僅當ACK=1,確認號字段才有效。ACK=0,確認號無效。
4. 同步SYN
連接建立時用於同步序號。當SYN=1,ACK=0表示:這是一個連接請求報文段。若同意連接,則在響應報文段中使用SYN=1,ACK=1.因此,SYN=1表示這是一個連接請求,或連接接收報文,SYN這個標志位只有在TCP建立連接才會被置為1,握手完成后SYN標志位被置為0.
5. 終止FIN
用來釋放一個
在三次握手過程中,服務器發送SYN-ACK之后,收到客戶端的ACK之前的TCP連接稱為半連接(half-open connect).此時服務器處於Syn_RECV狀態.當收到ACK后,服務器轉入ESTABLISHED狀態.
Syn攻擊就是 攻擊客戶端 在短時間內偽造大量不存在的IP地址,向服務器不斷地發送syn包,服務器回復確認包,並等待客戶的確認,由於源地址是不存在的,服務器需要不斷的重發直 至超時,這些偽造的SYN包將長時間占用未連接隊列,正常的SYN請求被丟棄,目標系統運行緩慢,嚴重者引起網絡堵塞甚至系統癱瘓。
Syn攻擊是一個典型的DDOS攻擊。檢測SYN攻擊非常的方便,當你在服務器上看到大量的半連接狀態時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊.在Linux下可以如下命令檢測是否被Syn攻擊
netstat -n -p TCP | grep SYN_RECV
一般較新的TCP/IP協議棧都對這一過程進行修正來防范Syn攻擊,修改tcp協議實現。主要方法有SynAttackProtect保護機制、SYN cookies技術、增加最大半連接和縮短超時時間等.
但是不能完全防范syn攻擊。