網(wǎng)絡(luò)編程程序員看網(wǎng)絡(luò)協(xié)議
網(wǎng)絡(luò)協(xié)議是指對(duì)于網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)格式的規(guī)定。對(duì)于網(wǎng)絡(luò)編程初學(xué)者來說,沒有必要深入了解TCP/IP協(xié)議簇,所以對(duì)于初學(xué)者來說去讀大部頭的《TCP/IP協(xié)議》也不是一件很合適的事情,因?yàn)樯钊肓私釺CP/IP協(xié)議是網(wǎng)絡(luò)編程提高階段,也是深入網(wǎng)絡(luò)編程底層時(shí)才需要做的事情。
對(duì)于一般的網(wǎng)絡(luò)編程來說,更多的是關(guān)心網(wǎng)絡(luò)上傳輸?shù)倪壿嫈?shù)據(jù)內(nèi)容,也就是更多的是應(yīng)用層上的網(wǎng)絡(luò)協(xié)議,所以后續(xù)的內(nèi)容均以實(shí)際應(yīng)用的數(shù)據(jù)為基礎(chǔ)來介紹網(wǎng)絡(luò)協(xié)議的概念。
那么什么是網(wǎng)絡(luò)協(xié)議呢,下面看一個(gè)簡(jiǎn)單的例子。春節(jié)晚會(huì)上“小沈陽”和趙本山合作的小品《不差錢》中,小沈陽和趙本山之間就設(shè)計(jì)了一個(gè)協(xié)議,協(xié)議的內(nèi)容為:
如果點(diǎn)的菜價(jià)錢比較貴是,就說沒有。
按照該協(xié)議的規(guī)定,就有了下面的對(duì)話:
趙本山:4斤的龍蝦
小沈陽:(經(jīng)過判斷,得出價(jià)格比較高),沒有
趙本山:鮑魚
小沈陽:(經(jīng)過判斷,得出價(jià)格比較高),沒有
這就是一種雙方達(dá)成的一種協(xié)議約定,其實(shí)這種約定的實(shí)質(zhì)和網(wǎng)絡(luò)協(xié)議的實(shí)質(zhì)是一樣的。網(wǎng)絡(luò)協(xié)議的實(shí)質(zhì)也是客戶端程序和服務(wù)器端程序?qū)τ跀?shù)據(jù)的一種約定,只是由于以計(jì)算機(jī)為基礎(chǔ),所以更多的是使用數(shù)字來代表內(nèi)容,這樣就顯得比較抽象一些。
下面再舉一個(gè)簡(jiǎn)單的例子,介紹一些基礎(chǔ)的網(wǎng)絡(luò)協(xié)議設(shè)計(jì)的知識(shí)。例如需要設(shè)計(jì)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)程序:網(wǎng)絡(luò)計(jì)算器。也就是在客戶端輸入需要計(jì)算的數(shù)字和運(yùn)算符,在服務(wù)器端實(shí)現(xiàn)計(jì)算,并將計(jì)算的結(jié)果反饋給客戶端。在這個(gè)例子中,就需要約定兩個(gè)數(shù)據(jù)格式:客戶端發(fā)送給服務(wù)器端的數(shù)據(jù)格式,以及服務(wù)器端反饋給客戶端的數(shù)據(jù)格式。
可能你覺得這個(gè)比較簡(jiǎn)單,例如客戶端輸入的數(shù)字依次是12和432,輸入的運(yùn)算符是加號(hào),可能最容易想到的數(shù)據(jù)格式是形成字符串“12+432”,這樣格式的確比較容易閱讀,但是服務(wù)器端在進(jìn)行計(jì)算時(shí),邏輯就比較麻煩,因?yàn)樾枰紫炔鸱衷撟址?,然后才能進(jìn)行計(jì)算,所以可用的數(shù)據(jù)格式就有了一下幾種:
“12,432,+” 格式為:第一個(gè)數(shù)字,第二個(gè)數(shù)字,運(yùn)算符
“12,+,432” 格式為:第一個(gè)數(shù)字,運(yùn)算符,第二個(gè)數(shù)字
其實(shí)以上兩種數(shù)據(jù)格式很接近,比較容易閱讀,在服務(wù)器端收到該數(shù)據(jù)格式以后,使用“,”為分隔符分割字符串即可。
假設(shè)對(duì)于運(yùn)算符再進(jìn)行一次約定,例如約定數(shù)字0代表+,1代表減,2代表乘,3代表除,整體格式遵循以上第一種格式,則上面的數(shù)字生產(chǎn)的協(xié)議數(shù)據(jù)為:
“12,432,0”
這就是一種基本的發(fā)送的協(xié)議約定了。
另外一個(gè)需要設(shè)計(jì)的協(xié)議格式就是服務(wù)器端反饋的數(shù)據(jù)格式,其實(shí)服務(wù)器端主要反饋計(jì)算結(jié)果,但是在實(shí)際接受數(shù)據(jù)時(shí),有可能存在格式錯(cuò)誤的情況,這樣就需要簡(jiǎn)單的設(shè)計(jì)一下服務(wù)器端反饋的數(shù)據(jù)格式了。例如規(guī)定,如果發(fā)送的數(shù)據(jù)格式正確,則反饋結(jié)果,否則反饋?zhàn)址?ldquo;錯(cuò)誤”。這樣就有了以下的數(shù)據(jù)格式:
客戶端:“1,111,1” 服務(wù)器端:”-110”
客戶端:“123,23,0” 服務(wù)器端:“146”
客戶端:“1,2,5” 服務(wù)器端:“錯(cuò)誤”
這樣就設(shè)計(jì)出了一種最最基本的網(wǎng)絡(luò)協(xié)議格式,從該示例中可以看出,網(wǎng)絡(luò)協(xié)議就是一種格式上的約定,可以根據(jù)邏輯的需要約定出各種數(shù)據(jù)格式,在進(jìn)行設(shè)計(jì)時(shí)一般遵循“簡(jiǎn)單、通用、容易解析”的原則進(jìn)行。
而對(duì)于復(fù)雜的網(wǎng)絡(luò)程序來說,需要傳輸?shù)臄?shù)據(jù)種類和數(shù)據(jù)量都比較大,這樣只需要依次設(shè)計(jì)出每種情況下的數(shù)據(jù)格式即可,例如QQ程序,在該程序中需要進(jìn)行傳輸?shù)木W(wǎng)絡(luò)數(shù)據(jù)種類很多,那么在設(shè)計(jì)時(shí)就可以遵循:登錄格式、注冊(cè)格式、發(fā)送消息格式等等,一一進(jìn)行設(shè)計(jì)即可。所以對(duì)于復(fù)雜的網(wǎng)絡(luò)程序來說,只是增加了更多的命令格式,在實(shí)際設(shè)計(jì)時(shí)的工作量增加不是太大。
不管怎么說,在網(wǎng)絡(luò)編程中,對(duì)于同一個(gè)網(wǎng)絡(luò)程序來說,一般都會(huì)涉及到兩個(gè)網(wǎng)絡(luò)協(xié)議格式:客戶端發(fā)送數(shù)據(jù)格式和服務(wù)器端反饋數(shù)據(jù)格式,在實(shí)際設(shè)計(jì)時(shí),需要一一對(duì)應(yīng)。這就是最基本的網(wǎng)絡(luò)協(xié)議的知識(shí)。
網(wǎng)絡(luò)協(xié)議設(shè)計(jì)完成以后,在進(jìn)行網(wǎng)絡(luò)編程時(shí),就需要根據(jù)設(shè)計(jì)好的協(xié)議格式,在程序中進(jìn)行對(duì)應(yīng)的編碼了,客戶端程序和服務(wù)器端程序需要進(jìn)行協(xié)議處理的代碼分別如下。
客戶端程序需要完成的處理為:
1、 客戶端發(fā)送協(xié)議格式的生成
2、 服務(wù)器端反饋數(shù)據(jù)格式的解析
服務(wù)器端程序需要完成的處理為:
1、 服務(wù)器端反饋協(xié)議格式的生成
2、 客戶端發(fā)送協(xié)議格式的解析
這里的生成是指將計(jì)算好的數(shù)據(jù),轉(zhuǎn)換成規(guī)定的數(shù)據(jù)格式,這里的解析指,從反饋的數(shù)據(jù)格式中拆分出需要的數(shù)據(jù)。在進(jìn)行對(duì)應(yīng)的代碼編寫時(shí),嚴(yán)格遵循協(xié)議約定即可。
所以,對(duì)于程序員來說,在進(jìn)行網(wǎng)絡(luò)程序編寫時(shí),需要首先根據(jù)邏輯的需要設(shè)計(jì)網(wǎng)絡(luò)協(xié)議格式,然后遵循協(xié)議格式約定進(jìn)行協(xié)議生成和解析代碼的編寫,最后使用網(wǎng)絡(luò)編程技術(shù)實(shí)現(xiàn)整個(gè)網(wǎng)絡(luò)編程的功能。
由于各種網(wǎng)絡(luò)程序使用不同的協(xié)議格式,所以不同網(wǎng)絡(luò)程序的客戶端之間無法通用。
而對(duì)于常見協(xié)議的格式,例如HTTP(Hyper Text Transfer Protocol,超文本傳輸協(xié)議)、FTP(File Transfer Protocol,文件傳輸協(xié)議),SMTP(Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議)等等,都有通用的規(guī)定,具體可以查閱相關(guān)的RFC文檔。
網(wǎng)絡(luò)協(xié)議格式對(duì)于一種網(wǎng)絡(luò)程序來說,是該程序最核心的技術(shù)秘密,因?yàn)橐坏﹨f(xié)議格式泄漏,則任何一個(gè)人都可以根據(jù)該格式進(jìn)行客戶端的編寫,這樣將影響服務(wù)器端的實(shí)現(xiàn),也容易出現(xiàn)一些其它的影響。
【編輯推薦】