非原創(chuàng)文章,網(wǎng)絡(luò)收集空繁,如遇原作者氢烘,請(qǐng)私聊會(huì)標(biāo)明出處!
1--11
-
tcp協(xié)議中三次握手和四次揮手
建立TCP需要三次握手才能建立家厌,而斷開(kāi)連接則需要四次握手播玖。整個(gè)過(guò)程如下圖所示:
在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù)饭于,采用三次握手建立一個(gè)連接蜀踏。
第一次握手:建立連接時(shí)维蒙,客戶(hù)端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài)果覆,等待服務(wù)器確認(rèn)颅痊;
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶(hù)的SYN(ack=j+1)局待,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k)斑响,即SYN+ACK包憨降,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)楷拳;
第三次握手:客戶(hù)端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)森篷,此包發(fā)送完畢薛耻,客戶(hù)端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài)营罢,完成三次握手。 完成三次握手饼齿,客戶(hù)端與服務(wù)器開(kāi)始傳送數(shù)據(jù).
四次揮手原理:
TCP的終止通過(guò)雙方的四次握手實(shí)現(xiàn)饲漾。發(fā)起終止的一方執(zhí)行主動(dòng)關(guān)閉,響應(yīng)的另一方執(zhí)行被動(dòng)關(guān)閉缕溉。
1.發(fā)起方(client)更改狀態(tài)為FIN_WAIT_1考传,關(guān)閉應(yīng)用程序進(jìn)程,發(fā)出一個(gè)TCP的FIN段证鸥;
2.接收方收到FIN段伙菊,返回一個(gè)帶確認(rèn)序號(hào)的ACK,同時(shí)向自己對(duì)應(yīng)的進(jìn)程發(fā)送一個(gè)文件結(jié)束符EOF敌土,同時(shí)更改狀態(tài)為CLOSE_WAIT(server),發(fā)起方接到ACK后狀態(tài)更改為FIN_WAIT_2(client)运翼;
3.接收方關(guān)閉應(yīng)用程序進(jìn)程返干,更改狀態(tài)為L(zhǎng)AST_ACK(server),并向?qū)Ψ桨l(fā)出一個(gè)TCP的FIN段血淌;
4.發(fā)起方接到FIN后狀態(tài)更改為T(mén)IME_WAIT(client)矩欠,并發(fā)出這個(gè)FIN的ACK確認(rèn)。ACK發(fā)送成功后(2MSL內(nèi))雙方TCP狀態(tài)變?yōu)镃LOSED悠夯。
我們不難看出上面的顯示的結(jié)果的意思癌淮。根據(jù)TCP協(xié)議,主動(dòng)發(fā)起關(guān)閉的一方沦补,會(huì)進(jìn)入TIME_WAIT狀態(tài)(TCP實(shí)現(xiàn)必須可靠地終止連接的兩個(gè)方向(全雙工關(guān)閉))乳蓄,持續(xù)2*MSL(Max Segment Lifetime),缺省為240秒.
第一次揮手:客戶(hù)端A發(fā)送一個(gè)FIN夕膀,用來(lái)關(guān)閉客戶(hù)A到服務(wù)器B的數(shù)據(jù)傳送虚倒;
第二次揮手:服務(wù)器B收到這個(gè)FIN美侦,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1魂奥,和SYN一樣菠剩,一個(gè)FIN將占用一個(gè)序號(hào);
第三次揮手:服務(wù)器B關(guān)閉與客戶(hù)端A的連接耻煤,發(fā)送一個(gè)FIN給客戶(hù)端A具壮;
第四次揮手:客戶(hù)端A發(fā)回ACK報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1哈蝇;
Paste_Image.png -
為什么連接的時(shí)候是三次握手棺妓,關(guān)閉的時(shí)候卻是四次握手?
答:因?yàn)楫?dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后买鸽,可以直接發(fā)送SYN+ACK報(bào)文涧郊。其中ACK報(bào)文是用來(lái)應(yīng)答的,SYN報(bào)文是用來(lái)同步的眼五。但是關(guān)閉連接時(shí)妆艘,當(dāng)Server端收到FIN報(bào)文時(shí),很可能并不會(huì)立即關(guān)閉SOCKET看幼,所以只能先回復(fù)一個(gè)ACK報(bào)文批旺,告訴Client端,"你發(fā)的FIN報(bào)文我收到了"诵姜。只有等到我Server端所有的報(bào)文都發(fā)送完了汽煮,我才能發(fā)送FIN報(bào)文,因此不能一起發(fā)送棚唆。故需要四步握手暇赤。 -
網(wǎng)絡(luò)數(shù)據(jù)包在傳輸過(guò)程中如何防止別人修改?
加密,加校驗(yàn)宵凌,定義完成的傳輸包協(xié)議格式 -
進(jìn)程線(xiàn)程間的通信和同步鞋囊,以及區(qū)別。什么情況下用什么?
線(xiàn)程同步:原子訪問(wèn)瞎惫、臨界區(qū)溜腐、互斥區(qū)、事件瓜喇、信號(hào)量
進(jìn)程同步:互斥區(qū)挺益、事件、信號(hào)量
線(xiàn)程通信:全局變量乘寒、消息
進(jìn)程間通信:管道, 系統(tǒng)IPC(包括消息隊(duì)列,信號(hào)量,共享存儲(chǔ)), SOCKET.
同步方式之間的區(qū)別:
- 1望众、臨界區(qū):通過(guò)對(duì)多線(xiàn)程的串行化來(lái)訪問(wèn)公共資源或一段代碼,速度快,適合控制數(shù)據(jù)訪問(wèn)黍檩。在任意時(shí)刻只允許一個(gè)線(xiàn)程對(duì)共享資源進(jìn)行訪問(wèn)叉袍,如果有多個(gè)線(xiàn)程試圖訪問(wèn)公共資源,那么在有一個(gè)線(xiàn)程進(jìn)入后刽酱,其他試圖訪問(wèn)公共資源的線(xiàn)程將被掛起喳逛,并一直等到進(jìn)入臨界區(qū)的線(xiàn)程離開(kāi),臨界區(qū)在被釋放后棵里,其他線(xiàn)程才可以搶占润文。
- 2、互斥量:采用互斥對(duì)象機(jī)制殿怜。 只有擁有互斥對(duì)象的線(xiàn)程才有訪問(wèn)公共資源的權(quán)限典蝌,因?yàn)榛コ鈱?duì)象只有一個(gè),所以能保證公共資源不會(huì)同時(shí)被多個(gè)線(xiàn)程訪問(wèn)头谜】ハ疲互斥不僅能實(shí)現(xiàn)同一應(yīng)用程序的公共資源安全共享,還能實(shí)現(xiàn)不同應(yīng)用程序的公共資源安全共享 .互斥量比臨界區(qū)復(fù)雜柱告。因?yàn)槭褂没コ獠粌H僅能夠在同一應(yīng)用程序不同線(xiàn)程中實(shí)現(xiàn)資源的安全共享截驮,而且可以在不同應(yīng)用程序的線(xiàn)程之間實(shí)現(xiàn)對(duì)資源的安全共享。
- 3际度、信號(hào)量:它允許多個(gè)線(xiàn)程在同一時(shí)刻訪問(wèn)同一資源葵袭,但是需要限制在同一時(shí)刻訪問(wèn)此資源的最大線(xiàn)程數(shù)目 .信號(hào)量對(duì)象對(duì)線(xiàn)程的同步方式與前面幾種方法不同,信號(hào)允許多個(gè)線(xiàn)程同時(shí)使用共享資源乖菱,這與操作系統(tǒng)中的PV操作相同坡锡。它指出了同時(shí)訪問(wèn)共享資源的線(xiàn)程最大數(shù)目。它允許多個(gè)線(xiàn)程在同一時(shí)刻訪問(wèn)同一資源窒所,但是需要限制在同一時(shí)刻訪問(wèn)此資源的最大線(xiàn)程數(shù)目鹉勒。
- 4、事 件: 通過(guò)通知操作的方式來(lái)保持線(xiàn)程的同步吵取,還可以方便實(shí)現(xiàn)對(duì)多個(gè)線(xiàn)程的優(yōu)先級(jí)比較的操作 .
總結(jié):
1. 互斥量與臨界區(qū)的作用非常相似禽额,但互斥量是可以命名的,也就是說(shuō)它可以跨越進(jìn)程使用海渊。所以創(chuàng)建互斥量需要的資源更多,所以如果只為了在進(jìn)程內(nèi)部是用的話(huà)使用臨界區(qū)會(huì)帶來(lái)速度上的優(yōu)勢(shì)并能夠減少資源占用量哲鸳。因?yàn)榛コ饬渴强邕M(jìn)程的互斥量一旦被創(chuàng)建臣疑,就可以通過(guò)名字打開(kāi)它。
2. 互斥量(Mutex)徙菠,信號(hào)燈(Semaphore)讯沈,事件(Event)都可以被跨越進(jìn)程使用來(lái)進(jìn)行同步數(shù)據(jù)操作,而其他的對(duì)象與數(shù)據(jù)同步操作無(wú)關(guān),但對(duì)于進(jìn)程和線(xiàn)程來(lái)講缺狠,如果進(jìn)程和線(xiàn)程在運(yùn)行狀態(tài)則為無(wú)信號(hào)狀態(tài)问慎,在退出后為有信號(hào)狀態(tài)。所以可以使用WaitForSingleObject來(lái)等待進(jìn)程和線(xiàn)程退出挤茄。
3. 通過(guò)互斥量可以指定資源被獨(dú)占的方式使用如叼,但如果有下面一種情況通過(guò)互斥量就無(wú)法處理,比如現(xiàn)在一位用戶(hù)購(gòu)買(mǎi)了一份三個(gè)并發(fā)訪問(wèn)許可的數(shù)據(jù)庫(kù)系統(tǒng)穷劈,可以根據(jù)用戶(hù)購(gòu)買(mǎi)的訪問(wèn)許可數(shù)量來(lái)決定有多少個(gè)線(xiàn)程/進(jìn)程能同時(shí)進(jìn)行數(shù)據(jù)庫(kù)操作笼恰,這時(shí)候如果利用互斥量就沒(méi)有辦法完成這個(gè)要求,信號(hào)燈對(duì)象可以說(shuō)是一種資源計(jì)數(shù)器歇终。
進(jìn)程間通信方式之間的區(qū)別:
管道分為有名管道和無(wú)名管道社证,無(wú)名管道只能用于親屬進(jìn)程之間的通信,而有名管道則可用于無(wú)親屬關(guān)系的進(jìn)程之間评凝。
消息隊(duì)列用于運(yùn)行于同一臺(tái)機(jī)器上的進(jìn)程間通信追葡,與管道相似;
共享內(nèi)存通常由一個(gè)進(jìn)程創(chuàng)建奕短,其余進(jìn)程對(duì)這塊內(nèi)存區(qū)進(jìn)行讀寫(xiě)宜肉。得到共享內(nèi)存有兩種方式:映射/dev/mem設(shè)備和內(nèi)存映像文件。前一種方式不給系統(tǒng)帶來(lái)額外的開(kāi)銷(xiāo)篡诽,但在現(xiàn)實(shí)中并不常用崖飘,因?yàn)樗刂拼嫒〉氖菍?shí)際的物理內(nèi)存;
1.管道:速度慢杈女,容量有限朱浴,只有父子進(jìn)程能通訊
2.FIFO:任何進(jìn)程間都能通訊,但速度慢
3.消息隊(duì)列:容量受到系統(tǒng)限制达椰,且要注意第一次讀的時(shí)候翰蠢,要考慮上一次沒(méi)有讀完數(shù)據(jù)的問(wèn)題
4.信號(hào)量:不能傳遞復(fù)雜消息,只能用來(lái)同步
5.共享內(nèi)存區(qū):能夠很容易控制容量啰劲,速度快梁沧,但要保持同步,比如一個(gè)進(jìn)程在寫(xiě)的時(shí)候蝇裤,另一個(gè)進(jìn)程要注意讀寫(xiě)的問(wèn)題廷支,相當(dāng)于線(xiàn)程中的線(xiàn)程安全,當(dāng)然栓辜,共享內(nèi)存區(qū)同樣可以用作線(xiàn)程間通訊恋拍,不過(guò)沒(méi)這個(gè)必要,線(xiàn)程間本來(lái)就已經(jīng)共享了同一進(jìn)程內(nèi)的一塊內(nèi)存
-
OSI網(wǎng)絡(luò)分層及工作流程
1.層物理層:主要定義物理設(shè)備標(biāo)準(zhǔn)藕甩,如網(wǎng)線(xiàn)的接口類(lèi)型施敢、光纖的接口類(lèi)型、各種傳輸介質(zhì)的傳輸速率等。它的主要作用是傳輸比特流(就是由1僵娃、0轉(zhuǎn)化為電流強(qiáng)弱來(lái)進(jìn)行傳輸,到達(dá)目的地后在轉(zhuǎn)化為1概作、0,也就是我們常說(shuō)的數(shù)模轉(zhuǎn)換與模數(shù)轉(zhuǎn)換)默怨。這一層的數(shù)據(jù)叫做比特讯榕。
2.層數(shù)據(jù)鏈路層:主要將從物理層接收的數(shù)據(jù)進(jìn)行mac地址(網(wǎng)卡的地址)的封裝與解封裝。常把這一層的數(shù)據(jù)叫做幀先壕。在這一層工作的設(shè)備是交換機(jī)瘩扼,數(shù)據(jù)通過(guò)交換機(jī)來(lái)傳輸。
3.層網(wǎng)絡(luò)層:主要將從下層接收到的數(shù)據(jù)進(jìn)行ip地址(例192.168.0.1)的封裝與解封裝垃僚。在這一層工作的設(shè)備是路由器集绰,常把這一層的數(shù)據(jù)叫做數(shù)據(jù)包。
4.層傳輸層:定義了一些傳輸數(shù)據(jù)的協(xié)議和端口號(hào)(www端口80等)谆棺,如:tcp(傳輸控制協(xié)議栽燕,傳輸效率低,可靠性強(qiáng)改淑,用于傳輸可靠性要求高碍岔,數(shù)據(jù)量大的數(shù)據(jù)),udp(用戶(hù)數(shù)據(jù)報(bào)協(xié)議朵夏,與tcp特性恰恰相反蔼啦,用于傳輸可靠性要求不高,數(shù)據(jù)量小的數(shù)據(jù)仰猖,如qq聊天數(shù)據(jù)就是通過(guò)這種方式傳輸?shù)模?主要是將從下層接收的數(shù)據(jù)進(jìn)行分段和傳輸捏肢,到達(dá)目的地址后再進(jìn)行重組。常常把這一層數(shù)據(jù)叫做段饥侵。
5.會(huì)話(huà)層:通過(guò)傳輸層(端口號(hào):傳輸端口與接收端口)建立數(shù)據(jù)傳輸?shù)耐吠液铡V饕谀愕南到y(tǒng)之間發(fā)起會(huì)話(huà)或者接受會(huì)話(huà)請(qǐng)求(設(shè)備之間需要互相認(rèn)識(shí)可以是ip也可以是mac或者是主機(jī)名)
6.表示層:主要是進(jìn)行對(duì)接收的數(shù)據(jù)進(jìn)行解釋、加密與解密躏升、壓縮與解壓縮等(也就是把計(jì)算機(jī)能夠識(shí)別的東西轉(zhuǎn)換成人能夠能識(shí)別的東西(如圖片辩棒、聲音等)。
7.應(yīng)用層: 主要是一些終端的應(yīng)用膨疏,比如說(shuō)ftp(各種文件下載)一睁,web(ie瀏覽),QQ之類(lèi)的(你就把它理解成我們?cè)陔娔X屏幕上可以看到的東西.就是終端應(yīng)用)佃却。 -
TCP與UDP區(qū)別者吁,什么時(shí)候會(huì)用到UDP?
TCP---傳輸控制協(xié)議,提供的是面向連接双霍、可靠的字節(jié)流服務(wù)砚偶。當(dāng)客戶(hù)和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接洒闸,之后才能傳輸數(shù)據(jù)染坯。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù)丘逸,檢驗(yàn)數(shù)據(jù)单鹿,流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端深纲。
UDP---用戶(hù)數(shù)據(jù)報(bào)協(xié)議仲锄,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性湃鹊,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去儒喊,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶(hù)和服務(wù)器之間建立一個(gè)連接币呵,且沒(méi)有超時(shí)重發(fā)等機(jī)制怀愧,故而傳輸速度很快好好讀下,你會(huì)明白的余赢。
區(qū)別
這兩種傳輸協(xié)議也就是合于適配不同的業(yè)務(wù)和不同的硬件終端芯义。
在使用中,類(lèi)似于圖像妻柒、聲音等對(duì)可靠性要求沒(méi)有那么高的業(yè)務(wù)可以用UDP扛拨,他們不需要準(zhǔn)確存儲(chǔ)對(duì)準(zhǔn)確性無(wú)要求但要求速度快。
類(lèi)似于文本举塔、程序绑警、文件等要求可靠的數(shù)據(jù)最好就用TCP,但會(huì)犧牲一些速度啤贩。
對(duì)系統(tǒng)資源的要求:TCP較多待秃,UDP少。
程序結(jié)構(gòu):UDP程序結(jié)構(gòu)較簡(jiǎn)單痹屹,TCP復(fù)雜章郁。
流模式與數(shù)據(jù)報(bào)模式:TCP保證數(shù)據(jù)正確性,UDP可能丟包; TCP保證數(shù)據(jù)順序志衍,UDP不保證 - **什么是完成端口暖庄?完成端口是怎么實(shí)現(xiàn)的? **
I/O完成端口是應(yīng)用程序使用線(xiàn)程池處理異步I/O請(qǐng)求的一種機(jī)制楼肪。處理多個(gè)并發(fā)異步I/O請(qǐng)求時(shí)培廓,使用I/O完成端口比在I/O請(qǐng)求時(shí)創(chuàng)建線(xiàn)程更快更有效。
1.創(chuàng)建完成端口對(duì)象
使用完成端口模型春叫,首先要調(diào)用CreateIoCompletionPort函數(shù)創(chuàng)建一個(gè)完成端口對(duì)象肩钠,Winsock將使用這個(gè)對(duì)象為任意數(shù)量的套接字句柄管理I/O請(qǐng)求泣港。
2.I/O服務(wù)線(xiàn)程和完成端口
成功創(chuàng)建完成端口對(duì)象之后,便可以向這個(gè)對(duì)象關(guān)聯(lián)套接字句柄了价匠。在關(guān)聯(lián)套接字之前当纱,需要先創(chuàng)建一個(gè)或者多個(gè)工作線(xiàn)程(稱(chēng)為I/O服務(wù)線(xiàn)程),在完成端口上執(zhí)行并處理投遞到完成端口上的I/O請(qǐng)求踩窖。這里的關(guān)鍵問(wèn)題是要?jiǎng)?chuàng)建多少個(gè)工作線(xiàn)程坡氯。要注意,創(chuàng)建完成端口時(shí)指定的線(xiàn)程數(shù)量和這里要?jiǎng)?chuàng)建的線(xiàn)程數(shù)量不是一回事洋腮。前面我們推薦線(xiàn)程數(shù)量為處理器的數(shù)量箫柳,以避免上下文切換。CreateIoCompletionPort 函數(shù)的NumberOfConcurrentThreads參數(shù)明確告訴系統(tǒng)允許在完成端口上同時(shí)運(yùn)行的線(xiàn)程數(shù)量啥供。如果創(chuàng)建的線(xiàn)程多于NumberOfConcurrent Threads悯恍,也就僅有NumberOfConcurrentThreads個(gè)線(xiàn)程允許運(yùn)行。但是有的時(shí)候伙狐,確實(shí)需要?jiǎng)?chuàng)建更多的線(xiàn)程坪稽,這主要取決于程序的總體設(shè)計(jì)。如果某個(gè)線(xiàn)程調(diào)用了一個(gè)函數(shù)鳞骤,如Sleep或WaitForSingleObject窒百,進(jìn)入了暫停狀態(tài),多出來(lái)的線(xiàn)程中就會(huì)有一個(gè)開(kāi)始運(yùn)行豫尽,占據(jù)休眠線(xiàn)程的位置篙梢。總而言之美旧,我們總是希望在完成端口上參加I/O處理工作的線(xiàn)程和CreateIoCompletionPort函數(shù)指定的線(xiàn)程一樣多渤滞。最后的結(jié)論是,如果你覺(jué)得工作線(xiàn)程會(huì)遇到阻塞(進(jìn)入暫停狀態(tài))榴嗅,那就應(yīng)該創(chuàng)建比CreateIoCompletionPort指定的數(shù)量還要多的線(xiàn)程妄呕。
有了足夠的工作線(xiàn)程來(lái)處理完成端口上的I/O請(qǐng)求之后,就該為完成端口關(guān)聯(lián)套接字句柄了嗽测,這就用到了CreateIoCompletionPort函數(shù)的前3個(gè)參數(shù)绪励。
l FileHandle 要關(guān)聯(lián)的套接字句柄
l ExistingCompletionPort 上面創(chuàng)建的完成端口對(duì)象句柄
l CompletionKey 指定一個(gè)句柄唯一(per-handle)數(shù)據(jù),它將與FileHandle套接字句柄 關(guān)聯(lián)在一起唠粥。應(yīng)用程序可以在此存儲(chǔ)任意類(lèi)型的信息疏魏,通常是一個(gè)指針
CompletionKey參數(shù)通常用來(lái)描述與套接字相關(guān)的信息,所以稱(chēng)它為句柄唯一(per-handle)數(shù)據(jù)晤愧。在后面的例子代碼中大莫,可以看到它的作用。
3.完成端口和重疊I/O
向完成端口關(guān)聯(lián)套接字句柄之后官份,便可以通過(guò)在套接字上投遞重疊發(fā)送和接收請(qǐng)求處理I/O了只厘。在這些I/O操作完成時(shí)烙丛,I/O系統(tǒng)會(huì)向完成端口對(duì)象發(fā)送一個(gè)完成通知封包。I/O完成端口以先進(jìn)先出的方式為這些封包排隊(duì)羔味。應(yīng)用程序使用GetQueuedCompletionStatus函數(shù)可以取得這些隊(duì)列中的封包蜀变。這個(gè)函數(shù)應(yīng)該在處理完成對(duì)象I/O的服務(wù)線(xiàn)程中調(diào)用。 -
死鎖是什么介评?
所謂死鎖: 是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,由于競(jìng)爭(zhēng)資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象爬舰,若無(wú)外力作用们陆,它們都將無(wú)法推進(jìn)下去。此時(shí)稱(chēng)系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖情屹,這些永遠(yuǎn)在互相等待的進(jìn)程稱(chēng)為死鎖進(jìn)程坪仇。 -
怎么解決網(wǎng)絡(luò)項(xiàng)目中多線(xiàn)程的問(wèn)題?
一般在網(wǎng)絡(luò)應(yīng)用程序中使用多線(xiàn)程的地方非常多垃你!
以多線(xiàn)程來(lái)提高效率的場(chǎng)景一般在 CPU 計(jì)算型椅文,而不是在 IO 讀寫(xiě)型。CPU 可以會(huì)有多個(gè)核心并行處理計(jì)算惜颇,但是磁盤(pán) IO 就沒(méi)這功能了皆刺,磁頭只有一個(gè),根本不可能靠多線(xiàn)程提高效率凌摄!一般來(lái)說(shuō)羡蛾,磁盤(pán) IO 的并發(fā)能力為 0,也就是說(shuō)無(wú)法支持并發(fā)锨亏!網(wǎng)絡(luò) IO 的話(huà)由于帶寬的限制的痴怨,使用多線(xiàn)程處理最多也只能達(dá)到帶寬的極值。對(duì)于磁盤(pán) IO 來(lái)說(shuō)器予,多線(xiàn)程可以用于一個(gè)線(xiàn)程專(zhuān)門(mén)用于讀寫(xiě)文件浪藻,其他的線(xiàn)程用于對(duì)讀取數(shù)據(jù)進(jìn)行處理,這樣才有可能更好地利用 CPU 資源乾翔。如果僅僅是單純的文件復(fù)制爱葵,使用多線(xiàn)程操作的話(huà),會(huì)使用磁頭在磁盤(pán)上不停地進(jìn)行尋道操作反浓,使得效率更為低下钧惧! - 五種socket網(wǎng)絡(luò)模型區(qū)別
- 一.Select模型: 輪詢(xún)fd_set集合
利用select函數(shù),實(shí)現(xiàn)對(duì)I/O 的管理勾习。最初設(shè)計(jì)該模型時(shí)浓瞪,主要面向的是某些使用UNIX操作系統(tǒng)的計(jì)算機(jī),它們采用的是Berkeley套接字方案巧婶。Select模型已集成到 Winsock 1.1中乾颁,它使那些想避免在套接字調(diào)用過(guò)程中被無(wú)辜“鎖定”的應(yīng)用程序涂乌,采取一種有序的方式,同時(shí)進(jìn)行對(duì)多個(gè)套接字的管理 - 二.異步選擇
應(yīng)用程序可以在一個(gè)套接字上接收以WINDOWS消息為基礎(chǔ)的網(wǎng)絡(luò)事件通知英岭。該模型的實(shí)現(xiàn)方法是通過(guò)調(diào)用WSAAsynSelect函數(shù) 自動(dòng)將套接字設(shè)置為非阻塞模式湾盒,并向WINDOWS注冊(cè)一個(gè)或多個(gè)網(wǎng)絡(luò)時(shí)間,并提供一個(gè)通知時(shí)使用的窗口句柄诅妹。當(dāng)注冊(cè)的事件發(fā)生時(shí)罚勾,對(duì)應(yīng)的窗口將收到一個(gè)基于消息的通知。 - 三.事件選擇
Winsock 提供了另一個(gè)有用的異步I/O模型吭狡。和WSAAsyncSelect模型類(lèi)似的是尖殃,它也允許應(yīng)用程序在一個(gè)或多個(gè)套接字上,接收以事件為基礎(chǔ)的網(wǎng)絡(luò)事件通知划煮。
基本思想是將每個(gè)套接字都和一個(gè)WSAEVENT對(duì)象對(duì)應(yīng)起來(lái)送丰,并且在關(guān)聯(lián)的時(shí)候指定需要關(guān)注的哪些網(wǎng)絡(luò)事件。一旦在某個(gè)套接字上發(fā)生了我們關(guān)注的事件(FD_READ和FD_CLOSE)弛秋,與之相關(guān)聯(lián)的WSAEVENT對(duì)象被Signaled器躏。 - 四.重疊I/O模型
readfile或者writefile的調(diào)用馬上就會(huì)返回,這時(shí)候你可以去做你要做的事蟹略,系統(tǒng)會(huì)自動(dòng)替你完成readfile或者writefile,在你調(diào)用了readfile或者writefile后登失,你繼續(xù)做你的事,系統(tǒng)同時(shí)也幫你完成readfile或writefile的操作挖炬,這就是所謂的重疊壁畸。
1.用事件通知方式實(shí)現(xiàn)的重疊I/O模型
異步I/O函數(shù)WSARecv。在調(diào)用WSARecv時(shí)茅茂,指定一個(gè) WSAOVERLAPPED結(jié)構(gòu)捏萍,這個(gè)調(diào)用不是阻塞的,也就是說(shuō)空闲,它會(huì)立刻返回令杈。一旦有數(shù)據(jù)到達(dá)的時(shí)候,被指定的WSAOVERLAPPED結(jié)構(gòu)中的 hEvent被Signaled碴倾。使得與該套接字相關(guān)聯(lián)的WSAEVENT對(duì)象也被Signaled逗噩,所以WSAWaitForMultipleEvents的調(diào)用操作成功返回。
2.用完成例程方式實(shí)現(xiàn)的重疊I/O模型
WSARecv時(shí)傳遞CompletionROUTINE指針跌榔,回調(diào)函數(shù)异雁,當(dāng)IO請(qǐng)求完成時(shí)調(diào)用該回調(diào)函數(shù)完成我們需要處理的工作,在這個(gè)模型中僧须,主線(xiàn)程只用不停的接受連接即可纲刀;輔助線(xiàn)程判斷有沒(méi)有新的客戶(hù)端連接被建立,如果有担平,就為那個(gè)客戶(hù)端套接字激活一個(gè)異步的WSARecv操作示绊,然后調(diào)用SleepEx使線(xiàn)程處于一種可警告的等待狀態(tài)锭部,以使得I/O完成后 CompletionROUTINE可以被內(nèi)核調(diào)用。如果輔助線(xiàn)程不調(diào)用SleepEx面褐,則內(nèi)核在完成一次I/O操作后拌禾,無(wú)法調(diào)用完成例程(因?yàn)橥瓿衫痰倪\(yùn)行應(yīng)該和當(dāng)初激活WSARecv異步操作的代碼在同一個(gè)線(xiàn)程之內(nèi))。
五.完成端口模型
只有在你的應(yīng)用程序需要同時(shí)管理數(shù)百乃至上千個(gè)套接字的時(shí)候展哭,而且希望隨著系統(tǒng)內(nèi)安裝的CPU數(shù)量的增多湃窍,應(yīng)用程序的性能也可以線(xiàn)性提升,才應(yīng)考慮采用“完成端口”模型匪傍。
完成端口內(nèi)部提供了線(xiàn)程池的管理您市,可以避免反復(fù)創(chuàng)建線(xiàn)程的開(kāi)銷(xiāo),同時(shí)可以根據(jù)CPU的個(gè)數(shù)靈活的決定線(xiàn)程個(gè)數(shù)析恢,而且可以讓減少線(xiàn)程調(diào)度的次數(shù)從而提高性能。
11--20
- **CPU兩個(gè)指令集的區(qū)別 **
(1)CISC指令集
CISC指令集秧饮,也稱(chēng)為復(fù)雜指令集映挂,英文名是CISC,(Complex Instruction Set Computer的縮寫(xiě))盗尸。在CISC微處理器中柑船,程序的各條指令是按順序串行執(zhí)行的,每條指令中的各個(gè)操作也是按順序串行執(zhí)行的泼各。順序執(zhí)行的優(yōu)點(diǎn)是控制簡(jiǎn)單鞍时,但計(jì)算機(jī)各部分的利用率不高,執(zhí)行速度慢扣蜻。其實(shí)它是英特爾生產(chǎn)的x86系列(也就是IA-32架構(gòu))CPU及其兼容CPU逆巍,如AMD、VIA的莽使。即使是現(xiàn)在新起的X86-64(也被成AMD64)都是屬于CISC的范疇锐极。
(2)RISC指令集
RISC是英文“Reduced Instruction Set Computing ” 的縮寫(xiě)芳肌,中文意思是“精簡(jiǎn)指令集”灵再。它是在CISC指令系統(tǒng)基礎(chǔ)上發(fā)展起來(lái)的,有人對(duì)CISC機(jī)進(jìn)行測(cè)試表明亿笤,各種指令的使用頻度相當(dāng)懸殊翎迁,最常使用的是一些比較簡(jiǎn)單的指令,它們僅占指令總數(shù)的20%净薛,但在程序中出現(xiàn)的頻度卻占80%汪榔。復(fù)雜的指令系統(tǒng)必然增加微處理器的復(fù)雜性,使處理器的研制時(shí)間長(zhǎng)肃拜,成本高揍异。并且復(fù)雜指令需要復(fù)雜的操作全陨,必然會(huì)降低計(jì)算機(jī)的速度≈灾溃基于上述原因辱姨,20世紀(jì)80年代RISC型CPU誕生了,相對(duì)于CISC型CPU ,RISC型CPU不僅精簡(jiǎn)了指令系統(tǒng)戚嗅,還采用了一種叫做“超標(biāo)量和超流水線(xiàn)結(jié)構(gòu)”雨涛,大大增加了并行處理能力。RISC指令集是高性能CPU的發(fā)展方向懦胞。它與傳統(tǒng)的CISC(復(fù)雜指令集)相對(duì)替久。相比而言,RISC的指令格式統(tǒng)一躏尉,種類(lèi)比較少蚯根,尋址方式也比復(fù)雜指令集少。當(dāng)然處理速度就提高很多了胀糜。目前在中高檔服務(wù)器中普遍采用這一指令系統(tǒng)的CPU颅拦,特別是高檔服務(wù)器全都采用RISC指令系統(tǒng)的CPU。RISC指令系統(tǒng)更加適合高檔服務(wù)器的操作系統(tǒng)UNIX教藻,現(xiàn)在Linux也屬于類(lèi)似UNIX的操作系統(tǒng)距帅。RISC型CPU與Intel和AMD的CPU在軟件和硬件上都不兼容。 -
為什么多線(xiàn)程能提高效率括堤?
對(duì)單CPU, 即采用多線(xiàn)程不會(huì)提高程序的執(zhí)行速度碌秸,反而會(huì)降低速度,但是對(duì)于用戶(hù)來(lái)說(shuō)悄窃,可以減少用戶(hù)的響應(yīng)時(shí)間讥电。
對(duì)于多CPU或者CPU采用超線(xiàn)程技術(shù), 能更高效的提高系統(tǒng)內(nèi)多個(gè)程序間并發(fā)執(zhí)行的程度。 -
TCP流量控制的方法轧抗?
1.利用滑動(dòng)窗口實(shí)現(xiàn)流量控制
如果發(fā)送方把數(shù)據(jù)發(fā)送得過(guò)快允趟,接收方可能會(huì)來(lái)不及接收,這就會(huì)造成數(shù)據(jù)的丟失鸦致。所謂流量控制就是讓發(fā)送方的發(fā)送速率不要太快潮剪,要讓接收方來(lái)得及接收。
利用滑動(dòng)窗口機(jī)制可以很方便地在TCP連接上實(shí)現(xiàn)對(duì)發(fā)送方的流量控制分唾。
設(shè)A向B發(fā)送數(shù)據(jù)抗碰。在連接建立時(shí),B告訴了A:“我的接收窗口是 rwnd = 400 ”(這里的 rwnd 表示 receiver window) 绽乔。因此弧蝇,發(fā)送方的發(fā)送窗口不能超過(guò)接收方給出的接收窗口的數(shù)值。請(qǐng)注意,TCP的窗口單位是字節(jié)看疗,不是報(bào)文段沙峻。TCP連接建立時(shí)的窗口協(xié)商過(guò)程在圖中沒(méi)有顯示出來(lái)。再設(shè)每一個(gè)報(bào)文段為100字節(jié)長(zhǎng)两芳,而數(shù)據(jù)報(bào)文段序號(hào)的初始值設(shè)為1摔寨。大寫(xiě)ACK表示首部中的確認(rèn)位ACK,小寫(xiě)ack表示確認(rèn)字段的值ack怖辆。
2.必須考慮傳輸速率
可以用不同的機(jī)制來(lái)控制TCP報(bào)文段的發(fā)送時(shí)機(jī)是复。如: <1>. TCP維持一個(gè)變量,它等于最大報(bào)文段長(zhǎng)度MSS竖螃。只要緩存中存放的數(shù)據(jù)達(dá)到MSS字節(jié)時(shí)淑廊,就組裝成一個(gè)TCP報(bào)文段發(fā)送出去。<2>. 由發(fā)送方的應(yīng)用進(jìn)程指明要求發(fā)送報(bào)文段特咆,即TCP支持的推送( push )操作季惩。<3>. 發(fā)送方的一個(gè)計(jì)時(shí)器期限到了,這時(shí)就把已有的緩存數(shù)據(jù)裝入報(bào)文段(但長(zhǎng)度不能超過(guò)MSS)發(fā)送出去腻格。
Nagle算法:若發(fā)送應(yīng)用進(jìn)程把要發(fā)送的數(shù)據(jù)逐個(gè)字節(jié)地送到TCP的發(fā)送緩存画拾,則發(fā)送方就把第一個(gè)數(shù)據(jù)字節(jié)先發(fā)送出去,把后面到達(dá)的數(shù)據(jù)字節(jié)都緩存起來(lái)荒叶。當(dāng)發(fā)送方接收對(duì)第一個(gè)數(shù)據(jù)字符的確認(rèn)后碾阁,再把發(fā)送緩存中的所有數(shù)據(jù)組裝成一個(gè)報(bào)文段再發(fā)送出去输虱,同時(shí)繼續(xù)對(duì)隨后到達(dá)的數(shù)據(jù)進(jìn)行緩存些楣。只有在收到對(duì)前一個(gè)報(bào)文段的確認(rèn)后才繼續(xù)發(fā)送下一個(gè)報(bào)文段。當(dāng)數(shù)據(jù)到達(dá)較快而網(wǎng)絡(luò)速率較慢時(shí)宪睹,用這樣的方法可明顯地減少所用的網(wǎng)絡(luò)帶寬愁茁。Nagle算法還規(guī)定:當(dāng)?shù)竭_(dá)的數(shù)據(jù)已達(dá)到 發(fā)送窗口大小的一半或已達(dá)到報(bào)文段的最大長(zhǎng)度時(shí),就立即發(fā)送一個(gè)報(bào)文段亭病。
另鹅很,糊涂窗口綜合證: TCP接收方的緩存已滿(mǎn),而交互式的應(yīng)用進(jìn)程一次只從接收緩存中讀取1字節(jié)(這樣就使接收緩存空間僅騰出1字節(jié))罪帖,然后向發(fā)送方發(fā)送確認(rèn)促煮,并把窗口設(shè)置為1個(gè)字節(jié)(但發(fā)送的數(shù)據(jù)報(bào)為40字節(jié)的的話(huà))。接收整袁,發(fā)送方又發(fā)來(lái)1個(gè)字節(jié)的數(shù)據(jù)(發(fā)送方的IP數(shù)據(jù)報(bào)是41字節(jié))菠齿。接收方發(fā)回確認(rèn),仍然將窗口設(shè)置為1個(gè)字節(jié)坐昙。這樣绳匀,網(wǎng)絡(luò)的效率很低。要解決這個(gè)問(wèn)題,可讓接收方等待一段時(shí)間疾棵,使得或者接收緩存已有足夠空間容納一個(gè)最長(zhǎng)的報(bào)文段戈钢,或者等到接收方緩存已有一半空閑的空間。只要出現(xiàn)這兩種情況是尔,接收方就發(fā)回確認(rèn)報(bào)文殉了,并向發(fā)送方通知當(dāng)前的窗口大小。此外嗜历,發(fā)送方也不要發(fā)送太小的報(bào)文段宣渗,而是把數(shù)據(jù)報(bào)積累成足夠大的報(bào)文段,或達(dá)到接收方緩存的空間的一半大小梨州。
Paste_Image.png
從圖中可以看出痕囱,B進(jìn)行了三次流量控制。第一次把窗口減少到 rwnd = 300 暴匠,第二次又減到了 rwnd = 100 鞍恢,最后減到 rwnd = 0 ,即不允許發(fā)送方再發(fā)送數(shù)據(jù)了每窖。這種使發(fā)送方暫停發(fā)送的狀態(tài)將持續(xù)到主機(jī)B重新發(fā)出一個(gè)新的窗口值為止帮掉。B向A發(fā)送的三個(gè)報(bào)文段都設(shè)置了 ACK = 1 ,只有在ACK=1時(shí)確認(rèn)號(hào)字段才有意義窒典。
TCP為每一個(gè)連接設(shè)有一個(gè)持續(xù)計(jì)時(shí)器(persistence timer)蟆炊。只要TCP連接的一方收到對(duì)方的零窗口通知,就啟動(dòng)持續(xù)計(jì)時(shí)器瀑志。若持續(xù)計(jì)時(shí)器設(shè)置的時(shí)間到期涩搓,就發(fā)送一個(gè)零窗口控測(cè)報(bào)文段(攜1字節(jié)的數(shù)據(jù)),那么收到這個(gè)報(bào)文段的一方就重新設(shè)置持續(xù)計(jì)時(shí)器劈猪。
-
Select 模型的限制昧甘?
1.那個(gè)最大的連接數(shù)是指每一個(gè)線(xiàn)程可以處理的連接數(shù),當(dāng)你有多個(gè)線(xiàn)程時(shí)战得,連接數(shù)是可以無(wú)限增長(zhǎng)的逮矛,不過(guò)此時(shí)的效率就比較低渤刃。
2.阻塞模型 -
線(xiàn)程池原理
多線(xiàn)程技術(shù)主要解決處理器單元內(nèi)多個(gè)線(xiàn)程執(zhí)行的問(wèn)題,它可以顯著減少處理器單元的閑置時(shí)間,增加處理器單元的吞吐能力仲吏。先啟動(dòng)若干數(shù)量的線(xiàn)程摧阅,并讓這些線(xiàn)程都處于睡眠狀態(tài)顽腾,當(dāng)客戶(hù)端有一個(gè)新請(qǐng)求時(shí)啄踊,就會(huì)喚醒線(xiàn)程池中的某一個(gè)睡眠線(xiàn)程,讓它來(lái)處理客戶(hù)端的這個(gè)請(qǐng)求杀捻,當(dāng)處理完這個(gè)請(qǐng)求后井厌,線(xiàn)程又處于睡眠狀態(tài)蚓庭。 -
IPV6 與IPV4相比較,它的優(yōu)勢(shì)仅仆?
IPv6是“Internet Protocol Version 6”的縮寫(xiě)器赞,它是IETF設(shè)計(jì)的用于替代現(xiàn)行版本IP協(xié)議-IPv4-的下一代IP協(xié)議。
特點(diǎn)
∧拱荨(1)IPV6地址長(zhǎng)度為128比特港柜,地址空間增大了2的96次方倍;
】劝瘛(2)靈活的IP報(bào)文頭部格式夏醉。使用一系列固定格式的擴(kuò)展頭部取代了IPV4中可變長(zhǎng)度的選項(xiàng)字段。IPV6中選項(xiàng)部分的出現(xiàn)方式也有所變化涌韩,使路由器可以簡(jiǎn)單路過(guò)選項(xiàng)而不做任何處理畔柔,加快了報(bào)文處理速度。
〕加!(3)IPV6簡(jiǎn)化了報(bào)文頭部格式靶擦,字段只有7個(gè),加快報(bào)文轉(zhuǎn)發(fā)雇毫,提高了吞吐量玄捕;
(4)提高安全性棚放。身份認(rèn)證和隱私權(quán)是IPV6的關(guān)鍵特性枚粘。
(5)支持更多的服務(wù)類(lèi)型飘蚯;加入了對(duì)自動(dòng)配置的支持馍迄。這是對(duì)DHCP協(xié)議的改進(jìn)和擴(kuò)展,使得網(wǎng)絡(luò)(尤其是局域網(wǎng))的管理更加方便和快捷孝冒。
〖硪Α(6)允許協(xié)議繼續(xù)演變拟杉,增加新的功能庄涡,使之適應(yīng)未來(lái)技術(shù)的發(fā)展。 -
多進(jìn)程模型與多線(xiàn)程模型的區(qū)別
多進(jìn)程模型
構(gòu)造并發(fā)最簡(jiǎn)單的就是使用進(jìn)程搬设,像fork函數(shù)穴店。例如,一個(gè)并發(fā)服務(wù)器拿穴,在父進(jìn)程中接受客戶(hù)端連接請(qǐng)求泣洞,然后創(chuàng)建一個(gè)新的子進(jìn)程來(lái)為每個(gè)新客戶(hù)端提供服務(wù)。
- 多進(jìn)程優(yōu)點(diǎn):
每個(gè)進(jìn)程互相獨(dú)立默色,不影響主程序的穩(wěn)定性球凰,子進(jìn)程崩潰沒(méi)關(guān)系;
通過(guò)增加CPU,就可以容易擴(kuò)充性能呕诉;
可以盡量減少線(xiàn)程加鎖/解鎖的影響缘厢,極大提高性能,就算是線(xiàn)程運(yùn)行的模塊算法效率低也沒(méi)關(guān)系甩挫;
每個(gè)子進(jìn)程都有2GB地址空間和相關(guān)資源贴硫,總體能夠達(dá)到的性能上限非常大 - 多進(jìn)程缺點(diǎn):
邏輯控制復(fù)雜,需要和主程序交互伊者;
需要跨進(jìn)程邊界英遭,如果有大數(shù)據(jù)量傳送,就不太好亦渗,適合小數(shù)據(jù)量傳送挖诸、密集運(yùn)算
多進(jìn)程調(diào)度開(kāi)銷(xiāo)比較大; - 多線(xiàn)程模型
每個(gè)線(xiàn)程都有自己的線(xiàn)程上下文法精,包括一個(gè)線(xiàn)程ID税灌、棧、棧指針亿虽、程序計(jì)數(shù)器菱涤、通用目的寄存器和條件碼。所有的運(yùn)行在一個(gè)進(jìn)程里的線(xiàn)程共享該進(jìn)程的整個(gè)虛擬地址空間洛勉。由于線(xiàn)程運(yùn)行在單一進(jìn)程中粘秆,因此共享這個(gè)進(jìn)程虛擬地址空間的整個(gè)內(nèi)容,包括它的代碼收毫、數(shù)據(jù)攻走、堆、共享庫(kù)和打開(kāi)的文件此再。
線(xiàn)程執(zhí)行的模型:線(xiàn)程和進(jìn)程的執(zhí)行模型有些相似昔搂,每個(gè)進(jìn)程的聲明周期都是一個(gè)線(xiàn)程,我們稱(chēng)之為主線(xiàn)程输拇。線(xiàn)程是對(duì)等的摘符,主線(xiàn)程跟其他線(xiàn)程的區(qū)別就是它先執(zhí)行。 - 多線(xiàn)程的優(yōu)點(diǎn) :
無(wú)需跨進(jìn)程邊界策吠;
程序邏輯和控制方式簡(jiǎn)單逛裤;
所有線(xiàn)程可以直接共享內(nèi)存和變量等;
線(xiàn)程方式消耗的總資源比進(jìn)程方式好猴抹; - 多線(xiàn)程缺點(diǎn) :
每個(gè)線(xiàn)程與主程序共用地址空間带族,受限于2GB地址空間;
線(xiàn)程之間的同步和加鎖控制比較麻煩蟀给;
一個(gè)線(xiàn)程的崩潰可能影響到整個(gè)程序的穩(wěn)定性蝙砌;
到達(dá)一定的線(xiàn)程數(shù)程度后阳堕,即使再增加CPU也無(wú)法提高性能,例如Windows Server 2003择克,大約是1500個(gè)左右的線(xiàn)程數(shù)就快到極限了(線(xiàn)程堆棧設(shè)定為1M)嘱丢,如果設(shè)定線(xiàn)程堆棧為2M,還達(dá)不到1500個(gè)線(xiàn)程總數(shù)祠饺;
線(xiàn)程能夠提高的總性能有限越驻,而且線(xiàn)程多了之后,線(xiàn)程本身的調(diào)度也是一個(gè)麻煩事兒道偷,需要消耗較多的CPU缀旁。
-
應(yīng)用層常用的協(xié)議,請(qǐng)舉例
①遠(yuǎn)程登錄協(xié)議(Telnet);
②文件傳送協(xié)議(file transfer protocol,ftp);
③簡(jiǎn)單郵件傳送協(xié)議(simple mail ttransfer protocol,smtp);
④域名系統(tǒng)(domain name system,dns);
⑤簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(simple network management protocol,snmp);
⑥超文本傳送協(xié)議(hyper text transfer protocol,http).①遠(yuǎn)程登錄協(xié)議(Telnet);
②文件傳送協(xié)議(file transfer protocol,ftp);
③簡(jiǎn)單郵件傳送協(xié)議(simple mail ttransfer protocol,smtp);
④域名系統(tǒng)(domain name system,dns);
⑤簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(simple network management protocol,snmp);
⑥超文本傳送協(xié)議(hyper text transfer protocol,http). -
http的端口號(hào)勺鸦,范圍有多大
80 端口號(hào)的范圍為0-65535 -
IP在哪層并巍,它的作用是什么?
IP 工作在網(wǎng)絡(luò)層
IP是英文Internet Protocol的縮寫(xiě)换途,意思是“網(wǎng)絡(luò)之間互連的協(xié)議”懊渡,也就是為計(jì)算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計(jì)的協(xié)議。在因特網(wǎng)中军拟,它是能使連接到網(wǎng)上的所有計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)相互通信的一套規(guī)則剃执,規(guī)定了計(jì)算機(jī)在因特網(wǎng)上進(jìn)行通信時(shí)應(yīng)當(dāng)遵守的規(guī)則。任何廠家生產(chǎn)的計(jì)算機(jī)系統(tǒng)懈息,只要遵守IP協(xié)議就可以與因特網(wǎng)互連互通肾档。正是因?yàn)橛辛薎P協(xié)議,因特網(wǎng)才得以迅速發(fā)展成為世界上最大的辫继、開(kāi)放的計(jì)算機(jī)通信網(wǎng)絡(luò)怒见。因此,IP協(xié)議也可以叫做“因特網(wǎng)協(xié)議”姑宽。
21--28
-
路由器和交換機(jī)的區(qū)別
(1)工作層次不同 最初的的交換機(jī)是工作在OSI/RM開(kāi)放體系結(jié)構(gòu)的數(shù)據(jù)鏈路層遣耍,也就是第二層,而路由器一開(kāi)始就設(shè)計(jì)工作在OSI模型的網(wǎng)絡(luò)層炮车。由于交換機(jī)工作在OSI的第二層(數(shù)據(jù)鏈路層)舵变,所以它的工作原理比較簡(jiǎn)單,而路由器工作在OSI的第三層(網(wǎng)絡(luò)層)示血,可以得到更多的協(xié)議信息棋傍,路由器可以做出更加智能的轉(zhuǎn)發(fā)決策救拉。
(2)數(shù)據(jù)轉(zhuǎn)發(fā)所依據(jù)的對(duì)象不同 交換機(jī)是利用物理地址或者說(shuō)MAC地址來(lái)確定轉(zhuǎn)發(fā)數(shù)據(jù)的目的地址难审。而路由器則是利用不同網(wǎng)絡(luò)的ID號(hào)(即IP地址)來(lái)確定數(shù)據(jù)轉(zhuǎn)發(fā)的地址。IP地址是在軟件中實(shí)現(xiàn)的亿絮,描述的是設(shè)備所在的網(wǎng)絡(luò)告喊,有時(shí)這些第三層的地址也稱(chēng)為協(xié)議地址或者網(wǎng)絡(luò)地址麸拄。MAC地址通常是硬件自帶的,由網(wǎng)卡生產(chǎn)商來(lái)分配的黔姜,而且已經(jīng)固化到了網(wǎng)卡中去拢切,一般來(lái)說(shuō)是不可更改的。而IP地址則通常由網(wǎng)絡(luò)管理員或系統(tǒng)自動(dòng)分配秆吵。
(3)傳統(tǒng)的交換機(jī)只能分割沖突域淮椰,不能分割廣播域;而路由器可以分割廣播域
由交換機(jī)連接的網(wǎng)段仍屬于同一個(gè)廣播域纳寂,廣播數(shù)據(jù)包會(huì)在交換機(jī)連接的所有網(wǎng)段上傳播主穗,在某些情況下會(huì)導(dǎo)致通信擁擠和安全漏洞。連接到路由器上的網(wǎng)段會(huì)被分配成不同的廣播域毙芜,廣播數(shù)據(jù)不會(huì)穿過(guò)路由器忽媒。雖然第三層以上交換機(jī)具有VLAN功能,也可以分割廣播域腋粥,但是各子廣播域之間是不能通信交流的晦雨,它們之間的交流仍然需要路由器。
(4)路由器提供了防火墻的服務(wù) 路由器僅僅轉(zhuǎn)發(fā)特定地址的數(shù)據(jù)包隘冲,不傳送不支持路由協(xié)議的數(shù)據(jù)包傳送和未知目標(biāo)網(wǎng)絡(luò)數(shù)據(jù)包的傳送闹瞧,從而可以防止廣播風(fēng)暴。 -
B/S模式和C/S模式是什么展辞,各自的優(yōu)缺點(diǎn)
C/S結(jié)構(gòu)在技術(shù)上很成熟夹抗,它的主要特點(diǎn)是交互性強(qiáng)、具有安全的存取模式纵竖、網(wǎng)絡(luò)通信量低漠烧、響應(yīng)速度快、利于處理大量數(shù)據(jù)靡砌。但是該結(jié)構(gòu)的程序是針對(duì)性開(kāi)發(fā)已脓,變更不夠靈活,維護(hù)和管理的難度較大通殃。通常只局限于企業(yè)內(nèi)部網(wǎng)度液。并且,由于該結(jié)構(gòu)的每臺(tái)客戶(hù)機(jī)都需要安裝相應(yīng)的客戶(hù)端程序画舌,分布功能弱且兼容性差堕担,不能實(shí)現(xiàn)快速部署安裝和配置,因此缺少通用性曲聂,具有較大的局限性霹购。要求具有一定專(zhuān)業(yè)水準(zhǔn)的技術(shù)人員去完成。
B/S結(jié)構(gòu)的主要特點(diǎn)是分布性強(qiáng)朋腋、維護(hù)方便齐疙、開(kāi)發(fā)簡(jiǎn)單且共享性強(qiáng)膜楷、總體擁有成本低。但數(shù)據(jù)安全性問(wèn)題贞奋、對(duì)服務(wù)器要求過(guò)高赌厅、數(shù)據(jù)傳輸速度慢、軟件的個(gè)性化特點(diǎn)明顯降低轿塔,這些缺點(diǎn)是有目共睹的特愿,難以實(shí)現(xiàn)傳統(tǒng)模式下的特殊功能要求。例如通過(guò)瀏覽器進(jìn)行大量的數(shù)據(jù)輸入或進(jìn)行報(bào)表的應(yīng)答勾缭、專(zhuān)用性打印輸出都比較困難和不便洽议。此外,實(shí)現(xiàn)復(fù)雜的應(yīng)用構(gòu)造有較大的困難漫拭。雖然可以用ActiveX亚兄、Java等技術(shù)開(kāi)發(fā)較為復(fù)雜的應(yīng)用,但是相對(duì)于發(fā)展已非常成熟C/S的一系列應(yīng)用工具來(lái)說(shuō)采驻,這些技術(shù)的開(kāi)發(fā)復(fù)雜审胚,并沒(méi)有完全成熟的技術(shù)工具供使用。 -
網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層
第一礼旅、數(shù)據(jù)鏈路層是向該層用戶(hù)提供透明的和可靠的數(shù)據(jù)傳送基本服務(wù)膳叨,為網(wǎng)絡(luò)層提供數(shù)據(jù)傳送服務(wù)的,這種服務(wù)要依靠本層具備的功能來(lái)實(shí)現(xiàn)。
鏈路層應(yīng)具備如下功能:
1痘系、 鏈路連接的建立,拆除,分離.
2菲嘴、 幀定界和幀同步.鏈路層的數(shù)據(jù)傳輸單元是幀,協(xié)議不同,幀的長(zhǎng)短和界面也有差別,但
無(wú)論如何必須對(duì)幀進(jìn)行定界.
3、 順序控制,指對(duì)幀的收發(fā)順序的控制.
4汰翠、 差錯(cuò)檢測(cè)和恢復(fù)龄坪。還有鏈路標(biāo)識(shí),流量控制等等.差錯(cuò)檢測(cè)多用方陣碼校驗(yàn)和循環(huán)碼校
驗(yàn)來(lái)檢測(cè)信道上數(shù)據(jù)的誤碼,而幀丟失等用序號(hào)檢測(cè).各種錯(cuò)誤的恢復(fù)則常靠反饋重發(fā)
技術(shù)來(lái)完成.
第二复唤、網(wǎng)絡(luò)層的作用是實(shí)現(xiàn)兩個(gè)端系統(tǒng)之間的數(shù)據(jù)透明傳送健田,具體功能包括尋址和路由選擇、連接的建立佛纫、保持和終止等妓局。它提供的服務(wù)使傳輸層不需要了解網(wǎng)絡(luò)中的數(shù)據(jù)傳輸和交換技術(shù)。通過(guò)網(wǎng)絡(luò)連接交換傳輸層發(fā)出的實(shí)體數(shù)據(jù)呈宇。交換過(guò)程中好爬,選擇合適的傳輸路徑,解決網(wǎng)絡(luò)中出現(xiàn)的局部擁擠或全面的阻塞甥啄。此外存炮,網(wǎng)絡(luò)層還應(yīng)有記賬功能,一邊通過(guò)網(wǎng)絡(luò)中交換的分組或字符數(shù)、位數(shù)收取費(fèi)用僵蛛。 -
socket編程中的阻塞與非阻塞的區(qū)別
阻塞:一般的I/O操作可以在新建的流中運(yùn)用.在服務(wù)器回應(yīng)前它等待客戶(hù)端發(fā)送一個(gè)空白的行.當(dāng)會(huì)話(huà)結(jié)束時(shí),服務(wù)器關(guān)閉流和客戶(hù)端socket.如果在隊(duì)列中沒(méi)有請(qǐng)示將會(huì)出現(xiàn)什么情況呢?那個(gè)方法將會(huì)等待一個(gè)的到來(lái).這個(gè)行為叫阻塞.accept()方法將會(huì)阻塞服務(wù)器線(xiàn)程直到一個(gè)呼叫到來(lái).當(dāng)5個(gè)連接處理完閉之后,服務(wù)器退出.任何的在隊(duì)列中的呼叫將會(huì)被取消.
非阻塞:非阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡(luò)調(diào)用時(shí)尚蝌,不管是否執(zhí)行成功迎变,都立即返回充尉。比如調(diào)用recv()函數(shù)讀取網(wǎng)絡(luò)緩沖區(qū)中數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回衣形,而不會(huì)一直掛在此函數(shù)調(diào)用上驼侠。在實(shí)際Windows網(wǎng)絡(luò)通信軟件開(kāi)發(fā)中,異步非阻塞套接字是用的最多的谆吴。平常所說(shuō)的C/S(客戶(hù)端/服務(wù)器)結(jié)構(gòu)的軟件就是異步非阻塞模式的倒源。 -
網(wǎng)絡(luò)數(shù)據(jù)包的包頭有什么
協(xié)議頭、IP頭句狼、LLC頭笋熬、MAC頭 - **文件傳輸中斷點(diǎn)續(xù)傳 **
假如把一個(gè)文件夾當(dāng)成一個(gè)文件,你要把這個(gè)文件夾從A機(jī)拷貝到B機(jī)腻菇,你會(huì)怎么做胳螟?顯然是你要知道拷貝了多少個(gè)文件,還剩多少個(gè)文件筹吐。socket傳輸也是一樣的道理糖耸,如果你傳輸一個(gè)文件這個(gè)文件有10個(gè)字節(jié),開(kāi)始你傳輸了1個(gè)字節(jié)丘薛,如果服務(wù)器是受到一個(gè)字節(jié)就寫(xiě)一個(gè)字節(jié)到文件嘉竟,則你知道把這個(gè)位置給記下來(lái),下次從這個(gè)位置開(kāi)始傳就可以了洋侨。 -
內(nèi)存體系結(jié)構(gòu)舍扰?為什么是4G
32位的進(jìn)程,虛擬地址空間大小為4GB希坚。每個(gè)進(jìn)程都有自己的地址空間妥粟,其中線(xiàn)程在運(yùn)行時(shí),只能訪問(wèn)屬于該進(jìn)程的內(nèi)存吏够。線(xiàn)程沒(méi)有權(quán)限訪問(wèn)其他進(jìn)行的地址空間勾给。
為什么32位OS只能用到4G內(nèi)存呢?這和計(jì)算機(jī)的地址空間有關(guān)锅知。對(duì)于32位的地址空間播急,大小為2的32次方,也就是從Ox00000000~OxFFFFFFFF 共計(jì) 4294967296 字節(jié)售睹,即4GB桩警。如果你的計(jì)算機(jī)操作系統(tǒng)是32位地址,那么可到達(dá)的物理空間只有4GB昌妹,這也就是為什么32位操作系統(tǒng)的最高可利用內(nèi)存只有4GB了捶枢。 -
shutdown和close的區(qū)別
1 close把描述字的引用計(jì)數(shù)減1握截,僅在該計(jì)數(shù)變?yōu)?的時(shí)候才關(guān)閉套接口。而使用shutdown可以不管引用計(jì)數(shù)的值是多少就激發(fā)TCP的正常連接終止序列烂叔,也即是發(fā)送FIN節(jié)谨胞。
2 close終止數(shù)據(jù)傳送的兩個(gè)方向:讀和寫(xiě)。而有的時(shí)候只是想關(guān)閉讀或?qū)懰饧Γ敲创藭r(shí)就使用shutdown函數(shù)進(jìn)行關(guān)閉套接口描述字某一方向的操作胯努。