B站韓立剛老師的視頻真的是一絕。
問題:計算機除了計算,還能彼此間通信,它們是如何通信的呢?是網絡。
大綱:1、OSI七層參考模型;2、TCP/UDP傳輸協議;3、常見的應用層協議
一、網絡體系架構
1、協議
協議是指計算機通信網絡中,兩台計算機進行通信,所必須遵循的規定或規則。計算機網絡中有各種各樣的協議,比如TCP協議、IP協議、HTTP協議、FTP協議等。像這樣把與互聯網相關聯的協議集合起來,就稱為TCP/IP協議族。
OSI/RM協議是由ISO(
國際標准化組織)制定的,它有三個基本的功能:提供給開發者一個必須的、通用的概念以便開發完善、可以用來解釋連接不同系統的框架。
2、多層架構
OSI七層:
應用層:能夠產生網絡流量,能和用戶交互的應用程序
表示層:加密、壓縮、開發人員
會話層:服務和客戶端建立的會話,如netstat -nb 可以查木馬
傳輸層:可靠傳輸建立會話、不可靠傳輸、流量控制
網絡層:IP地址編址、選擇最佳路徑
數據鏈路層:輸入如何封裝、添加物理層地址、MAC
物理層:電壓、接口標准
網絡排錯:從底層到高層。
網絡安全和OSI參考模型:
物理層安全
數據鏈路層安全:ADSL、AP密碼
網絡層安全
應用層安全:SQL注入漏洞、上傳漏洞
前三層開發工程師關心,中間三層網絡工程師關心,物理層搞硬件的關心。用分層的思想,去解決問題。
其他分層:
TCP/IP協議族的分層管理
-
應用層:處理特定應用程序,如FTP、DNS、HTTP、Telnet(遠程控制)
-
傳輸層:提供數據傳輸,該層有倆協議TCP和UDP
-
網絡層:處理網絡上流動的數據包,該層協議有IP、ICMP、IGMP
-
數據鏈路層:處理連接網絡的硬件部分,包括操作系統、硬件設備驅動、網卡等
IP協議:Internet Protocol,網際協議,位於網絡層。作用:把各種數據包傳送給對方。如果要保證確定傳送到對方那里,則需要滿足各類條件,其中最重要的兩個條件是IP地址和MAC地址。IP地址:指明了節點被分配到的地址(可以改變);MAC地址:是指網卡所屬的固定地址(基本不改變);IP地址和MAC地址相互匹配。;ARP協議,用於解析地址,可以根據IP地址反查出對應的MAC地址。
TCP協議:Transmission Control Protocol,傳輸控制協議,位於傳輸層。作用:提供可靠的字節流服務。TCP通過三次握手策略提供可靠的服務
DNS:Domain Name System,域名系統,位於應用層。作用:提供域名到IP地址之間的解析服務
此圖關系就是:客戶端——應用層——傳輸層——網絡層——傳輸層——應用層——服務器
二、各層次詳解
自下而上,每一層都要為它上面那層提供服務。
1、物理層:
1)定義了網絡設備的機械特性(如接口標准)、電器特性(如電壓工作范圍)、功能特性、過程特性
2)數據通信常識:數字信號、模擬信號
3)如何利用傳輸介質的帶寬:頻分多路復用、時分多路復用
2、數據鏈路層:
1)要解決的三個問題:
1.1)把要傳輸的數據封裝成幀
1.2)發送端和接收端要對轉移字符進行加、去,這叫透明封裝
1.3)無差錯接受(即差錯檢驗)
2)點到點線路的數據鏈路層(使用PPP協議)
3)廣播信道的數據鏈路層(CSMA/CD協議)
3)什么是以太網,以太網如何檢測沖突、避免沖突
3.1)以太網的設備:集線器、網橋、交換機
3.2)百兆、千兆、萬兆以太網
3、網絡層
只負責在不同的網絡之間盡力轉發數據包, 如果丟了,不負責重傳以及順序。
路由器是三層設備,它頂多看到網絡層的數據。
物理層、數據鏈路層和網絡層封裝到一起。
所以不管物理層、鏈路層多亂,網絡層只要看把數據傳到哪個ip就行,其他不用管。
比如排查問題時,只要能ping通ip,說明下面三層沒問題,就是上面兩層的事。
1)自己如何配公司網絡?
設備:幾台電腦,一個交換機,一個路由器
公司內部用的是局域網,自己的ip隨便定,
公司跟外部連接是廣域網,ip就是公網ip,運營商分配的
局域網和廣域網要想聯通,通過路由器,他也充當一個網關作用,
路由器要設置兩個地址,一個是網關,就是個門,公司的電腦都走這個門出去,(跨域通信必配網關)
另一個就是運營商分配的ip了,這個ip是運營商每隔一段時間隨機分配的,會變。
幾台電腦,設置ip,子網掩碼(掩碼就是用來確定ip從第幾位開始是一樣的),和網關(約定俗成就是ip的第一個地址)
這樣就行了。
此時,如果一個電腦,要訪問對方公司局域網的一台電腦,需要在自己路由器里,用命令修改路由表,讓路由器知道一輸入那個局域網地址,就知道該扔給哪個公網ip。
2)網絡層如何准備數據
發送端:
1.應用程序准備要傳輸的文件
2.傳輸層:將文件分段,並編號
3.網絡層:添加目標IP地址源IP地址
4.數據鏈路層:兩種情況
使用自己的子網掩碼,判斷自己在哪個網段
使用自己的子網掩碼,判斷目標地址在哪個網段
如果是同一個網段,arp協議廣播解析目標IP地址的MAC
3)網絡層的各種協議
3.1)arp協議:一個電腦要向另一台電腦發送數據,需要通過發廣播,問對應ip的mac地址,拿到mac地址才能給對方發數據。這個廣播只能在本網段進行,跨不了路由器。
arp欺騙,是指給人家廣播時,返回錯誤的mac地址。這樣可以限制通信、也可以截取數據。
可以通過指定arp -s指定靜態mac地址。比如安全軟件的arp防火牆
網絡執法官
arp -s 192.168.80.1 00-0C-29-53-48-C3
arp -a
本地連接 修復
3.2)ICMP協議:測試網絡
3.3)IGMP協議:它在路由器上,檢測本網段中,誰綁定了多播地址,就去請求人家的數據包
3.4)IP協議:
路由器轉發數據包時,需要按照路由表,這個表由管理員告訴它,就叫靜態路由;由它自己根據協議學習,就叫動態路由,這些協議如RIP、OSPF,都屬於IP協議,它能讓路由器能自動學習路由表。
如果路由器多,管理員一個個配置會累死的,多用ip協議,如果企業內部,變化不大的,可以用靜態。
靜態路由:需要管理員告訴路由器所有沒有直連的網絡下一跳給誰
靜態路由的缺點:適合於小規模網絡,不能夠自動調整路由
動態路由:RIP 周期性廣播路由表 跳數 30秒更新一下路由信息 最大跳數 15跳
3.5)網絡暢通的條件:看數據包是否有去有回。去不了,說明其中有個路由器的路由表,沒記下一步轉發給哪個路由器,這叫請求不可到達。去了,沒回來,說明有個路由器的表,存了咋去,但沒存回來該轉發給誰,這叫請求超時。
4、傳輸層
這張圖肯定是要背會的
4.1)TCP、UDP
qq的聊天就是UDP,發送失敗就提示發送失敗,但qq的文件傳輸卻是TCP。
netstat -nb 查看當前電腦,有哪些程序跟外界建立了聯系,可以用來排查木馬,及查看對方程序ip
服務和應用層協議之間關系:
服務使用 TCP或UDP的端口偵聽客戶端請求
客戶端使用IP地址定位服務器 使用目標端口 定位服務
可以在服務器網卡上設置只開放必要的端口 實現服務器網絡安全
網絡安全:通過設置網卡的端口限制,來拒絕其他請求。現在理解阿里雲的安全組的原理了,就是通過限制網卡端口完成的。
使用端口掃描工具,和telnet命令,來猜測對方開了哪些服務,然后可以進行恰當的攻擊。比如有80端口,就用web服務的攻擊方式,開了3389,就直接遠程鏈接它,然后猜測密碼等等
面對這種情況,可以修改端口迷惑敵人。比如在注冊表把3389改成4000,這時再遠程鏈接,會默認訪問3389,就連不上,必須在訪問的ip地址后面加上端口4000才行。這樣就達到了一定的安全效果
4.2)傳輸層與網絡層的區別
4.3)UDP
4.4) TCP
報文格式
tcp首部的部分字段:
urg:標志比較急、要插隊的數據,標記為1,不排隊
psh:跟psh配合,urg是在發送端,插隊到自己的緩存里,psh是數據送到服務端了,在人家的緩存里插隊到前面,標記為1,不排隊
ack:0,確認號無效,1,確認號有效,這個和syn配合用
syn:同步,意思是請求要建立連接了,1,表示想建立連接,如下圖,第一次握手,syn1、ack0,第二次握手,syn1、ack1,這時就能客戶端就能進行第三次握手,但客戶端憋着不發,服務端就一直等,就造成DDOS攻擊了,這也是下面記得筆記里為啥tcp要三次握手的原因,沒三次握手前,全是DDOS哈哈。
這種syn+ack的ddos攻擊是在第二次握手時的,還有種第一次握手就搞的,就是客戶端第一次握手時,把自己ip改成隨機的,讓服務端進行確認時(第二次握手),找不着這ip,或者找到別人的ip上,這樣消耗服務端資源。
syn攻擊:通過偽造請求的ip,建立tcp連接,導致受害機器一直找那個要回應的ip,占用資源直到死機。這讓我想起了著名的
DDOS攻擊
rst:中斷的標志,1表示中斷連接了,比如在瀏覽器里,正在請求頁面,點了紅色的小叉中斷請求,就會發rst為1的tcp過去
fin:結束標志,傳完了,這個值就變為1,代表我tcp的數據傳完啦
4.4.1)TCP如何實現可靠傳輸
TCP連接的是兩個端點,端點是IP地址+端口,這個端點學名叫——套接字
1 socket籠統的來說,屬於進程,多個線程可以共用一個socket,程序只是進程執行的代碼(指令)
2 怎么區分開的就看你怎么管理,用於listen是服務器類型(serversocket),其接收一個客戶端連接就會創建一個socket,你可以把這些socket放到集合去管理
3 服務器端只有一個端口監聽,所以不管有多少客戶端跟服務器連,服務器只用同一個端口跟客戶端通信,每個客戶端會自動開啟一個端口跟服務器連接,至於你要發給哪個socket,你自己可以指定,或者從集合里遍歷全部都發送
舉個例子,S是服務器,C是客戶端,C跟S連接,S會創建一個socket對象和C通信,對於C來說端口是隨機分配的(一旦分配好,也就相當於變成固定了),對於S來說端口是固定的(就是監聽端口),S通過固定端口和C的分配好的端口互相發送/接收數據
jmeter並發http請求是線程開啟socket。
TCP可靠,歸根結底一句話:
你沒確認,那我當你沒收到,我再發
TCP通過以字節為單位的滑動窗口技術實現可靠傳輸。(傳數據時,被分割的數據塊放到緩存了,窗口滑動,一些已傳過的數據就從緩存釋放了)
4.4.2)TCP如何實現流量控制
通過接收端,告訴發送端,接收窗口有多大,來實現的。
4.4.3)TCP如何避免網絡擁塞
4.5)TCP為啥要進行第三次握手,兩次不就夠了么?
因為,請求走不同的路由器,有的路長,有的路短,路長的客戶端會重新請求,這會導致服務端以為是新請求就重復確認,但客戶端卻只認一次,於是服務端就一直等,造成資源浪費。
下面是三次握手詳細圖解



5、應用層
應用層的各種協議,可以看作是tcp+端口組成的服務。
5.1 域名DNS服務器:nslookup 查看目前是哪台DNS服務器給我們提供了域名解析服務。輸入網站域名可以查看其對應ip地址,這個也可以實現負載均衡。
5.2 DHCP:可以動態分配ip,與dns一樣,都可以在計算機上配置這個服務使自己電腦提供dns或dhcp服務。
dhcp是一個逆向的arp,arp是在網絡層發廣播,問這個ip對應的mac地址是多少,而dhcp是發廣播,問我這個mac地址應該被分配一個什么ip。
5.3 FTP :如果連不上,要看它是什么模式,如果被動模式訪問不了,就是對方限制了端口,這時客戶端成主動模式即可
FTP協議
主動模式:ftp客戶端告訴ftp服務器使用什么端口偵聽
ftp服務器和ftp客戶端的這個端口建立連接 源端口20
被動模式:ftp服務器打開一個新端口,等待ftp客戶端的連接
ftp服務器端,如果有防火牆,需要在防火牆開21和20端口,使用主動模式進行數據連接
通過window組件,可以添加ftp服務,將自己電腦設置為ftp服務器,此時別人連接我時,netstats -n查看,沒有20端口,就是被動模式。上傳下載文件還是tcp進行的傳輸,每個文件的傳輸都建立一個新的會話
5.4 telnet: 可以遠程調試如路由器、交換機等網絡設備;還可以測試端口是否打開
5.5 rdf:遠程桌面,跟telnet對應,它是終端命令行,這是桌面,只要網絡暢通,在哪都能連上。這個用的是tcp的3389端口
mstsc
在任務管理器-用戶,可以控制當前鏈接的人。
windows Server最多兩個人連一台電腦。
telnet和rdf都需要本機設置有密碼才能用。
遠程連接其他電腦時,可以直接設置將本地磁盤映射過去,這樣就可以直接傳文件了。
5.6 http視頻有問題,然后就教了如何搭建windows上的網站,感覺跟看毛騙里的做假網站似的。然后又講了郵箱服務器smtp的搭建,也是在windows上搭建的,隨便看看把
關於http,看了《計算機網絡自頂向下》,提到了http不保存客戶任何信息,所以它是無狀態的,
http分為非持續連接、持續連接,即短連接、長連接。http1.1默認長連接,短鏈接就是連一次就新發http請求,每次的tcp不同,長連接則相同。
詳情點我參考
請求方式:get,post,head(對方只響應,不返對象),put(上傳文件),delete(刪服務器的內容)
用戶與服務器交互:cookie,
但我們可以用cookie保存客戶信息,客戶首次請求,服務器可以給它個id並返回給客戶端,下次再請求,瀏覽器會在其請求報文中繼續放入首部行cookie:id,這樣就可以根據此用戶訪問過的網頁,給他推送相關產品了。
5.6.2web緩存服務器:http老請求服務器太慢,比如局域網網速100M,連外網10M,就可以買個緩存服務器,請求的圖片、視頻,都緩存到緩存服務器上,這樣對http的請求響應就快了。比如CDN(內容分發網絡),就是干的這件事,cdn公司買很多服務器,根據你的請求,dns服務器給你一個就近的cdn服務器域名,然后返回這個cdn緩存服務器的地址。
而ngnix,是針對服務器端而言的,主要用來分散服務器端的請求壓力。
5.6.3 緩存服務器的內容,無法保持與真實服務器實時同步怎么辦?http自帶條件get方法,通過if-modified-since,來實現更新。
條件get的使用時機是:客戶端之前訪問過某網站,打算再此訪問。(剛才想知道條件get是怎么觸發的,結果百度半天搜不到,一谷歌,直接就是我想要的答案,百度有時不太好用)
6、網絡安全
找肉雞,可以找各種有漏洞的網站(比如各種沒什么人訪問的公司官網等僵屍網站),發指令給他們讓他們去ping 一個大數據包給某個ip,然后占用他的帶寬,使其頁面無法訪問。
具體操作是,先找些僵屍網站,拿到域名,導入到類似php small末日帝國等攻擊軟件,然后掃描這些域名,看誰有漏洞,然后輸入要攻擊的ip、端口,就可以了
木馬程序:
1.查看會話 netstat -n 是否有可疑會話
2.運行msconfig服務,隱藏微軟服務
3.安裝殺毒軟件
6.1)加密技術
對稱加密:雙方約定一個密鑰,傳輸時加密。缺點是密鑰也要在網上傳輸,不安全,且維護密鑰麻煩
非對稱加密:每個人有個密鑰對,把公鑰給大家,私鑰自己留着,以后別人發東西用公鑰加密,自己接收到用私鑰解。
非對稱加密慢但安全,對稱密鑰快但不安全,所以,要傳文件,可以先對稱加密要傳輸的文件,然后用非對稱密鑰,將對稱密鑰的密鑰key加密,然后將加密后的文件和加密后的key都傳過去。這樣就結合了兩種加密技術的優點。
6.2)數字簽名:傳輸內容時,防止抵賴,確保不能更改
如何實現:傳的文件不加密,但給文件算個hash值,再將此值用私鑰加密(非對稱加密),然后把文件、加密后的hash值(叫摘要)、公鑰發給對方,對方拿到這三個東西,也給文件hash一下,然后用公鑰發來的公鑰解密發來的摘要,看解密后的這個hash值與自己算出來的是否一樣。這樣就實現了數字簽名。
6.3)證書機構ca:頒發公鑰私鑰的。公司向ca申請,ca給他個證書、公鑰私鑰,他把文件發給其他人,對方會用ca的公鑰先驗證其ca證書是否合法,合法之后,再用其公司的公鑰解密。
證書頒發機構作用:為企業和用戶頒發數字證書,確認這些企業和個人的身份
發布證書吊銷列表
企業和個人信任證書頒發機構
windows組件有ca服務,可以將本機設置為證書機構,然后訪問這個機器的ca地址,就能進行申請了。同時internet的選項里也有很多著名的ca機構可供選擇。
6.4)ssl:應用層和傳輸層之間的加密
