网络编程 总结
1 . 軟件開發(fā)的架構(gòu)
我們所涉及的兩個(gè)程序之間的通訊大致可以分為兩種:
第一種應(yīng)用類 , qq, 微信, 網(wǎng)盤, 優(yōu)酷這一類是屬于需要安裝的桌面應(yīng)用.
第二種web類 : 百度, 知乎 , 博客園, 等使用瀏覽器訪問就可以直接使用的應(yīng)用.
這些應(yīng)用的本質(zhì)其實(shí)就是兩個(gè)程序之間的通訊, 而這兩個(gè)分類又對(duì)應(yīng)了兩個(gè)軟件開發(fā)的架構(gòu).
1, c/s架構(gòu) : client 與 server, 中文意思: 客戶端與服務(wù)器架構(gòu),這種架構(gòu)是從用戶層面(也可以是物理層面來劃分.),這里的客戶端一般是指客戶端應(yīng)用 ? ? ?? 程序exe, 程序需要安裝后,才能運(yùn)行在用戶的電腦上,對(duì)用戶的電腦依賴較大.
2, b/s架構(gòu) : browser與server, 中文意思 : 瀏覽器與服務(wù)器架構(gòu), 從用戶層面劃分的.瀏覽器,其實(shí)也是一種客戶端, 只是這個(gè)客戶端不需要大家安裝什么程序, 只需在瀏覽器上通過http請(qǐng)求服務(wù)器相關(guān)的資源.
2. 通信的事情
?兩個(gè)py文件進(jìn)行通信 : 打開一個(gè)文件
兩個(gè)電腦進(jìn)行通信 : 連一個(gè)網(wǎng)線
多個(gè)電腦進(jìn)行通信:?
? ex : 電腦1(源)要找電腦2(目標(biāo))
? 電腦1首先發(fā)送一個(gè)請(qǐng)求幀,期中包含(我的ip是192.168.1.1,我的mac地址是xxxxxxxx,我要找ip地址為192.168.1.2的主機(jī)),將此請(qǐng)求發(fā)送給交換機(jī).
? 交換機(jī)要廣播這條消息給其他所有的主機(jī)
? 目標(biāo)主機(jī)接收到消息后,對(duì)比發(fā)現(xiàn)自己就是被找的主機(jī),回復(fù)給交換機(jī)信息(我的ip地址是192.168.1.2,我的mac地址是yyyyyyyyy,請(qǐng)回復(fù)給ip地址為192.168.1.1,mac地址為xxxxxxx的主機(jī))
? 交換機(jī)單播形式返回給源主機(jī)
?
3 mac地址 : 是一個(gè)物理地址,全球唯一,? 類似于身份證
4? ip地址:??? 是一個(gè)四位點(diǎn)分十進(jìn)制,它標(biāo)識(shí)了計(jì)算機(jī)在網(wǎng)絡(luò)中的位置.類似于 學(xué)號(hào)
5 交換機(jī)的通信方式:
???????? 廣播 : 吼一嗓子
???????? 單播 : 一對(duì)一
???????? 組播 : 一對(duì)多
6 arp協(xié)議 :? 通過目標(biāo)ip地址獲取目標(biāo)mac地址的一個(gè)協(xié)議.
7 端口 : 操作系統(tǒng)為本機(jī)上每一個(gè)運(yùn)行的程序都隨機(jī)分配一個(gè)端口,其他電腦上的程序可以通過端口獲取到這個(gè)程序
ip地址 + 端口 能唯一找到某臺(tái)電腦上的某一個(gè)服務(wù)程序
8? 路由器 : 連接不同網(wǎng)段 , 路由
9? 網(wǎng)關(guān)?? : 類似于一個(gè)局域網(wǎng)的出口和入口
10? 網(wǎng)段? ?: 一個(gè)局域網(wǎng)內(nèi)的ip地址范圍
11 子網(wǎng)掩碼 : 子網(wǎng)掩碼 &? ip地址? 得到網(wǎng)段
12? osi 五層模型:
應(yīng)用層? ?????:? http,https,ftp
傳輸層?? ????:? tcp / udp????????? 四層交換機(jī)? 四層路由器
網(wǎng)絡(luò)層?? ????:? ip協(xié)議??????????? 路由器? 三層交換機(jī)
數(shù)據(jù)鏈路層?? :? arp協(xié)議?????????? 以太網(wǎng)交換機(jī)? 網(wǎng)卡? 網(wǎng)橋
物理層?????? :? 傳輸電信號(hào)??????? 集線器? 網(wǎng)線?? 光纖
13 路由器與交換機(jī)的區(qū)別:
交換機(jī)的主要功能是組織局域網(wǎng), 經(jīng)過交換機(jī)內(nèi)部處理解析信息之后, 將信息以點(diǎn)對(duì)點(diǎn),點(diǎn)對(duì)多的形式發(fā)給固定端.
路由器的主要功能 : 進(jìn)行跨網(wǎng)段進(jìn)行數(shù)據(jù)傳輸, 路由選擇最佳路徑
ex: 如果你需要將多臺(tái)電腦連接到一根網(wǎng)線, 用交換機(jī)即可
如果你只有一個(gè)外網(wǎng)ip, 但是你有好多臺(tái)電腦需要上網(wǎng), 用路由器即可.
14? socket模塊 介紹
socket是一個(gè)模塊, 又叫套接字, 是介于用戶層與傳輸層之間的抽象層.
15? tcp協(xié)議與udp之間的區(qū)別:
tcp協(xié)議 : 面向連接的,可靠地, 面向字節(jié)流形式的傳輸方式,不允許一個(gè)服務(wù)器與多個(gè)客戶端通信, 出現(xiàn)黏包.
udp協(xié)議 : 不可靠的, 不面向連接的, 面向數(shù)據(jù)報(bào)的傳輸方式, 快.允許一個(gè)服務(wù)器同時(shí)和多個(gè)客戶端通信.
16? tcp協(xié)議的三次握手 與 四次揮手
(tcp協(xié)議通信過程中有一個(gè)ack, 確認(rèn)收到消息的一個(gè)標(biāo)識(shí).)
三次握手 : 一定是客戶端先發(fā)起請(qǐng)求
a : 客戶端發(fā)起請(qǐng)求連接服務(wù)器
b : 客戶端返回 : 接收到請(qǐng)求, 并連接客戶端
c : 客戶端回復(fù): 可以連接
四次揮手:? 誰先發(fā)起斷開連接的請(qǐng)求都o(jì)k
a : 客戶端發(fā)起斷開連接的請(qǐng)求 (我沒有數(shù)據(jù)要發(fā)送了,如果你要有數(shù)據(jù)要發(fā), 我可以繼續(xù)接收.)
b : 服務(wù)器回復(fù) : 我接收到你的請(qǐng)求了
c : 服務(wù)器發(fā)送 : 我已經(jīng)準(zhǔn)備好斷開連接了.
d :客戶端回復(fù) : 收到你的信息, 可以斷開連接了.
17 實(shí)現(xiàn)兩個(gè)數(shù)字的交換的三種方式
1 a,b = b, a
2 c = a a? = b b = c
3 a = a + b, b = b - a, a = a - b
18 什么是黏包, 解決黏包的方案
黏包 : 接收方不知道接收多少數(shù)據(jù), 造成黏包數(shù)據(jù).
解決方案 : 引入了一個(gè)模塊struct, 就是發(fā)送方把一個(gè)數(shù)字打包成一個(gè)四字節(jié)的bytes, 接收方通過還原數(shù)據(jù),這樣就知道接收方可以接收多少數(shù)據(jù)了.
?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/gyh412724/p/9495478.html
總結(jié)
- 上一篇: 关于python文件问题
- 下一篇: [洛谷3121]审查