1.程序通訊的方式
2.套接字在通訊中的作用
3.程序的定址方式
4.應用層協議
你每執行乙個程式,都會有程序產生,可能是乙個,也可能是多個。如果它只能自己乙個人封閉孤單的執行,那就太無趣了。人大多數都想與朋友攀談交流,程序也是如此。那麼它們是如何做到的呢?
如果同一主機上執行的程序想互相通訊,它們可以通過程序間通訊機制來完成,這種機制是由作業系統提供的,就像是自己家鄉的方言,同為老鄉,交流自然沒有任何問題了。那麼問題來了,如果我想離開家鄉,外出闖蕩,與在不同主機上執行的程序通訊該怎麼辦呢?俗話說,在家講方言,在外說普通話。不同主機上執行的程序要對話,當然要用大家都明白的方式——訊息交換,來進行了。不然讓乙個用win方言的程序與乙個用macos方言的程序見面時相互說自家方言,豈不讓人貽笑大方。那麼訊息交換是通過什麼來進行的呢?答案是:套接字。
套接字=socket
程序間通訊是利用socket傳送/接受訊息來實現的。
從圖中不難看出,套接字相當於乙個公用的中間語言,讓不同的主機可以順利通話。要讓套接字可以成功的做個好翻譯,傳輸基礎設施需向程序提供相應的api,供其使用。這裡就要涉及到傳輸協議的選擇和相應引數的設定。我們暫不細說。
不同主機上執行的程序如何相互識別,你可能會說簡單啊!每台主機不是都有ip嗎?順著ip去找不就行了嗎?那門問題又來了,如果你的qq想與你女朋友的qq對話,可當資訊依據你女朋友的ip位址傳過去時,卻發現你的女朋友又開了乙個可以接受網路資訊的程序——lol客服端。那麼,你的資訊到底傳給哪個程序呢?那你肯定會說傳給qq的網路程序啊,那到底哪個才是qq的網路程序呢?對!這裡我們還需要將相關程序標識一下,讓別的程序傳送的資訊可以順利到達目的程序。這就是我們所說的程序的識別符號(不同主機上的程序相互通訊,必須要有這個東西)。識別符號由ip位址和埠號(port number)組成。主機上的不同程序都會被分配相應的埠號,就像每戶人家都被分配門牌號一樣。比如說:http server的埠號為:80,mail sever的埠號為:25。
沒有規矩,不成方圓。網路應用要想正常通訊,必須要有好的協議來規範通訊才行。網路應用要遵循應用層協議。應用層協議可分為公開協議和私有協議。公開協議由rfc(request for comments)定義,允許互操作,如http、smtp等。私有協議多數是p2p檔案共享應用,都開發公司自己制定,非公開。
應用層協議主要是用來規範那些方面的呢?
a.訊息的型別(type):請求訊息,響應訊息。(你必須知道對面是什麼,才能做好萬無一失的準備)
b.訊息的語法(syntax)/格式:訊息中有哪些字段,每個字段如何描述。
c.欄位的語義(semantics):欄位中資訊的含義。
d.規則(rules):程序何時傳送/響應訊息等。
最後,讓我們用http協議作為例子,結束這篇文章:
計算機網路2 網路應用
一些概念 rtt round trip time 從客服端傳送乙個很小的資料報到伺服器並返回所經歷的時間 響應時間 response time 發起,建立tcp連線 1個rtt 總傳輸時間 2rtt 檔案傳送時間 網路應用間的通訊 定址概念 使用協議 http 預設埠 80 http的鏈結型別 ht...
計算機網路 06 網路應用
方案2 集中伺服器儲存,所有對映儲存在同乙個地方,所有查詢請求都 到該伺服器,缺點是單點失效,可擴充套件性,節點到伺服器的距離 所以需要分布式 層次化的系統 dns設計 網域名稱到位址的對映查詢,層次化 分布式的網域名稱空間儲存和管理 根伺服器 頂級網域名稱伺服器 權威伺服器依次降低 根伺服器一共就...
計算機網路 程序通訊
乙個程序可以被認為是乙個執行在端系統中的乙個程式,當程式執行在相同的端系統上時,它們使用程序間通訊機制相互通訊。程序間通訊的規則由執行在端系統上的作業系統確定。當程式執行在不同的端系統上時,需要通過計算機網路交換報文而相互通訊。傳送程序生成並向網路中傳送報文 接收程序接收這些報文並可能通過將報文傳送...