1.OSI七層模型: 將功能分開,降低網路傳輸中的耦合度,每一部分完成自己的功能,開發更加清晰
1.應用層(Application): 提供用戶服務,具體內容有特定程式規定
網路服務與最終用戶的一個介面
協議有: HTTP FTP TFTP SMTP SNMP DNS
2.表示層(Presentation Layer): 提供資料的壓縮解壓縮和加密等
資料的表示,安全,壓縮
格式有,JPEG,ASCll,DECOIC,加密格式等
3.會話層(Session Layer): 建立程式的連接,決定使用什么樣的傳輸服務
建立,管理,終止會話
對應主機行程,指本地主機與遠程主機正在進行的會話
4.傳輸層(Transport): 提供合適的通信服務,流量控制
基于埠(port)
傳輸層由來: IP地址幫我們區分子網,mac地址幫我們找到主機,但卻需要一個埠定位具體應用程式,埠即為應用程式與網卡的編號
傳輸層功能: 建立埠到埠通信,范圍:0-65535,0-1023為系統占用埠
TCP協議: 面向連接可靠的資料傳輸,沒有長度限制但不超過IP包長度,在IP包頭中用2個位元組描述報文長度,2個位元組所能表達的最大數字就是65535
可靠傳輸: 無失序,無差錯,無丟失,無重復
應用情況: 適用于傳輸內容較大,網路情況好,需要提供準確傳輸的情況,如聊天資訊,檔案傳輸,郵件
TCP的三次握手與四次揮手流程圖: https://www.processon.com/view/link/5ef9200d7d9c0844203a1449
三次握手
1.客戶端向服務器發起連接請求(問是否可以連接)
2.服務器接收到請求后進行確認(允許連接)回傳報文
3.客戶端收到許可,建立連接
四次揮手
1.主動方發送報文告知被動方要斷開連接
2.被動方回傳報文,告知受到請求,準備斷開
3.被動方發送報文給主動方告知準備就緒可以斷開
4.主動方發送報文確定斷開
連接
TCP在真正的讀寫操作之前,server與client之間必須建立一個連接
當讀寫操作完成后,雙方不再需要這個連接時它們可以釋放這個連接
短連接和長連接流程圖: https://www.processon.com/view/link/5efca678e401fd1fd2bbe605
長連接
1.client 向 server 發起連接
2.server 接到請求,雙方建立連接
3.client 向 server 發送訊息
4.server 回應 client
5.一次讀寫完成,連接不關閉
6.后續讀寫操作...
7.長時間操作之后client發起關閉請求
短連接
1.client 向 server 發起連接請求
2.server 接到請求,雙方建立連接
3.client 向 server 發送訊息
4.server 回應 client
5.一次讀寫完成,此時雙方任何一個都可以發起 close 操作
TCP長/短連接的優缺點
長連接可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間,對于頻繁請求資源的客戶來說,較適用長連接
長連接多用于操作頻繁,點對點的通訊,而且連接數不能太多情況,如資料庫的連接用長連接
短連接對于服務器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段
短連接下客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和帶寬
并發量大,但每個用戶無需頻繁操作情況下需用短連好,如WEB網站
UDP協議: 面向無連接的服務 不可靠的資料傳輸,報頭8位元組,總長不超過65535位元組,剛好放進一個IP包
發送時由發送端自主進行,不考慮接收端
適用情況: 網路較差,對傳輸準確性要求低,廣播組播
比如: 視頻會議, 廣播資料
物理設備: 四層交換機,四層路由器
5.網路層(Network): 路由選擇,網路互聯,分組傳輸
基于IP地址(IPv4, IPv6)
網路層由來: 世界大網路由是由一個個小的彼此隔離的局域網組成,以太網包只能在一個局域網內發送
一個局域網是一個廣播域,以太網的廣播只能在一個廣播域內發送,跨廣播域發送只能由路由轉發
網路層功能: 規定網路地址的協議即IP協議,廣泛采用的v4版本即ipv4,幫我們區分子網
IP協議: 網路地址由32位2進制表示,范圍: 0.0.0.0-255.255.255.255
Windows用cmd查詢網卡命令: ipconfig
Linux終端中查詢網卡命令: ifconfig
拼命令(ICMP協議): ping 域名/網址
物理設備: 路由器(有對外身份:外網IP),三層交換機
路由器和交換機的區別
交換機的主要功能: 組織局域網,經過交換機內部處理決議資訊之后,將資訊以點對點,點對多的形式發送給固定端
路由器的主要功能: 跨網段進行資料傳輸,路由選擇最佳路徑
子網掩碼: 表示網路特征的一個引數,形式上等同于IP地址也是一個32位二進制數字,它的網路部分全部是1,主機部分全部是0
子網掩碼示例: 255.255.255.0
網路位: 255.255.255
主機位: 0
標準的子網掩碼
定義: 指明一個IP地址的哪些位標識的是主機所在的子網,哪些位標識的是主機的位掩碼
A類IP地址的標準子網掩碼: 255.0.0.0
B類IP地址的標準子網掩碼: 255.255.0.0
C類IP地址的標準子網掩碼: 255.255.255.0
子網判定
1.將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都是1,運算結果是1,否則0),結果相同則在同一子網
2.通過基于ICMP協議的ping命令去ping對方的ip地址, 可以ping通也表示在同一個子網
通過網路地址判定兩個IP地址在不在子網示例: A主機的IP,子網掩碼,按位與計算得出A主機的網路地址: 192.168.0.100 1100 0000 1010 1000 0000 0000 0110 0100 255.255.255.0 1111 1111 1111 1111 1111 1111 0000 0000 192.168.0.0 1100 0000 1010 1000 0000 0000 0000 0000 B主機的IP,子網掩碼,按位與計算得出B主機的網路地址: 192.168.0.137 1100 0000 1010 1000 0000 0000 1000 1001 255.255.255.0 1111 1111 1111 1111 1111 1111 0000 0000 192.168.0.0 1100 0000 1010 1000 0000 0000 0000 0000 A主機的網路地址和B主機的網路地址一樣,所有A主機和B主機在同一個子網 通過ping命令判定兩個IP地址在不在子網示例: ping 192.168.0.137 """執行結果 PING 192.168.0.137 (192.168.0.137): 56 data bytes 64 bytes from 192.168.0.137: icmp_seq=0 ttl=64 time=0.049 ms 64 bytes from 192.168.0.137: icmp_seq=1 ttl=64 time=0.161 ms 64 bytes from 192.168.0.137: icmp_seq=2 ttl=64 time=0.171 ms 64 bytes from 192.168.0.137: icmp_seq=3 ttl=64 time=0.158 ms ^C --- 192.168.0.137 ping statistics --- 4 packets transmitted, 4 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.049/0.135/0.171/0.050 ms """
IP地址分類
IPv4地址分類流程圖: https://www.processon.com/view/link/5ef2818e5653bb2925b228f2target
A類IP地址:
一個A類IP地址由1位元組的網路地址和3位元組主機地址組成,網路地址的最高位必須是"0"
地址范圍: 1.0.0.1-126.255.255.254 # 0和127網段有特殊意義
二進制表示為: 00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
可用的A類網路有126個,每個網路能容納1677214個主機
B類IP地址:
一個B類IP地址由2個位元組的網路地址和2個位元組的主機地址組成,網路地址的最高位必須是"10"
二進制表示為: 10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
地址范圍: 128.1.0.1-191.255.255.254
B類網路有16384個,每個網路能容納65534主機
C類IP地址:
一個C類IP地址由3位元組的網路地址和1位元組的主機地址組成,網路地址的最高位必須是"110"
地址范圍: 192.0.1.1-223.255.255.254
C類網路有2097152個,每個網路能容納254個主機
D類IP地址:
D類IP地址第一個位元組以"1110"開始,它是一個專門保留的地址
它并不指向特定的網路,目前這一類地址被用在多點廣播(Multicast)中
用于多點廣播,多點廣播地址用來一次尋址一組計算機 s 地址范圍224.0.0.1-239.255.255.254
E類IP地址:
以"1111"開始,為將來使用保留
E類地址保留,僅作實驗和開發用
1.公有IP地址分類: inter NIC機構分配給注冊組織的IP地址
2.私有IP地址分類: 私有地址(private address)屬于非注冊地址,專門為非組織機構使用
在這么多網路IP中,國際規定有一部分IP地址是用于我們的局域網使用,也就是屬于私網IP,不在公網中使用的
私網IP地址范圍:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
3.回路測驗IP地址: 127.0.0.1~127.255.255.255 # 用于回路測驗
6.鏈路層(Link): 提供鏈路交換,具體訊息發送
基于以太網卡固定的Mac地址
資料鏈路層由來: 單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什么意思
資料鏈路層功能: 定義了電信號的分組方式以太網協議,幫我們找到主機
ARP協議: 通過目標主機的ip地址獲取目標主機Mac地址的一個協議
資料包組成:
head + data 組成的一個資料包(最短64B,最大1518B)
head = 發送者mac地址(6B)+接收者mac地址(6B)+資料型別(6B)
data: 資料包具體內容(最短46B,最大1500B)
通訊原理: 廣播
物理設備: 網橋,網卡,以太網交換機
Mac地址: ac:bc:32:bf:6e:25 # 物理地址,全球唯一,前三位表示生產廠家,后三位表示生產廠家生產的那一塊網卡
A主機給B主機第一次發包三步
第一步: 先計算判定A主機和B主機在不在一個子網
在一個子網內(直接通過交換機轉發資料包,ip和mac都不變)
第二步:
A主機先看自己快取區里也有沒有B主機的mac地址,有的話直接到第三步
A主機通過arp協議單播發給交換機,交換機收到后在子網內廣播(ff:ff:ff)
B主機收到廣播資料后通過對比ip地址,發現A主機是要拿自己的mac地址
B主機通過單播回送給交換機包含自己的mac地址的包,交換機快取B主機的ip和mac
交換機再把包通過單播發送給A主機
此時A主機成功的拿到B主機的mac地址,并將B主機的mac地址快取到本地
第三步: A主機由單播方式發包給交換機,交換機再單播把包發送給B主機
不在一個子網內(通過交換機和路由器轉發資料包,ip不變,mac改變)
第二步:
A主機先看自己快取區里也有沒有A主機所在子網路由器的mac地址,有的話直接到第三步
A主機通過arp協議單播發給交換機,此時目標ip是A主機所在子網內路由器的網關ip(例如: 192.168.1.1)
A主機所在的交換機沒有快取A主機所在子網路由器的ip和mac
A主機所在的交換機收到包后會在子網內廣播(ff:ff:ff)
A主機所在的路由器收到廣播資料后通過對比ip地址,發現A主機是要拿自己的mac地址
A主機所在的路由器通過單播回送給交換機包含自己的mac地址的包
此時A主機所在的交換機會快取A主機所在的路由器的ip和mac資訊
A主機所在的交換機快取了A主機所在子網路由器的ip和mac
A主機所在的交換機收到包后會單播發送給A主機所在子網的路由器
A主機所在的路由器通過單播回送給交換機包含自己的mac地址的包
A主機所在的交換機再把包通過單播發送給A主機
此時A主機成功的拿到A主機所在子網的路由器的mac地址,并將mac地址快取到本地
第三步:
1.A主機的資料包在A主機子網內的程序
A主機通過arp協議單播發給交換機,此時目標ip是B主機ip,而目標mac是A主機所在子網的路由器的mac地址
交換機收到A主機的包后將通過單播發送給A主機所在子網內的路由器
2.A主機的資料包在路由間的程序
A主機的包由A主機子網內的路由器轉發到中間路由
中間路由再把A主機的包發到B主機所在子網的路由器
注: 中間路由的轉發次數由實際A主機和B主機間的路由設備來決定
3.A主機的資料包在B主機子網內的程序
B主機所在子網的路由器將A的包發給B主機所在的交換機
B主機所在的交換機沒有快取B主機的ip和mac資訊
B主機所在的交換機收到A主機的包后在B主機所在的子網內廣播(ff:ff:ff)
B主機收到廣播資料后通過對比ip地址,發現是A主機給自己的包
B主機所在的交換機快取了B主機的ip和mac資訊
B主機所在的交換機通過單播把A主機的資料包發送給B主機
補充:
1.如果是通過集線器發包,那么即使A主機拿到了B主機的mac地址依然是在一個通過廣播方式發包
2.可以通過命令查看本地快取的mac地址: arp -a
arp攻擊-中間人攻擊
正常來說A主機要給B主機發包會經歷發包三步
但是在A主機給B主機發包之前,C主機先回一個基于arp協議的包告訴A主機B主機的mac地址是自己的mac地址
此時A主機會在快取記錄B主機的mac地址實際是C主機的mac地址,此時A主機向B主機發包會發給C主機
B主機等待A主機發包,但是C主機先回一個基于arp協議的包告訴B主機A主機的mac地址是自己的mac地址
此時A主機開始給B主機發包,C主機在收到A主機的包時在本地拷貝一份資料,再將資料包發送給B主機
7.物理層(Physical Layer): 物理硬體,介面
基于物理層面的鏈接
物理層由來: 計算機之間的物理連接網,如光纖,電纜,雙絞線,無線電波
物理層功能: 主要基于電器特性發送高低電壓(電信號)高電壓對應數字1,低電壓對應數字0
物流設備: 集線器,網線,光纖
雙絞線(網線)線序
1->T568A: 綠白 綠 橙白 藍 藍白 橙 棕白 棕
2->T568B: 橙白 橙 綠白 藍 藍白 綠 棕白 棕
交叉線: T568A----T568B 用于同種設備連接(交換機連交換機)
直通線: T568A----T568A(T568B----T568B) 不同設備連接(PC機連交換機)
2.OSI五層模型(TCP/IP模型)
應用層: 應用層,表示層,會話層
傳輸層: 傳輸層
網路層: 網路層
鏈路層: 鏈路層
物理層: 物理層
3.OSI四層模型
應用層: 應用層,表示層,會話層
傳輸層: 傳輸層
網路層: 網路層
物理鏈路層: 鏈路層,物理層
4.什么是協議
網路協議概述: 網路通信中,各方必須遵守規定,包括建立連接,如何識別,訊息結構等
應用層: FTP, TFTP, HTTP, HTTPS, SMTP, DNS
傳輸層: TCP, UDP
網路層: IP
資料鏈路層: ARP協議
物理層: 傳輸電信號
TCP/IP協議族中各協議之間的關系流程圖: https://www.processon.com/view/link/5efdf74e07912929cb6e292d
TCP/IP協議傳輸流程圖: https://www.processon.com/view/link/5efdfba1f346fb1ae58de263
5.主機,IP,PORT,網段,子網掩碼,DNS,位元組序
1.主機: 計算機的名稱(本機 localhost)
獲取主機名 In [1]: import socket In [2]: socket.gethostname() Out[2]: 'MacBook-Pro.local' 通過主機名決議IP In [3]: socket.gethostbyname('MacBook-Pro.local') Out[3]: '127.0.0.1' In [4]: socket.gethostbyname('localhost') Out[4]: '127.0.0.1' 獲取服務器別名和地址 In [5]: socket.gethostbyaddr('www.baidu.com') # 回傳的元祖第一項是服務器的主機名稱,第二項是服務器別名,第三項是服務器地址 Out[5]: ('www.baidu.com', ['38.177.215.14.in-addr.arpa'], ['14.215.177.38']) In [6]: socket.gethostbyaddr('14.215.177.38') Out[6]: ('www.baidu.com', ['38.177.215.14.in-addr.arpa'], ['14.215.177.38'])
2.IP地址
IPv4: 點分十進制,三個點分為四個部分,每個部分范圍是 0-255
示例: 192.168.1.2
127.0.0.1: 本地回環地址(本地測驗ip)
0.0.0.0: 局域網可用IP
192.168.1.0: 表是網段
192.168.1.1: 網關
192.168.1.255: 廣播地址
IPv6: ip地址更多
將IP地址轉換為二進制: In [5]: socket.inet_aton('192.168.1.2') Out[5]: b'\xc0\xa8\x01\x02' 將二進制轉換為點分十進制: In [6]: socket.inet_ntoa(b'\xc0\xa8\x01\x02') Out[6]: '192.168.1.2' 指定以v4協議還是v6協議轉換 inet_pton & inet_ntop: In [7]: socket.inet_pton(socket.AF_INET, '192.168.1.2') Out[7]: b'\xc0\xa8\x01\x02' In [8]: socket.inet_ntop(socket.AF_INET, b'\xc0\xa8\x01\x02') Out[8]: '192.168.1.2' # socket.AF_INET 表示IPv4 # socket.AF_INET6 表示IPv6
3.PORT埠
定義: 埠號是地址的組成部分,在一個系統中用于區分應用程式
埠取值范圍1-65535
1-255: 眾所周知的埠
256-1023: 系統埠
1024-65535: 動態埠
獲取一個應用的埠
In [9]: socket.getservbyname('mysql') Out[9]: 3306 In [10]: socket.getservbyname('http') Out[10]: 80 In [11]: socket.getservbyname('https') Out[11]: 443 In [12]: socket.getservbyname('ssh') Out[12]: 22 In [13]: socket.getservbyname('ftp') Out[13]: 21
4.網段: 一個局域網內ip地址的范圍
5.子網掩碼: 和ip地址進行&運算,得出計算計算機網段
6.DNS: 域名決議
7.位元組序:
在不同的設備上針對資料型別存盤的方式不同
大端序: 高位元組存在低地址,例如數值14對應二進制1110按大端序存盤為: 1110
小端序: 低位元組存在低地址,例如數值14對應二進制1110按小端序存盤為: 0111
網路位元組序: 在訊息的發送和接收程中都按照網路位元組序的方式進行決議,其實就是采用了大端序將位元組發送方式統一
6.網路通信中的單工,半雙工,全雙工
單工: 單項通信,要么只能收, 要么只能發,例如收音機
半雙工: 發的時候不能收, 收的時候不能發,例如對講機
全雙工: 發的時候可以收, 收的時候可以發,例如電話,socket
7.多任務
CPU的調度演算法: 時間片輪轉,優先級調度
并行:真的多任務,cup數>=任務數,任務真的是一起執行的
并發:假的多任務,cup數<任務數,通過作業系統的各種任務調度演算法,實作用多個任務一起執行
實際上總有一些任務不在執行,因為切換任務的速度相當快,看上去一起執行而已
8.靜態URL
靜態URL類似 域名/news/2012-5-18/110.html 我們一般稱為真靜態URL,每個網頁有真實的物理路徑,也就是真實存在服務器里的
優點: 網站打開速度快,因為它不用進行運算,另外網址結構比較友好利于記憶
缺點: 最大的缺點是如果是中大型網站,則產生的頁面特別多,不好管理
SEO影響: 靜態URL對SEO肯定有加分的影響,因為打開速度快,這個是本質
9.動態URL
動態URL類似 域名/DaiKuan.php?id=17,帶有?號的URL,一般稱為動態網址,每個URL只是一個邏輯地址,并不是真實物理存在服務器硬碟里的
優點: 適合中大型網站,修改頁面很方便,因為是邏輯地址,所以占用硬碟空間要比純靜態網站小
缺點: 因為要進行運算所以打開速度稍慢,目前有服務器快取技術可以解決速度問題,最大的缺點是URL結構稍稍復雜不利于記憶
SEO影響: 目前百度SE已經能夠很好的理解動態URL,所以對SEO沒有什么減分的影響(特別復雜的URL結構除外)
10.偽靜態URL
偽靜態URL類似 域名/course/74.html 這個URL和真靜態URL類似,他是通過偽靜態規則把動態URL偽裝成靜態網址,也是邏輯地址不存在物理地址
優點: URL比較友好,利于記憶,非常適合大中型網站,是個折中方案
缺點:
1.設定麻煩,服務器要支持重寫規則,另外進行了偽靜態網站訪問速度并沒有變快
2.因為實質上它會額外的進行運算解釋,反正增加了服務器負擔,速度反而變慢
3.還有可能會造成動態URL和靜態URL都被搜索引擎收錄,不過可以用robots禁止掉動態地址
SEO影響: 和動態URL一樣,對SEO沒有什么減分影響
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/43188.html
標籤:Python
上一篇:day3 筆記
下一篇:Python日期時間(詳細)
