1楞卡、簡述 OSI 七層協(xié)議唆樊。
1宛琅、物理層
為數(shù)據(jù)鏈路層提供物理連接,實現(xiàn)比特流的透明傳輸逗旁,所傳輸數(shù)據(jù)的單位是比特嘿辟,該層定義了通信設備與傳輸線接口硬件的電氣、機械以及功能和過程的特性片效。
2红伦、數(shù)據(jù)鏈路層
在通信的實體之間建立數(shù)據(jù)鏈路連接,傳送以幀為單位的數(shù)據(jù)淀衣,通過檢查發(fā)生在連接通信系統(tǒng)間傳送路上的比特錯誤并進行恢復昙读,確保比特序列組成為數(shù)據(jù)流準確無誤地傳送給對方的系統(tǒng)。數(shù)據(jù)鏈路層在相鄰的節(jié)點之間實現(xiàn)透明的高可靠性傳輸舌缤。
3箕戳、網(wǎng)絡層
解決多節(jié)點傳送時的路由選擇、擁擠控制及網(wǎng)絡互連等国撵,控制分組傳送系統(tǒng)的操作陵吸,它的特性對高層是透明的,同時介牙,根據(jù)傳輸層的要求選擇服務質(zhì)量壮虫,并向傳輸層報告未恢復的差錯。
4、傳輸層
為兩個端系統(tǒng)(源站和目標站)的會話層之間建立一條傳輸連接囚似,可靠剩拢、透明地傳送報文,執(zhí)行端一端差錯控制饶唤、順序和流量控制徐伐、管理多路復用等。本層提供建立募狂、維護和拆除傳送連接的功能办素,并保證網(wǎng)絡連接的質(zhì)量。它向高層屏蔽了下層數(shù)據(jù)通信的細節(jié)祸穷,因而是OSI網(wǎng)絡參考模型中最需要的一層性穿。
5、會話層
不參與具體的數(shù)據(jù)傳輸雷滚,但對數(shù)據(jù)傳輸?shù)耐竭M行管理需曾。它主要負責提供兩個進程之間建立、維護和結(jié)束會話連接功能祈远,同時要對進程中必要的信息傳送方式呆万、進程間的同步以及重新同步進行管理。
6绊含、表示層
解決在兩個通信系統(tǒng)中交換信息時不同數(shù)據(jù)格式的編碼之間的轉(zhuǎn)換桑嘶,語法選擇炊汹,數(shù)據(jù)加密與解密及文本壓縮等躬充。
7、應用層
負責向用戶提供各種網(wǎng)絡應用服務讨便,如文件傳輸充甚、電子郵件、遠程訪問等霸褒。把進程中于對方進程通信的部分放入應用實體中伴找,同時,對各種業(yè)務內(nèi)容的通信功能進行管理废菱。
2技矮、什么是C/S和B/S架構(gòu)?
C/S架構(gòu)軟件:
(即客戶機/服務器模式)分為客戶機和服務器兩層:第一層是在客戶機系統(tǒng)上結(jié)合了表示與業(yè)務邏輯殊轴,第二層是通過網(wǎng)絡結(jié)合了數(shù)據(jù)庫服務器衰倦。簡單的說就是第一層是用戶表示層,第二層是數(shù)據(jù)庫層旁理》悖客戶端和服務器直接相連,這兩個組成部分都承擔著重要的角色孽文。
B/S型模式:
即瀏覽器/服務器結(jié)構(gòu)驻襟。它是C/S架構(gòu)的一種改進夺艰,可以說屬于三層C/S架構(gòu)。主要是利用了不斷成熟的WWW瀏覽器技術沉衣,用通用瀏覽器就實現(xiàn)了原來需要復雜專用軟件才能實現(xiàn)的強大功能郁副,并節(jié)約了開發(fā)成本,是一種全新的軟件系統(tǒng)構(gòu)造技術豌习。
3霞势、簡述 三次握手、四次揮手的流程斑鸦。
所謂三次握手(Three-Way Handshake)即建立TCP連接愕贡,就是指建立一個TCP連接時,需要客戶端和服務端總共發(fā)送3個包以確認連接的建立巷屿。在socket編程中固以,這一過程由客戶端執(zhí)行connect來觸發(fā)
第一次握手:
Client將標志位SYN置為1,隨機產(chǎn)生一個值seq=J嘱巾,并將該數(shù)據(jù)包發(fā)送給Server平道,Client進入SYN_SENT狀態(tài),等待Server確認赋咽。
第二次握手:
Server收到數(shù)據(jù)包后由標志位SYN=1知道Client請求建立連接览闰,Server將標志位SYN和ACK都置為1,ack=J+1问拘,隨機產(chǎn)生一個值seq=K遍略,并將該數(shù)據(jù)包發(fā)送給Client以確認連接請求,Server進入SYN_RCVD狀態(tài)骤坐。
第三次握手:
Client收到確認后绪杏,檢查ack是否為J+1,ACK是否為1纽绍,如果正確則將標志位ACK置為1蕾久,ack=K+1,并將該數(shù)據(jù)包發(fā)送給Server拌夏,Server檢查ack是否為K+1僧著,ACK是否為1,如果正確則連接建立成功障簿,Client和Server進入ESTABLISHED狀態(tài)盹愚,完成三次握手,隨后Client與Server之間可以開始傳輸數(shù)據(jù)了卷谈。
所謂四次揮手(Four-Way Wavehand)即終止TCP連接杯拐,就是指斷開一個TCP連接時,需要客戶端和服務端總共發(fā)送4個包以確認連接的斷開。在socket編程中端逼,這一過程由客戶端或服務端任一方執(zhí)行close來觸發(fā)
第一次揮手:
Client發(fā)送一個FIN朗兵,用來關閉Client到Server的數(shù)據(jù)傳送,Client進入FIN_WAIT_1狀態(tài)顶滩。
第二次揮手:
Server收到FIN后余掖,發(fā)送一個ACK給Client,確認序號為收到序號+1(與SYN相同礁鲁,一個FIN占用一個序號)盐欺,Server進入CLOSE_WAIT狀態(tài)。
第三次揮手:
Server發(fā)送一個FIN仅醇,用來關閉Server到Client的數(shù)據(jù)傳送冗美,Server進入LAST_ACK狀態(tài)。
第四次揮手:
Client收到FIN后析二,Client進入TIME_WAIT狀態(tài)粉洼,接著發(fā)送一個ACK給Server,確認序號為收到序號+1叶摄,Server進入CLOSED狀態(tài)属韧,完成四次揮手。
4蛤吓、什么是arp協(xié)議宵喂?
地址解析協(xié)議,即ARP(Address Resolution Protocol)会傲,是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議锅棕。
5、TCP和UDP的區(qū)別唆铐?
1.基于連接與無連接
2.TCP要求系統(tǒng)資源較多哲戚,UDP較少奔滑;
3.UDP程序結(jié)構(gòu)較簡單
4.流模式(TCP)與數(shù)據(jù)報模式(UDP);
5.TCP保證數(shù)據(jù)正確性艾岂,UDP可能丟包
6.TCP保證數(shù)據(jù)順序,UDP不保證
6朋其、什么是局域網(wǎng)和廣域網(wǎng)王浴?
局域網(wǎng)和廣域網(wǎng)是按規(guī)模大小而劃分的兩種計算機網(wǎng)絡。范圍在幾千米以內(nèi)的計算機網(wǎng)絡統(tǒng)稱為局域網(wǎng)梅猿;而連接的范圍超過10千米的氓辣,則稱為廣域網(wǎng),因特網(wǎng)(Intenet)就是目前最大的廣域網(wǎng)袱蚓。
7钞啸、為何基于tcp協(xié)議的通信比基于udp協(xié)議的通信更可靠?
TCP的可靠保證,是它的三次握手雙向機制,這一機制保證校驗了數(shù)據(jù),保證了他的可靠性。而UDP就沒有了,udp信息發(fā)出后,不驗證是否到達對方,所以不可靠体斩。
8梭稚、什么是socket?簡述基于tcp協(xié)議的套接字通信流程絮吵。
Socket是應用層與TCP/IP協(xié)議族通信的中間軟件抽象層弧烤,它是一組接口。在設計模式中蹬敲,Socket其實就是一個門面模式暇昂,它把復雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說伴嗡,一組簡單的接口就是全部急波,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議瘪校。
9幔崖、什么是粘包? socket 中造成粘包的原因是什么渣淤? 哪些情況會發(fā)生粘包現(xiàn)象赏寇?
粘包:
指發(fā)送方發(fā)送的若干包數(shù)據(jù)到接收方接收時粘成一包,從接收緩沖區(qū)看价认,后一包數(shù)據(jù)的頭緊接著前一包數(shù)據(jù)的尾嗅定。出現(xiàn)粘包現(xiàn)象的原因是多方面的,它既可能由發(fā)送方造成用踩,也可能由接收方造成渠退。
socket 中造成粘包的原因:
發(fā)送方引起的粘包是由TCP協(xié)議本身造成的,TCP為提高傳輸效率脐彩,發(fā)送方往往要收集到足夠多的數(shù)據(jù)后才發(fā)送一包數(shù)據(jù)碎乃。若連續(xù)幾次發(fā)送的數(shù)據(jù)都很少,通常TCP會根據(jù)優(yōu)化算法把這些數(shù)據(jù)合成一包后一次發(fā)送出去惠奸,這樣接收方就收到了粘包數(shù)據(jù)梅誓。
哪些情況會發(fā)生粘包現(xiàn)象:
接收方引起的粘包是由于接收方用戶進程不及時接收數(shù)據(jù),從而導致粘包現(xiàn)象佛南。這是因為接收方先把收到的數(shù)據(jù)放在系統(tǒng)接收緩沖區(qū)梗掰,用戶進程從該緩沖區(qū)取數(shù)據(jù),若下一包數(shù)據(jù)到達時前一包數(shù)據(jù)尚未被用戶進程取走嗅回,則下一包數(shù)據(jù)放到系統(tǒng)接收緩沖區(qū)時就接到前一包數(shù)據(jù)之后及穗,而用戶進程根據(jù)預先設定的緩沖區(qū)大小從系統(tǒng)接收緩沖區(qū)取數(shù)據(jù),這樣就一次取到了多包數(shù)據(jù)绵载。分包是指在出現(xiàn)粘包的時候我們的接收方要進行分包處理埂陆。
10苛白、IO多路復用的作用?
I/O多路復用是通過一種機制焚虱,可以監(jiān)視多個描述符丸氛,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作著摔。
11缓窜、什么是防火墻以及作用?
簡單的來說谍咆,防火墻就是一種禾锤,避免你的電腦被黑客入侵的一種防護工具,一種確保網(wǎng)絡安全的方法摹察!
允許網(wǎng)絡管理員定義一個中心點來防止非法用戶進入內(nèi)部網(wǎng)絡恩掷。2.可以很方便地監(jiān)視網(wǎng)絡的安全性,并報警供嚎。3.可以作為部署NAT(Network Address Translation黄娘,網(wǎng)絡地址變換)的地點,利用NAT技術克滴,將有限的IP地址動態(tài)或靜態(tài)地與內(nèi)部的IP地址對應起來逼争,用來緩解地址空間短缺的問題等
12、select劝赔、poll誓焦、epoll 模型的區(qū)別?
(1)select着帽,poll實現(xiàn)需要自己不斷輪詢所有fd集合杂伟,直到設備就緒,期間可能要睡眠和喚醒多次交替仍翰。而epoll其實也需要調(diào)用 epoll_wait不斷輪詢就緒鏈表赫粥,期間也可能多次睡眠和喚醒交替,但是它是設備就緒時予借,調(diào)用回調(diào)函數(shù)越平,把就緒fd放入就緒鏈表中,并喚醒在 epoll_wait中進入睡眠的進程蕾羊。雖然都要睡眠和交替喧笔,但是select和poll在“醒著”的時候要遍歷整個fd集合,而epoll在“醒著”的 時候只要判斷一下就緒鏈表是否為空就行了龟再,這節(jié)省了大量的CPU時間。這就是回調(diào)機制帶來的性能提升尼变。
(2)select利凑,poll每次調(diào)用都要把fd集合從用戶態(tài)往內(nèi)核態(tài)拷貝一次浆劲,并且要把current往設備等待隊列中掛一次,而epoll只要 一次拷貝哀澈,而且把current往等待隊列上掛也只掛一次(在epoll_wait的開始牌借,注意這里的等待隊列并不是設備等待隊列,只是一個epoll內(nèi) 部定義的等待隊列)割按。這也能節(jié)省不少的開銷膨报。
13、簡述 進程适荣、線程现柠、協(xié)程的區(qū)別 以及應用場景?
進程擁有自己的堆和棧弛矛,既不共享堆也不共享棧 進程由操作系統(tǒng)調(diào)度
線程擁有自己的堆和共享的棧 共享棧 但不共享堆 線程也是由操作系統(tǒng)調(diào)度
協(xié)程和線程一樣有自己的堆和共享的棧 共享棧但不共享堆 協(xié)程由開發(fā)人員在適當情況調(diào)用
14够吩、GIL鎖是什么鬼?
GIL:全局解釋器鎖丈氓。當我們用多線程的時候,每一個進程中只有一個GIL鎖,那么這多個線程中誰拿到GIL鎖周循,誰即可以用cpu(ps:多個進程有多個Gil鎖,但每個進程中只有一個GIL)
15万俗、Python中如何使用線程池和進程池湾笛?
進程池:使用multiprocessing.Pool
線程池:使用ThreadPool模塊
16、threading.local的作用闰歪?
threadLocal解決了參數(shù)在一個線程中各個函數(shù)之間相互傳遞的問題
一個threadLocal變量雖然是全局變量迄本,但每個線程都只能讀寫自己線程的獨立副本 互不干擾
17、進程之間如何進行通信课竣?
創(chuàng)建一個queue隊列嘉赎,或使用 from multiprocessing import Manage管理要進行通信的數(shù)據(jù)
18、什么是并發(fā)和并行于樟?
字面理解
并行:好比百米賽跑 槍聲一響 運動員都一起向前沖運動員就好比程序 這個過程是并行
并發(fā):是指兩個或多個事件在同一時間間隔發(fā)生公条。
19、進程鎖和線程鎖的作用迂曲?
當多進程或多線程是不用進程訪問相同一個變量是會造成同一時間執(zhí)行相同的事 而得不到正確的結(jié)果 所以需要用鎖鎖上這個全局變量靶橱,當某一個進程或線程訪問時其他進程或線程均無法訪問
20、解釋什么是異步非阻塞路捧?
異步雙方不需要共同的時鐘关霸,也就是接收方不知道發(fā)送方什么時候發(fā)送,所以在發(fā)送的信息中就要有提示接收方開始接收的信息杰扫,如開始位队寇,同時在結(jié)束時有停止位。
非阻塞模式是指利用socket事件的消息機制章姓,Server端與Client端之間的通信處于異步狀態(tài)佳遣。
21识埋、路由器和交換機的區(qū)別?
路由器是將信息通過ip轉(zhuǎn)發(fā) 交換機是將數(shù)據(jù)傳給下一個
22零渐、什么是域名解析窒舟?
域名解析是把域名指向網(wǎng)站空間IP,讓人們通過注冊的域名可以方便地訪問到網(wǎng)站的一種服務
23诵盼、如何修改本地hosts文件惠豺?
記事本打開C:\Windows\System32\drivers\etc下的hosts文件進行修改
24、生產(chǎn)者消費者模型應用場景及優(yōu)勢风宁?
應用于一個生產(chǎn)數(shù)據(jù)一個處理數(shù)據(jù)的場景
優(yōu)勢生產(chǎn)者和消費者之間不直接進行通信 而是通過一個隊列相當于一個緩沖區(qū)洁墙,平衡了生產(chǎn)者和消費者的處理能力
25、什么是cdn杀糯?
盡可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié)扫俺,使內(nèi)容傳輸?shù)母臁⒏€(wěn)定固翰。通過在網(wǎng)絡各處放置節(jié)點服務器所構(gòu)成的在現(xiàn)有的互聯(lián)網(wǎng)基礎之上的一層智能虛擬網(wǎng)絡狼纬,CDN系統(tǒng)能夠?qū)崟r地根據(jù)網(wǎng)絡流量和各節(jié)點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節(jié)點上骂际。
26疗琉、LVS是什么及作用?
pass
27歉铝、Nginx是什么及作用盈简?
我們可以了解到Nginx是一個http服務器。同效果的http服務器還有Apache太示、tomcat等
作用:
1柠贤、 http服務器。Nginx是一個http服務可以獨立提供http服務类缤【拭悖可以做網(wǎng)頁靜態(tài)服務器。
2餐弱、 虛擬主機宴霸。可以實現(xiàn)在一臺服務器虛擬出多個網(wǎng)站膏蚓。例如個人網(wǎng)站使用的虛擬主機瓢谢。基于端口的驮瞧,不同的端口基于域名的氓扛,不同域名
3、 反向代理剧董,負載均衡幢尚。當網(wǎng)站的訪問量達到一定程度后破停,單臺服務器不能滿足用戶的請求時翅楼,需要用多臺服務器集群可以使用nginx做反向代理尉剩。并且多臺服務器可以平均分擔負載,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況毅臊。
28理茎、keepalived是什么及作用?
pass
29、haproxy是什么以及作用管嬉?
pass/
30皂林、什么是負載均衡?
負載均衡是高可用網(wǎng)絡基礎架構(gòu)的的一個關鍵組成部分蚯撩,有了負載均衡础倍,我們通常可以將我們的應用服務器部署多臺胎挎,然后通過負載均衡將用戶的請求分發(fā)到不同的服務器用來提高網(wǎng)站沟启、應用、數(shù)據(jù)庫或其他服務的性能以及可靠性犹菇。
31德迹、什么是rpc及應用場景?
pass
32揭芍、簡述 asynio模塊的作用和應用場景胳搞。
asyncio是Python 3.4版本引入的標準庫,直接內(nèi)置了對異步IO的支持称杨。
asyncio的編程模型就是一個消息循環(huán)肌毅。我們從asyncio模塊中直接獲取一個EventLoop的引用,然后把需要執(zhí)行的協(xié)程扔到EventLoop中執(zhí)行姑原,就實現(xiàn)了異步IO悬而。
33、簡述 gevent模塊的作用和應用場景页衙。
當一個greenlet遇到IO操作時摊滔,比如訪問網(wǎng)絡,就自動切換到其他的greenlet店乐,等到IO操作完成艰躺,再在適當?shù)臅r候切換回來繼續(xù)執(zhí)行。由于IO操作非常耗時眨八,經(jīng)常使程序處于等待狀態(tài)腺兴,有了gevent為我們自動切換協(xié)程,就保證總有greenlet在運行廉侧,而不是等待IO页响。
由于切換是在IO操作時自動完成篓足,所以gevent需要修改Python自帶的一些標準庫,這一過程在啟動時通過monkey patch完成:
34闰蚕、twisted框架的使用和應用栈拖?
Twisted是用Python實現(xiàn)的基于事件驅(qū)動的網(wǎng)絡引擎框架,Twisted支持許多常見的傳輸及應用層協(xié)議没陡,包括TCP涩哟、UDP、SSL/TLS盼玄、HTTP贴彼、IMAP、SSH埃儿、IRC以及FTP器仗。就像Python一樣,Twisted也具有“內(nèi)置電池”(batteries-included)的特點童番。Twisted對于其支持的所有協(xié)議都帶有客戶端和服務器實現(xiàn)精钮,同時附帶有基于命令行的工具,使得配置和部署產(chǎn)品級的Twisted應用變得非常方便妓盲。