我感覺現在計算機網路間通信可以通過編程手段來實現很多功能呀。
比如像email傳輸,現在的網路中真的使用SMTP協議了嗎?難道不可以通過TCP協議(socket編程),然後通過編程手段來實現郵件的發送和接受嗎。
再比如FTP協議,雖說現在確實有FTP應用,那麼百度雲或者QQ群文件共享這種也不需要FTP協議吧(如果需要的話請幫忙指出並改正)。
所以我想知道的就是,計算機網路中的協議到底都是在什麼場合下使用的。
一開始的時候是稱為「協議」,當時的環境是不同公司的產品互相不互通,最有名的就是TCP/IP誕生的起源,據說阿帕網ARPR最初誕生,就是因為當時美國海陸空三軍,分別採用的是Honeywell,DEC,IBM的電腦,當時計算機網路初期,每一家公司都是自己有網路可以互通的,但是不同公司的通信標準不同,所以就要做一個跨越公司自己的標準的通信協議,所以就有了TCP/IP協議(看中興的對話系列書裡面說的)。IP層的匯聚性和兼容性也就這裡很好的看出來。所以這也是為什麼我們稱呼網路協議這個說法 ,其實協議就是字面意思,是不同家公司,為了互通,而達成的某種妥協的標準。現在網路協議的含義更近似於標準,實際上是由很多家公司或者組織集體設立的,其他人遵從就行了。
至於這裡提的問題,在目前而言,是TCP/IP底層這張網已經統一了,所以點與點的互通性問題解決後,很多事情是可以通過socket直接思路來考慮的。而早期,實際上將近千禧年吧,之前網路底層的互通性都不是單純的TCP/IP,包含SDH,ATM,等等,各種各樣的協議都有。所以有的路由層面要搞兼容性,甚至到應用層面還要針對於底層的兼容性,或者延遲之類的參數做調節,所以不是單純的僅僅是為了實現功能。我記得一開始在推SDN的時候,Nick老師的課件裡面說給OSPF的一個示例,一個協議至少100多頁吧,裡面OSPF核心演算法就十幾頁,其餘大部分的內容實際上和兼容性的關係都不小。所以協議不是單純的功能,協議更如同其名字一樣,是一種不同標準或者不同策略的妥協,所以協議這個名字描述還是挺妥當的。
現在而言,計算機網路高速發展,所以網路協議實際上開始更偏重於本身功能,而且各種各樣解耦合了許多次,相比原來的各種兼容開銷,現在是越來越少了,所以網路效率也越來越高。
題主在生活中籤過協議嗎?
肯定簽過,因為你打開知乎的時候,它就要求你同意一個用戶服務協議。
協議,就是規範了雙方,或者多方行為的一種方式,你應該做什麼,對方應該做什麼。
計算機網路,以及所有計算機科學範圍內,幾乎所有需要約束兩方及多方行為的場景里,就會設計一個協議出來。舉例子么就很簡單,挑個最常見的,就BGP吧。
BGP協議實際上就是對一台路由器運行BGP程序去和別的路由器建立鄰居,交換路由,以及從路由中選擇最優的注入路由表這些行為,做了規範和約束,大家都得遵守,誰不遵守BGP,誰的BGP就沒辦法和別人的一起用,網路自然就無法連接起來。
每個協議都很複雜,展開來講都很長,絕不是舉舉例子就能說明白的。
我最近總是回答一些沒人回答的問題……感覺不會再愛了。一條條講題主的想法吧。
太長不看版:當你想實現某個功能,而某協議只要你按照某些步驟去做就能實現這個功能,那麼你按照這些步驟做,這個協議就這樣被你用了。
我感覺現在計算機網路間通信可以通過編程手段來實現很多功能呀。
是的,你是對的。那些協議的實現,那一堆什麼ftp客戶端啥的,都是這麼做的。你通過編程手段來實現功能,就是在實現一個自己設計的網路協議。
比如像email傳輸,現在的網路中真的使用SMTP協議了嗎?難道不可以通過TCP協議(socket編程),然後通過編程手段來實現郵件的發送和接受嗎。
是的,現在的網路真的使用了SMTP協議來發郵件。
當然可以了!但是計算機領域有句名言,叫做「不要重複造輪子」。SMTP協議幾十年前就被用來做email傳輸了,客戶端和服務端要怎麼做在RFC821文檔規定得清清楚楚,其相關的實現,庫,服務端軟體,客戶端軟體何其多也,到底SMTP哪方面不合您的意了,非要另起爐灶自己實現郵件的發送和接收?
所謂網路協議,只是計算機之間為了能夠正常通信而達成的一個個約定而已。現在我們經常用的那些網路協議,就是以前一幫專家覺得,計算機網路通信需要這麼一個功能,為了實現這個功能,我們應該發送什麼數據,接收到的數據怎麼解析,怎麼根據這些數據和周圍環境進行相應的動作,設計好了之後形成文檔,放出一份RFC到網際網路上,讓大家都討論一下。大家覺得好,有意義,可實現,整個過程能達到功能需求,大家一起用這個文檔所述的方式來實現這個功能需求,於是就成了大家都遵守的網路協議。
而你現在想通過編程手段來實現這一功能,你會怎麼做?不還是想應該發送什麼數據,接收到的數據怎麼解析,怎麼根據這些數據和周圍環境進行相應的動作嗎?那麼其實你自己就設計了一套網路協議,不過只有你自己用,只有安裝了支持你自己設計協議的軟體的計算機之間才能用你的協議來做電子郵件傳輸。用來做個計算機網路編程作業還是可以的,但是實際情況下,有一個很成熟的方案在這裡,直接拿來用,它不香嗎?
再比如FTP協議,雖說現在確實有FTP應用,那麼百度雲或者QQ群文件共享這種也不需要FTP協議吧(如果需要的話請幫忙指出並改正)。
據我了解,它們應該沒用FTP協議。為什麼不用FTP協議呢?因為文件傳輸這個需求,別的協議也能幹,比如HTTP協議。你在網頁上傳文件,就用的HTTP協議。另外,百度雲和QQ群文件之類的可能有些FTP不能滿足的需求,比如加密傳輸啊,P2P加速啊,那麼只好選擇用能滿足需求的協議了,甚至得自己做一套協議。
所以我想知道的就是,計算機網路中的協議到底都是在什麼場合下使用的。
網路協議就是為了能夠滿足某一個功能需求,制定出來的一套計算機之間進行數據交換的規則和約定。SMTP是簡單郵件傳輸協議,所以在需要滿足傳輸電子郵件需求的場景下,我們就可以用SMTP。FTP是文件傳輸協議,所以在需要滿足傳輸文件需求的場景下,我們就可以用FTP。HTTP是超文本傳輸協議,文件是一種超文本,所以我們也可以用HTTP來滿足傳輸文件的要求。
我自己通過編程手段來實現A功能的那段代碼,又稱我自己開發的能實現A功能的網路協議實現,取個名字,比如myTP,那麼myTP就可以用在需要A功能的場合。
另外,網路協議並不全是你拿什麼socket編程就能完成的。socket是TCP協議里的一個概念,因此你只能用它來設計實現一些基於TCP的應用層協議。像什麼用來讓連到網路里的計算機能夠順利地相互傳遞消息的IP協議啊,什麼讓手機能夠解析出空氣中特定電磁波信號里的網路數據的WiFi協議(IEEE 802.11)啊,socket編程就無能為力了。
計算機網路協議現實生活中,無處不在。幾乎所有網路通信都是用計算機網路協議。
現想中計算網路協議一共七層網路協議。