只知道他可以保持長串連,有個小小的疑問,他是如何辨別是否是同個使用者的,是IP嗎? 如果是的話哪整區域網路都可以用得到這個長連結對嗎?
回複內容:
只知道他可以保持長串連,有個小小的疑問,他是如何辨別是否是同個使用者的,是IP嗎? 如果是的話哪整區域網路都可以用得到這個長連結對嗎?
tcp協議中包含四個要素源地址 源連接埠號碼 目的地址 目的連接埠號碼,雙方從建立通訊開始,這四項就是固定的,假設http伺服器是監聽80連接埠,那麼對於用戶端瀏覽器來說,這四要素就是瀏覽器ip
瀏覽器作業系統給當前請求分配的socket控制代碼連接埠號碼
web伺服器位址
80
。瀏覽器在建立socket前,需要先向作業系統申請一個socket控制代碼,申請成功後就得到一個本地的socket控制代碼連接埠號碼,然後和伺服器通過三向交握建立TCP串連。建立串連後,在伺服器端也會有一個對應的socket控制代碼。同時在TCP層,每個TCP請求都還有一個seq編號,在TCP握手的時候產生的。雙方進行通訊的時候,網卡中得到的資料包中解析出這個seq號,就知道是對應哪個socket控制代碼了。
首先,串連在建立的時候就已經確立了串連的雙方,也只有位於已經確立的串連兩端的使用者可以使用這個長串連。
你在電腦上開啟瀏覽器串連網站,在確立串連的過程中,是你的電腦與網站伺服器建立的串連,在串連保持的過程中,其他電腦是沒法借用你這個串連的。
串連的形成是終端(你的電腦、網站的伺服器)通過 socket 連接埠通訊端形成的映射關係,判斷和識別這個串連,也是通過對應主機的連接埠來實現的。
session.
長連結、短連結指的是 TCP 層的事情。HTTP層的使用者識別還是通過 SESSION。
1.HTTP 的 Keep-Alive 指的是 TCP/IP Socket 的長串連,即使用者瀏覽器=>Web容器的這一段來處理這個問題,與你的代碼無關。
2.保持長串連,是為了在短時間內,同一個Client下次再次向本伺服器的Web容器發起請求,不用再次進行握手建立串連這一繁雜的階段,節省伺服器的處理時間,以及提升下一次請求的處理速度。
3.對於一個 Socket (通訊端)來說,已經建立的一個 TCP 串連,是針對於一個IP的一個發起請求的連接埠,以及遠端伺服器的一個IP的一個接受請求的連接埠而言的。由於HTTP 長串連是基於此的,所以並不是針對同一個使用者的長串連,而是針對同一個串連的長串連。
4.路由器之所以能讓內網所有使用者使用同一個外網IP對外發起網路請求,是因為 NAT 機制,所以當一個內網使用者對一個Web容器發起請求後,對於Web容器而言,與他建立串連的是該內網的最外層網路節點(比如路由器)。而當Web容器傳回資料,路由器能夠通過NAT overload,對資料包的目標進行區分,發送到指定的內網裝置的連接埠上,不會存在內網所有裝置串線的情況