網際網路,更一般的是tcp/ip網路為應用程式提供兩個運輸層協議,即udp和tcp。當乙個軟體開發者為英特網建立乙個新的應用時,首先要做出的決定就是,選擇使用tcp協議還是udp協議。每個協議為呼叫他們的應用程式提供了不同的服務集合。
tcp服務模型包括面向連線服務和可靠資料傳輸服務。當某個應用程式呼叫tcp作為其運輸協議時,該程式就能獲得來自tcp的兩種服務:面向連線的服務、可靠的資料傳送服務。
面向連線的服務:在應用層資料報文開始流之前,tcp讓客戶和伺服器互相交換運輸層控制資訊。。這個所謂的握手過程提醒客戶和伺服器,讓他們為大量的分組的到來做好準備 。在握手階段後,乙個tcp連線就在兩個程序的套接字之間建立了。這條連線是全雙工的,即連線雙方的程序可以在此連線上同時進行報文收發。當應用程式結束報文傳送時,必須拆除該連線。
可靠的資料傳送服務:通訊程序能夠依靠tcp,無差錯、按適當順序交付所有傳送的資料。當應用程式的一端將位元組流傳進套接字時,它能夠依靠tcp將相同的位元組流交付給接收方的套接字,而沒有位元組的丟失與冗餘。
tcp協議還具有擁賽控制機制,這種服務不一定能能夠為通訊程序帶來直接的好處,但能為英特網帶來整體的好處。當傳送方和接受方之間的網路出現擁塞時,tcp的擁塞控制機制會抑制傳送程序(客戶或服務端),tcp擁塞控制機制會試圖限制每個tcp連線,使他們達到公平共享網路頻寬的目的。
udp是一種不提供必要服務的輕量級運輸協議,他僅提供最小服務。udp是無連線的。因此在兩個程序通訊前沒有握手過程。udp協議提供一種不可靠資料傳送服務,也就是說,當程序將乙個報文傳送進udp套接字時,udp協議並不保證該報文將到達接收程序。不僅如,到達接受程序的報文也可能時亂序到達的。
udp沒有包括擁塞控制機制,所以udp的傳送端可以用它選定的任何速率向其下層(網路層)注入資料。(然而,值得注意的是實際端到端吞吐量可能小於該速率,這可能是因為中間鏈路的頻寬受限或因為擁塞而造成的)
無論tcp還是udp都沒有提供任何加密機制,這就是說傳送程序傳進其套接字的資料,與經網路傳送到目的的程序資料相同。因此,舉例來說如果某傳送程序以明文方式(既沒有加密)傳送了乙個口令進入它的套接字,該明文口令將經過傳送方與接收方之間的所有鏈路傳送,這就可能任何中間鏈路被嗅探和發現。因為隱私和其他安全問題對許多應用而言已經成為至關重要的問題,所以英特網已經研製了tcp的加強版,稱為安全套接字層。用ssl加強後的tcp不僅能夠做傳統的tcp所能做的切(看來在計算機領域,傳統就意味著落後),而且提供理了關鍵的程序到程序的安全性服務,包括加密、資料完整性和端點鑑別。我們強調ssl不是與tcp和udp在相同層次上的第三種英特網運輸協議,而是一種對tcp的加強,這種強化是在應用層上實現的。特別是,如果乙個應用程式使用ssl的服務,他需要在該應用程式的客戶端和服務端包括ssl**(利用現有的、高度優化的庫和類)。ssl有它自己的套接字api,這類似於傳統的tcp套接字api。當乙個應用使用ssl時,傳送程序向ssl套接字傳遞明文資料:在傳送主機中的ssl則加密該資料並將加密的資料傳遞給tcp套接字。加密的資料經英特網傳送到接收程序中的tcp套接字。該接收套接字將加密資料傳遞給ssl,由其解密。
總結,ssl就是相當於在tcp的模組之上增加的乙個負責資料加密於解密的子模組。
----------人們總是在最後緊要的關頭顯示出不耐煩的情緒。而正是緊要的時候,越是要有十足的耐心與良好的心境。正是修行時--------------------
讀書筆記 之五
筆者的話 接觸硬體較少,很多術語都是字面翻譯,讀者請見諒.我盡量帶上英文原詞,避免歧義.2.2 磁碟驅動器元件 磁碟驅動器使用快速移動的臂來在大唱片一樣的覆蓋著小磁粒的碟片上讀寫資料的.資料從磁碟片上通過r w頭傳輸到計算機中.多個碟片,讀寫頭和控制器被組合在一起,通常這被稱為是硬碟驅動器 hard...
讀書筆記之C delegate
c 的使用主要在 需要將乙個方法當做引數傳遞到另乙個方法時。比如啟動乙個執行緒執行任務,而這個執行緒要執行的方法可以通過 傳遞過來。包括乙個方法或者多個方法的位址和c 的函式指標很相似,但它是型別安全的。1.宣告 delegate void intmethodinvoker int x 這個 可以引...
讀書筆記之 Effective STL
條款3 使容器裡物件的拷貝操作輕量而正確 stl中採用的都是拷貝物件的方式 如果所有這些使stl的拷貝機制聽起來很瘋狂,就請重新想想。是,stl進行了大量拷貝,但它通常設計為避免不必要的物件拷貝,實際上,它也被實現為避免不必要的物件拷貝。和c和c 內建容器的行為做個對比,下面的陣列 widget w...