學(xué)習(xí)網(wǎng)絡(luò)編程的目的
為了開發(fā)一個CS架構(gòu)或者BS架構(gòu)的軟件
客戶端/服務(wù)器架構(gòu)
1.硬件C/S架構(gòu)(打印機)
2.軟件C/S架構(gòu)
互聯(lián)網(wǎng)中處處是C/S架構(gòu)
如百度網(wǎng)站是服務(wù)端,你的瀏覽器是客戶端(B/S架構(gòu)也是C/S架構(gòu)的一種)
騰訊作為服務(wù)端為你提供視頻,你得下個騰訊視頻客戶端才能看它的視頻)
C/S架構(gòu)與套接字(socket)的關(guān)系:
學(xué)習(xí)套接字編程的目的式為了開發(fā)一個C/S或者B/S架構(gòu)的軟件
client --------------網(wǎng)絡(luò)-------------- server
browser--------------網(wǎng)絡(luò)--------------server
什么是網(wǎng)絡(luò)
網(wǎng)絡(luò) = 物理連接設(shè)備 + 互聯(lián)網(wǎng)通信協(xié)議(就是計算機界的統(tǒng)一語言)
網(wǎng)絡(luò)通信原理
互聯(lián)網(wǎng)的本質(zhì)就是一系列的網(wǎng)絡(luò)協(xié)議
然而internet為何物?
其實兩臺計算機之間通信與兩個人打電話之間通信的原理是一樣的(中國有很多地區(qū),不同的地區(qū)有不同的方言,為了全中國人都可以聽懂,大家統(tǒng)一講普通話)
英語成為世界上所有人通信的統(tǒng)一標準,如果把計算機看成分布于世界各地的人,那么連接兩臺計算機之間的internet實際上就是一系列統(tǒng)一的標準,這些標準稱之為互聯(lián)網(wǎng)協(xié)議,互聯(lián)網(wǎng)的本質(zhì)就是一系列的協(xié)議,總稱為‘互聯(lián)網(wǎng)協(xié)議’(Internet Protocol Suite).
互聯(lián)網(wǎng)協(xié)議的功能:定義計算機如何接入internet,以及接入internet的計算機通信的標準。
為何要有網(wǎng)絡(luò)
網(wǎng)絡(luò):信息高速公路
為了方便數(shù)據(jù)傳輸
OSI七層協(xié)議
互聯(lián)網(wǎng)協(xié)議按照功能不同分為osi七層或tcp/ip五層或tcp/ip四層

每一層功能
1、物理層
物理層由來:孤立的計算機之間要想一起玩,就必須接入internet,言外之意就是計算機之間必須完成組網(wǎng)
物理層功能:主要負責(zé)發(fā)送電信號,用高低電平模擬二進制數(shù)0101,高電平對應(yīng)數(shù)字1,低電平對應(yīng)數(shù)字0
網(wǎng)線:--》1001000電信號--》從網(wǎng)線中傳輸電信號
8個比特位是一個字節(jié)
2、數(shù)據(jù)鏈路層
數(shù)據(jù)幀:一組電信號是一個數(shù)據(jù)幀,有頭和數(shù)據(jù)部分
以太網(wǎng)協(xié)議Ethernet:要求連入網(wǎng)絡(luò)的計算機必要要有一塊網(wǎng)卡,并且規(guī)定全球每一塊網(wǎng)卡的mac地址都不一樣,用12位十六進制數(shù)表示,前六位表示生產(chǎn)廠商,后六位表示流水線號
以太網(wǎng)協(xié)議的數(shù)據(jù)傳輸部分分為報頭和數(shù)據(jù)部分,報頭有18個字節(jié)組成,前6個字節(jié)為自己的mac地址,中間6個字節(jié)是對方mac地址,后6個字節(jié)表示數(shù)據(jù)類型
網(wǎng)卡--》mac地址--》全球唯一的--》網(wǎng)卡出廠少在了網(wǎng)卡上。
48位二進制--》看到的都是16進制表示
廣播:
局域網(wǎng)內(nèi)通信,所有人都會接收到,通過mac地址確定給誰的數(shù)據(jù)報,如果不是自己的就不處理
廣播風(fēng)暴
3、網(wǎng)絡(luò)層
跨局域網(wǎng)通信,需要經(jīng)過網(wǎng)絡(luò)層
網(wǎng)絡(luò)層的由來:必須找出一種方法來區(qū)分哪些計算機屬于同一廣播域,哪些不是,如果是就采用廣播的方式發(fā)送,如果不是,就采用路由的方式(向不同廣播域/子網(wǎng)分發(fā)數(shù)據(jù)包),mac地址是無法區(qū)分的,它只跟廠商有關(guān)
IP地址:0.0.0.0 - 255.255.255.255
子網(wǎng)掩碼:配合IP地址進行二進制的與運算,算出兩個IP地址是否屬于同一個局域網(wǎng)
ARP協(xié)議:ip和mac的對照表,負責(zé)把ip解析成mac地址
4、傳輸層
傳輸層的由來:網(wǎng)絡(luò)層的ip幫我們區(qū)分子網(wǎng),以太網(wǎng)層的mac幫我們找到主機,然后大家使用的都是應(yīng)用程序,你的電腦上可能同時開啟qq,暴風(fēng)影音,等多個應(yīng)用程序,那么我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應(yīng)用程序,答案就是端口,端口即應(yīng)用程序與網(wǎng)卡關(guān)聯(lián)的編號。
傳輸層功能:建立端口到端口的通信
端口:0 - 65535 一個應(yīng)用程序可以監(jiān)聽多個端口,但是一個端口只能屬于一個應(yīng)用程序
TCP協(xié)議:可靠傳輸
UDP協(xié)議:不可靠傳輸
5、應(yīng)用層
http,ftp,websocket...
常用端口號
| 應(yīng)用程序 |
FTP |
TFTP |
TELNET |
SMTP |
DNS |
HTTP |
SSH |
MYSQL |
| 熟知端口 |
21,20 |
69 |
23 |
25 |
53 |
80 |
22 |
3306 |
| 傳輸層協(xié)議 |
TCP |
UDP |
TCP |
TCP |
UDP |
TCP |
TCP |
TCP |
flask框架默認端口:5000
Django框架默認端口:8000
MySQL數(shù)據(jù)庫默認端口:3306
redis數(shù)據(jù)庫默認端口:6379
在一臺計算機上,同一時間同一端口只能有一個應(yīng)用程序占用
總結(jié):IP能唯一的表示互聯(lián)網(wǎng)中的某一臺計算機,port能唯一的表示一臺計算機上的一個應(yīng)用程序
ip+port=》標識全世界范圍內(nèi)獨一無二的一個基于網(wǎng)絡(luò)通信的軟件
ARP協(xié)議:通過IP地址解析成MAC地址
DNS
DNS:把網(wǎng)址轉(zhuǎn)換成IP地址
從瀏覽器發(fā)送出去的數(shù)據(jù),都是http協(xié)議,默認都是80端口
TCP三次握手四次揮手
1、tcp可靠傳輸:三次握手,四次回收保證數(shù)據(jù)可靠
2、三次握手
客戶端想服務(wù)端發(fā)送鏈接請求
服務(wù)端回復(fù)可以建立,并且?guī)е蛻舳私⑦B接的數(shù)據(jù)包
客戶端收到后,鏈接建好了
3、這個過程后就剋有可靠傳輸數(shù)據(jù)
4、斷開鏈接(4次揮手)
客戶端告訴服務(wù)端,要斷開
服務(wù)端收到,回復(fù)ok
服務(wù)端可能還有數(shù)據(jù)在傳遞,暫時還沒斷開,要等數(shù)據(jù)傳完
服務(wù)端告訴客戶端,我要斷開鏈接
客戶端收到,回復(fù)ok
Socket層
1、Socket抽象層,從osi七層抽象出去的,抽象了網(wǎng)絡(luò)層和傳輸層,跟語言無關(guān),任何語言都會有socket的封裝
2、專門給開發(fā)人員用的

儲備知識一:通信分為兩大類
1、目標主機在局域網(wǎng)內(nèi)
2、目標主機不在局域網(wǎng)內(nèi)
儲備知識二:ip地址與子網(wǎng)掩碼
ip的作用有二:
1、arp歇一會根據(jù)ip地址解析成mac地址
2、ip+子網(wǎng)掩碼按照位與運算會得到網(wǎng)絡(luò)地址,以此來判斷源于模板是否在一個局域網(wǎng)內(nèi)
通信的前段是:先拿到目標的ip端口
arp協(xié)議的工作步驟:
1、根據(jù)自己的ip與子網(wǎng)掩碼計算出自己的網(wǎng)絡(luò)地址
2、根據(jù)對方的ip與子網(wǎng)掩碼計算出對方的網(wǎng)絡(luò)地址
3、判斷1和2的網(wǎng)絡(luò)地址是否一樣
3.1、如果一樣,證明源地址和目標地址在一個局域網(wǎng)內(nèi),只需要走交換機即可
發(fā)arp協(xié)議的廣播包->拿到目標主機的mac地址
(自己的mac FF-FF-FF-FF-FF-FF) (自己的ip地址 對方的ip地址) 數(shù)據(jù)部分
發(fā)送真實的數(shù)據(jù)包
(自己的mac地址 目標主機的mac地址)(自己的ip地址 對方的ip地址) 數(shù)據(jù)部分
3.2、如果不一樣,證明源與目標不在同一個局域網(wǎng)內(nèi),需要走交換機,再發(fā)給路由器,路由器再轉(zhuǎn)發(fā)給運營商的環(huán)境
發(fā)arp協(xié)議的廣播包-》拿到網(wǎng)關(guān)的mac地址
自己的mac FF-FF-FF-FF-FF-FF 自己的ip地址 網(wǎng)關(guān)的ip地址 數(shù)據(jù)部分
發(fā)送真實的數(shù)據(jù)包
自己的mac 網(wǎng)關(guān)的mac地址 自己的ip地址 對方的ip地址 源端口 目標端口 數(shù)據(jù)部分
交互機只有兩種情況廣播:
1、目標mac為FF-FF-FF-FF-FF-FF
2、目標mac地址不在mac地址表中