1. 程式人生 > >tcp協議是面向連線的,而http是無狀態的,面向連線和無狀態怎麼感覺好像優點矛盾呢?

tcp協議是面向連線的,而http是無狀態的,面向連線和無狀態怎麼感覺好像優點矛盾呢?

 不矛盾,一個是面向連結的,一個是無連線的。面向連結的可靠些,無連線的就不那麼可靠。主要是因為這兩個協議所處的層不一樣。網際網路的設計者認為,使用者層應是簡單的,直接的。所以無連線的設計能夠簡化裝置的成本,利於網際網路的開放式發展。網路的各個接入點和SP他們因為要處理來自使用者的資料,所以將複雜的裝置和可靠的協議放在這裡。也是合乎情理的。 回答者: jolux - 魔法師 五級 12-25 16:40 你玩網路遊戲連線時一直存在的,下線了就馬上斷開了。
但http因為最開始設計的時候,為了讀網頁用,網頁取到了你可能花個10分鐘來讀它,所以這10分鐘連線是沒有必要的,所以馬上就斷開了(節省伺服器端資源)。所以使用者是否還在瀏覽它的網頁服務端不知道,因此就出現了cookie,session這類東西來彌補
為什麼不用udp,首先用udp是為了提高效率,但是tcp已經很高效了,沒必要用udp,而且udp容易出錯(比方說你下載一個驅動,但是如果資料是壞的有可能損壞你的系統)
回答者: paranoid945 - 助理 二級 12-26 14:42 TCP的面向連線是傳輸層的,而HTTP的無狀態則是應用層的
傳統TCP應用主要面向專用系統,這種環境中客戶端的數目是有限的,意味者伺服器最多開幾十個服務程序修行了,而客戶端與伺服器需要連續地交換資料,頻繁地連線和斷開對兩端都難以接受
HTTP協議產生於網際網路,因此伺服器需要處理同時面向全世界數十萬、上百萬客戶端的網頁訪問,但每個客戶端(即瀏覽器)與伺服器之間交換資料的間歇性較大(即傳輸具有突發性、瞬時性),並且網頁瀏覽的聯想性、發散性導致兩次傳送的資料關聯性很低,如果按照上面的方式則需要在伺服器端開的程序和控制代碼數目都是不可接受的,象paranoid945所說的,大部分通道實際上會很空閒、無端佔用資源。因此HTTP的設計者有意利用這種特點將協議設計為請求時建連線、請求完釋放連線,以儘快將資源釋放出來服務其他客戶端。
UDP儘管不象TCP那樣佔用資源,但它不保證資料的完整性、有序性,想像如果伺服器返回的HTML錯序了或者丟失一部分你將看到什麼效果;並且UDP沒有流量控制,而網際網路的傳輸質量又不是很好,伺服器隨便仍出一大堆UDP包可能導致網路風暴,這是相當危險的