網絡基礎常見筆試題

 

      各種協議的默認端口號:

  • ftp:21、20  (21是控制端口  20是數據端口)
  • ssh:22
  • telnet:23
  • smtp:25
  • pop3:110
  • http:80
  • oracle:1521
  • mysql:3306
  • dns/tcp/udp:53
  • www:80
  • https:443

 

      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狀態,完成三次握手。 完成三次握手,客戶端與服務器開始傳送數據.

       位碼即tcp標誌位,有6種標示:
  • SYN(synchronous建立聯機)
  • ACK(acknowledgement 確認)    
  • PSH(push傳送)  
  • FIN(finish結束)  
  • RST(reset重置)  
  • URG(urgent緊急)
  • Sequence number(順序號碼)  
  • Acknowledge number(確認號碼)

  • 第一次握手:主機A發送位碼爲syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求建立聯機;
  • 第二次握手:主機B收到請求後要確認聯機信息,向A發送ack  number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包
  • 第三次握手:主機A收到後檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否爲1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連接建立成功。
     
TCP Client
Flags
TCP Server
1 Send SYN (seq=x)
----SYN--->
SYN Received
2 SYN/ACK Received
<---SYN/ACK----
Send SYN (seq=y) ACK (x+1)
3 Send ACK (y+1)
----ACK--->
ACK Received Connection Established
x: ISN (Initial Sequence Number) of the Client
y: ISN of the Server

TCP圖解3次握手


四次揮手:由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味着這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。
(2)服務器B收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1。和SYN一樣,一個FIN將佔用一個序號。
(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。
(4)客戶端A發回ACK報文確認,並將確認序號設置爲收到序號加1。

TCP斷開連接-四次握手圖解

 

 

  • 默認情況下,當調用close( or closesocket)時,如果發送緩衝中還有數據,TCP會繼續把數據發送完。
  • 發送了FIN只是表示這端不能繼續發送數據(應用層不能再調用send發送),但是還可以接收數據。
  • 被動關閉端可能會將ACK和FIN合到一起發送,所以這也算不上嚴格的四次握手—四個報文段。
  • 應用層如何知道對端關閉?通常,在最簡單的阻塞模型中,當你調用recv時,如果返回0,則表示對端關閉。在這個時候通常的做法就是也調用close,那麼TCP層就發送FIN,繼續完成四次握手。
  • 關閉TCP連接的最後微妙之處在於對Time-Wait狀態的需要。TCP規範要求在終止連接時,兩端的關閉握手都完成後,至少要有一個套接字在Time-Wait狀態保持一段時間。這個要求的提出是由於消息在網絡中傳輸時可能延遲。如果在連接兩端都完成了關閉握手後,它們都移除了其底層數據結構,而此時在同樣一對套接字地址之間又立即建立了新的連接,那麼前一個連接在網絡上傳輸時延遲的消息就可能在新連接建立後到達。由於其包含了相同的源地址和目的地址,舊消息就會被錯誤地認爲是屬於新連接的,其包含的數據就可能被錯誤地分配到應用程序中。

 

 

假設一個C向S發送了SYN後無故消失了,那麼S在發出SYN+ACK應答報文後是無法收到C的ACK報文的(第三次握手無法完成),這種情況下S一般會重試(再次發送SYN+ACK給客戶端)並等待一段時間後丟棄這個未完成的連接,這段時間的長度我們稱爲SYN Timeout,一般來說這個時間是分鐘的數量級(大約爲30秒-2分鐘);一個C出現異常導致S的一個線程等待1分鐘並不是什麼很大的問題,但如果有一個惡意的攻擊者大量模擬這種情況,S將爲了維護一個非常大的半連接列表而消耗非常多的資源----數以萬計的半連接,即使是簡單的保存並遍歷也會消耗非常多的CPU時間和內存,何況還要不斷對這個列表中的IP進行SYN+ACK的重試。實際上如果S的TCP/IP棧不夠強大,最後的結果往往是堆棧溢出崩潰---即使S的系統足夠強大,S也將忙於處理攻擊者僞造的TCP連接請求而無暇理睬客戶的正常請求(畢竟C的正常請求比率非常之),此時從正常客戶的角度看來,S失去響應,這種情況我們稱作:服務器端受到了SYN Flood攻擊(SYN洪水攻擊)。


 

子網劃分:

 

新建4個機房,每個房間有25臺機器,給定一個網絡地址空間:192.168.10.0,現在需要將其劃分爲4個子網

所以主機位數n爲:5     相對應的子網需要借3位

確定了子網部分,後面就簡單了,前面的網絡部分不變,看最後的這8位

 

得到6個可用的子網地址:全部轉換爲點分十進制表示

 

11000000 10101000 00001010 00100000 = 192.168.10.32

11000000 10101000 00001010 01000000 = 192.168.10.64

11000000 10101000 00001010 01100000 = 192.168.10.96

11000000 10101000 00001010 10000000 = 192.168.10.128

11000000 10101000 00001010 10100000 = 192.168.10.160

11000000 10101000 00001010 11000000 = 192.168.10.192

 

子網掩碼:

 

11111111 11111111 11111111 11100000 = 255.255.255.224

發佈了29 篇原創文章 · 獲贊 1 · 訪問量 2100
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章