網絡編程——1、協議基礎,點擊此處。
網絡編程——2、通信基礎,本篇。
網絡編程——3、服務器基礎,點擊此處。
本文爲網絡通信基礎。
目錄
一、交換機與集線器
集線器的作用
1、連接多臺電腦組成局域網。
2、收到的每個數據包的發送都是以廣播的形式進⾏的。
交換機的作用
1、交換機能夠完成多個電腦的鏈接
2、如果每個數據包的發送都是以廣播的形式進⾏的, 容易堵塞⽹絡
3、如果PC不知⽬標IP所對應的的MAC, 那麼, pc會先發送arp廣播, 得到對⽅的MAC然後, 在進⾏數據的傳送
4、當switch第⼀次收到arp⼴播數據, 會把arp⼴播數據包轉發給所有端⼝(除來源端⼝) ; 如果以後還有pc詢問此IP的MAC, 那麼只是向⽬標的端⼝進⾏轉發數據
集線器和交換機的區別?
集線器和交換機都可以組成一個局域網,集線器在收到網絡中一個包時全部以廣播的形式發送給局域網中每臺電腦,而交換機有一個學習的功能,如果某個電腦與交換機發送過數據,交換機會記錄這個電腦的mac地址和ip地址,下一次需要發送到這臺電腦時會直接發送到這一臺電腦上而不是廣播到每臺電腦。
二、arp和icmp
icmp協議:ping命令使用的是icmp協議。在第一次ping對方電腦時,通常不知道對方的mac地址,需要用到arp協議獲取。
arp協議:用廣播的形式來獲取對方mac地址(根據ip找mac地址)。由於不知道對方mac地址,發送的mac地址全爲F的mac地址(廣播mac地址),局域網中每個電腦都會受到,如果對方ip地址匹配時會用arp協議將自己的mac地址傳輸到本機。
rarp協議:根據mac地址找ip。
三、路由器簡介
路由器:用於連接多個子網,具有判斷網絡地址和選擇ip路徑的功能。
注意:路由器有多個網卡,所以可以連接多個子網。
糾正:下圖路由器兩邊紅色表示不通,需要在路由器上設置每個端口時在“Port Status”的“on”上打勾!
路由器連接兩個子網如下圖所示:
但是現在1.X網段和2.X網段還不能ping通,因爲只有路由器右邊的網段是目標網段時才能ping通,即是基於下一跳的。
這時需要設置路由表!(實際使用的是RIP協議,在此手動配置)
手動設置第一個路由器表如下圖:
注意:1、設置好後需要點擊add才能添加到路由表中
2、子網中每臺電腦需要設置正確的網關,左邊電腦的網關爲第一個路由器左邊的ip地址,即192.168.1.254。
3、若要ping通兩邊需要對每個路由器設置來回的路由表!
總體如下圖所示:
四、ip地址與mac地址的不同
有了ip地址爲什麼還要用mac地址?
mac地址,在兩個設備之間通信時在變化;而ip地址,在整個通信過程中都不會發生任何變化。
說明在最底層是以mac地址爲依據進行下一跳傳輸。
ip:標記邏輯上的地址。
mac:標記實際轉發數據時的設備地址。
netmask:和ip地址一起來確定網絡號(網段)。
默認網關:發送的ip不在同一網段時,會把這個數據發送給默認網關。
五、訪問網站過程、http服務器、dns服務器配置
訪問順序爲:
1、先要解析出baidu.com對應的ip地址;
1、先要使用arp協議獲取默認網關的mac地址;
2、組織數據發送給默認網關(ip爲dns服務器的ip,但mac地址是默認網關的mac地址)。
3、默認網關擁有轉發數據的能力,把數據轉發給路由器;
4、路由器根據自己的路由協議,選擇一個合適的較快的路徑轉發數據給目的網關;
5、目的網關(dns服務器所在的網關),把數據轉發給dns服務器;
6、dns個服務器查詢解析出baidu.com對應的ip地址,並原路返回送給請求這個域名的client;
2、得到了baidu.com對應的ip地址後,會發送tcp的3次握手進行連接;
3、使用http協議發送請求數據給web服務器;
4、web服務器收到數據請求後,通過查詢自己的服務器得到相應的頁面內容,原路返回給瀏覽器;
5、瀏覽器收到數據後顯示這個頁面;
6、瀏覽器關閉tcp連接,即4次揮手。
六、tcp的三次握手、四次揮手
6.1 tcp的三次握手
tcp比udp穩定的原因
6.2 tcp的四次揮手
6.3 tcp長連接和短連接
長連接:3次握手後,源源不斷的發送、接收數據,發送完後4次揮手結束。例如視頻傳輸,王者榮耀等。
短連接:3次握手後發送一個數據,然後4次揮手結束,如此循環。如頁面訪問。
七、tcp的十種狀態
在tcp的連接過程中會進行狀態的轉換。
八、2MSL問題
TTL:ping命令使用時會顯示TTL數據,初始爲128,每經過一個路由器會減1。用來表示經過路由器的個數。
MSL:一個數據包在網絡上存活的最長時間。一般1~2分鐘。
2MSL問題(相對於主動關閉的一方來說!在此假設主動關閉方爲客戶端):在四次揮手最後一個ACK確認包發送時會進入2MSL狀態。爲了保證對方能收到這個ACK確認包,客戶端會等待2MSL的時間,因爲: 1)如果服務器端能正確收到這個確認包那麼服務器端會自動關閉,客戶端在2MSL後收不到任何數據也會關閉;2)如果服務器不能收到這個ACK確認包,服務器在1MSL後(初始時間爲客戶端調用close開始!)會認爲上一個數據包對方沒收到,會重新發送上一個數據包,這個數據包傳輸到客戶端時最長需要1MSL,這時客戶端在1~2SML之間,所以仍在等待,保證了ACK確認包的正確接收。
以下爲詳細解釋:
2MSL即兩倍的MSL, TCP的TIME_WAIT狀態也稱爲2MSL等待狀態,當TCP的⼀端發起主動關閉, 在發出最後⼀個ACK包後,即第3次握 ⼿完成後發送了第四次握⼿的ACK包後就進⼊了TIME_WAIT狀態,必須在此狀態上停留兩倍的MSL時間,等待2MSL時間主要⽬的是怕最後⼀個 ACK包對⽅沒收到,那麼對⽅在超時後將重發第三次握⼿的FIN包,主動關閉端接到重發的FIN包後可以再發⼀個ACK應答包。
在TIME_WAIT狀態 時兩端的端⼝不能使⽤, 要等到2MSL時間結束纔可繼續使⽤。
當連接處於2MSL等待階段時任何遲到的報⽂段都將被丟棄。
不過在實際應⽤中可以通過設置 SO_REUSEADDR選項達到不必等待2MSL時間結束再使⽤此端⼝。
九、listen的隊列長度
在mac或windows操作系統下:
# listen中的black表示已經建⽴鏈接和半鏈接的總數
# 如果當前已建⽴鏈接數和半鏈接數以達到設定值, 那麼新客戶端就不會connect成功, ⽽是等待服務器。
在Linux操作系統下:
# listen中的值寫什麼都無所謂,都會建立連接。
十、常見的網絡攻擊
10.1 tcp半鏈接攻擊
tcp半鏈接攻擊也稱爲: SYN Flood (SYN洪⽔)是種典型的DoS (Denial of Service, 拒絕服務) 攻擊;
具體:tcp三次握手時源源不斷的只發送syn,不進行ack迴應。
效果:服務器TCP連接資源耗盡, 停⽌響應正常的TCP連接請求;
10.2 dns攻擊
10.2.1 dns服務器被劫持
劫持了dns服務器,將錯誤的ip地址發送給源電腦,導致訪問到錯誤的網站。
所以dns服務器相當重要!
10.2.2 dns欺騙
DNS 欺騙簡單來說就是⽤⼀個假的 DNS 應答來欺騙⽤戶計算機,讓其相信這個假的地址, 並且拋棄真正的 DNS 應答。
在⼀臺主機發出 DNS 請求後, 它就開始等待應答,如果此時有⼀個看起來正確(擁有和DNS請求⼀樣的序列號) 的應答包,
它就會信以爲真, 並且丟棄稍晚⼀點到達的應答。
10.2.3 查看域名解析的ip地址⽅法
注意:可能獲取多個ip地址。例如百度在全國部署了多個服務器。
10.3 arp攻擊
當被攻擊兩臺電腦發送arp獲取mac地址時,替換對方的mac地址,這時可以獲取對方的數據,然後將數據原封不動的發送給對方使對方不易察覺。
十一、家庭上網解析
在中國家庭中的路由器功能並不單單連接兩個網段,而是加強版的路由器(NAT),用於連接局域網(LAN)和外網(WAN),局域網中的ip地址外網中不可見,所以NAT相當於一個代理進行局域網ip和外網ip的地址轉換,具體如下: