1. 程式人生 > >從URL到與伺服器斷開連線到底發生了什麼

從URL到與伺服器斷開連線到底發生了什麼

URL是什麼

URL的英文全稱是Uniform Resource Location,中文名字是統一資源定位符,說白了他就是我們因為某種需求在瀏覽器中輸入的網址,當我們想要與伺服器互動時,伺服器並不認識我們輸入的url,那伺服器是怎樣識別的呢,其實我們輸入的url都繫結一個ip,比如我們主機的ip是127.0.0.1,網路上的計算機ip不是固定的,伺服器通過識別這個ip來返回來找到我們想要的東西。

DNS解析過程

伺服器是怎麼得到這個ip的呢,是通過dns解析url得到的,下面我們說一下這個過程: 1,我們知道URL就是我們輸入的網址了,請求一旦發起,瀏覽器首先要做的事情就是解析這個域名,一般來說,瀏覽器會首先檢視本地硬碟的 hosts 檔案,看看其中有沒有和這個域名對應的規則,如果有的話就直接使用 hosts 檔案裡面的 ip 地址。
2.如果在本地的 hosts 檔案沒有能夠找到對應的 ip 地址,瀏覽器會發出一個 DNS請求到本地DNS伺服器 。本地DNS伺服器一般都是你的網路接入伺服器商提供,比如中國電信,中國移動。 3.查詢你輸入的網址的DNS請求到達本地DNS伺服器之後,本地DNS伺服器會首先查詢它的快取記錄,如果快取中有此條記錄,就可以直接返回結果,此過程是遞迴的方式進行查詢。如果沒有,本地DNS伺服器還要向DNS根伺服器進行查詢。 遞迴過程圖解:
4。根DNS伺服器沒有記錄具體的域名和IP地址的對應關係,而是告訴本地DNS伺服器,你可以到域伺服器上去繼續查詢,並給出域伺服器的地址。這種過程是迭代的過程。
迭代過程圖解:
5.本地DNS伺服器繼續向域伺服器發出請求,在www.baidu.com這個列子中,請求的物件是.com域伺服器。.com域伺服器收到請求之後,也不會直接返回域名和IP地址的對應關係,而是告訴本地DNS伺服器,你的域名的解析伺服器的地址。 6.最後,本地DNS伺服器向域名的解析伺服器發出請求,這時就能收到一個域名和IP地址對應關係,本地DNS伺服器不僅要把IP地址返回給使用者電腦,還要把這個對應關係儲存在快取中,以備下次別的使用者查詢時,可以直接返回結果,加快網路訪問。

詳細圖解:


  我想經過上面的步驟聯絡圖解大家對dns解析的過程應該比較清楚了

dns負載均衡

當一個網站有足夠多的使用者時,每次請求的資源都位於一臺機器上,那麼這臺機器隨時都有可能崩掉,如何解決呢?這就需要負載均衡技術了,原理是在dns伺服器中為每個訪問的使用者配置多個ip,這樣當很多使用者一起訪問時,dns伺服器首先會根據快取中使用者的不同ip將不同的使用者分配到不同的機器上去,這樣就不是一臺機器在承受巨大的訪問量,達到了不同客戶端訪問不同伺服器的目的,從而實現了負載均衡。例如可以根據每臺機器的負載量,該機器離使用者地理位置的距離等等。

拿到url繫結的ip以後瀏覽器做了那些事情呢?

瀏覽器向web伺服器傳送http請求

以上我們把使用者輸入url,即客戶端向伺服器傳送請求,dns域名解析看作一個應用層,域名解析完成拿到ip以後就要和伺服器建立連線,瀏覽器會以一個隨機埠(1024<埠<65535)向伺服器的WEB程式(常用的有httpd,nginx等)80埠發起TCP的連線請求(這相當於一個包裝的過程,我們把傳送的請求當作一個包裹,首先經過傳輸層,在包裹上寫上一個本地埠和目的埠,然後經過ip層,在包裹上寫上本地ip和目的ip)。這個連線請求到達伺服器端後(這中間通過各種路由裝置,區域網內除外),進入到網絡卡,然後是進入到核心的TCP/IP協議棧(用於識別該連線請求,解封包,一層一層的剝開),還有可能要經過Netfilter防火牆(屬於核心的模組)的過濾,最終到達WEB程式,最終建立了TCP/IP的連線。 TCP連線圖示: 上面這個圖就是tcp連線時著名的三握手過程,seq是每一次握手的隨機序列號,如果ack = seq + 1則完成確認,就進行握手,在這裡不對其進行過多解釋,大家可以自行google。 為什需要三次握手?《計算機網路》第四版中講“三次握手”的目的是“為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤”。

下面我們看一下TCP的四次揮手

圖示:


為什麼建立連線時三握手,斷開連線時卻需要四次揮手呢?

這是因為服務端在LISTEN狀態下,收到建立連線請求的SYN報文後,把ACK和SYN放在一個報文裡傳送給客戶端。而關閉連線時,當收到對方的FIN報文時,僅僅表示對方不再發送資料了但是還能接收資料,己方也未必全部資料都發送給對方了,所以己方可以立即close,也可以傳送一些資料給對方後,再發送FIN報文給對方來表示同意現在關閉連線,因此,己方ACK和FIN一般都會分開發送。 這個揮手的過程就好像我們打完電話要和對方結束對話的過程,首先客戶端相當於你自己,伺服器是接聽者,當你想要結束通話時,你跟對方說你不想說了(FIN = M)然後對方聽到了說了一句我知道了(ACK = FIN + 1)但是對方還有話沒說完,然後他又說了一句明天見!說完了以後他又和你說拜拜(FIN = N)然後你說拜拜,四次揮手結束對話

相關推薦

URL伺服器斷開連線到底發生什麼

URL是什麼 URL的英文全稱是Uniform Resource Location,中文名字是統一資源定位符,說白了他就是我們因為某種需求在瀏覽器中輸入的網址,當我們想要與伺服器互動時,伺服器並不認識我們輸入的url,那伺服器是怎樣識別的呢,其實我們輸入的url都繫結一個ip,比如我們主機的ip是127.

網狐 "由於網路問題,您已經伺服器斷開連線,請重新連線"

發現竟然是伺服器配置ip的問題,一開始因為是在自己的電腦上測試,所以ip全設定成了“127.0.0.1”,然後發給其他人,發現就報“由於網路問題,您已經與伺服器斷開連線,請重新連線” 錯誤,後來發現就是這個ip問題,改成區域網相應的ip就行了

URL輸入到頁面展示都發生什麼?

總的來說分為以下過程: DNS解析 TCP三次握手 傳送HTTP請求 伺服器端處理請求並返回HTTP保文 瀏覽器渲染頁面 斷開連線:TCP的四次揮手 URL到底是什麼? URL(Uniform Resource Locator),統一資源定位符,使用者定位網際網路上資源,俗稱網站。 語法規則

SQL Server(解決問題)已成功伺服器建立連線,但是在登入過程中發生錯誤。(provider: Shared Memory Provider, error:0

如果你在使用新建立的 SQL Server 使用者名稱和密碼 對資料庫進行連線的時候出現了下面的問題。閱讀本篇部落格可以幫助你解決這個問題。 已成功與伺服器建立連線,但是在登入過程中發生錯誤。(pro

已成功伺服器建立連線,但是在登入過程中發生錯誤(SQL sa賬戶

 已成功與伺服器建立連線,但是在登入過程中發生錯誤。 (provider: 共享記憶體提供程式, error: 0 - 管道的另一端上無任何程序。) 解決方法: 首先選中伺服器(右鍵)->屬性->安全性->伺服器身份驗證修改為"SQL SERVER和W

已成功伺服器建立連線 但是在登入過程中發生錯誤。 provider 共享記憶體提供程式 error 0 管道的另一端上無任何程序。

使用者 'sa' 登入失敗。該使用者與可信 SQL Server 連線無關聯。 說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯誤以及程式碼中導致錯誤的出處的詳細資訊。 異常詳細資訊: System.Data.SqlClient.S

sql server 2005 sa登入報錯:已成功伺服器建立連線,但是在登入過程中發生錯誤。

windows身份登入是沒有問題,用sa登入SQL2005資料庫時,提示:已成功與伺服器建立連線,但是在登入過程中發生錯誤。 (provider: 共享記憶體提供程式, error: 233 - 管道的另一端上無任何程序。) 解決: 1. 首先用Window身份登入.選中伺

SQL Server 2008 問題——已成功伺服器建立連線,但是在登入過程中發生錯誤。

登入報錯:已成功與伺服器建立連線,但是在登入過程中發生錯誤。 (provider: 共享記憶體提供程式, error: 0 - 管道的另一端上無任何程序。 解決辦法:先用windows模式登入上去,然

vs 或 Sql server2012連線Sql server時出現的問題:已成功伺服器建立連線,但在登陸過程中發生錯誤

以前連線是正常的,就這兩天連不上了。(沒有耐心的直接看末尾解決辦法) 錯誤訊息如下: 1.嘗試讀取或寫入受保護的記憶體。這通常指示其他記憶體已損壞。(System.Data) 2.已成功與伺服器建立連線,但在登陸過程中發生錯誤。(provider:SSL Pro

IIS7.5出現ASP.NET網站"已成功伺服器建立連線,但是在登入過程中發生錯誤。"

早上來到辦公室,開啟電腦,開始工作,結果發現本機的網站打開不了,一直提示錯誤w3wp程序錯誤,把網站的應用程式池改成2.0、4.0,修改web.config,重啟電腦,都不行。檢視系統日誌,出現了 程序資訊:     程序 ID: 5760     程序名: w3wp.

已成功伺服器建立連線 但是在登入過程中發生錯誤。provider: Shared Memory Provider, error: 0

前言 話說這個問題縈繞在心頭已經有很長的一段時間了,一直沒有解決,這可如何是好,在網上有很多種的解決辦法,但是我的第N感告訴我這不是我想要的答案,結局當然是——game over了。內心深處有個聲音一直告訴自己快要接近答案了,But就是一直在終極答案邊緣徘徊,那叫一個心癢難

SQL Server 2005 sa登入失敗。已成功伺服器建立連線 但是在登入過程中發生錯誤。 provider 共享記憶體提供程式 error 0 管道的另一端上無任何程序。

SQL Server 2005 Express版 使用者 'sa' 登入失敗。該使用者與可信 SQL Server 連線無關聯。提示錯誤:已成功與伺服器建立連線 但是在登入過程中發生錯誤。 provider 共享記憶體提供程式 error 0 管道的另一端上無任何程序。

客戶端怎麼判斷Socket連線伺服器斷開

First of all , Server's socekt is not close. if u had closed client's socekt , u should creat it again when u want to connect server's. socket即使close了,也還

URL輸入到頁面展現到底發生什麼?

  前言 開啟瀏覽器從輸入網址到網頁呈現在大家面前,背後到底發生了什麼?經歷怎麼樣的一個過程?先給大家來張總體流程圖,具體步驟請看下文分解! 總體來說分為以下幾個過程: DNS 解析:將域名解析成 IP 地址 TCP 連線:TCP 三次握手 傳送 HTTP 請求 伺服器處理請求

URL輸入到頁面展現到底發生什麼

原文出處: 浪裡行舟    前言 開啟瀏覽器從輸入網址到網頁呈現在大家面前,背後到底發生了什麼?經歷怎麼樣的一個過程?先給大家來張總體流程圖,具體步驟請看下文分解! 總體來說分為以下幾個過程: DNS 解析:將域名解析成 IP 地址

解決R/RStudio中安裝包“無法伺服器建立連線

  這幾天在用RStudio寫程式的時候突然出現無法從網路直接安裝r包的問題,也無法從本地直接安裝。通過多方嘗試找到了問題解決的辦法,現在記錄在這裡。程式報錯如下:    > install.packages('REmap') Warning in install.packag

在建立伺服器連線時出錯。在連線到SQL Server 2005時,在預設的設定不允許進行遠端連線,在建立伺服器連線時出錯。

在建立與伺服器的連線時出錯。在連線到SQL Server 2005時,在預設的設定不允許進行遠端連線,在建立與伺服器的連線時出錯。在連線到SQL Server 2005時,在預設的設定下SQL Server 不允許進行遠端連接可能會導致此失敗。 1. 開啟sql2005遠端連線功能,開啟辦法如下

java利用socket實現客戶端伺服器連線資料傳遞

網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個雙向鏈路的一端稱為一個 socket。socket 也就是套接字,可以用來實現不同虛擬機器或者不同計算機之間的通訊。在 Java 語言中,socket 可以分為兩種型別:面向連線的 socket 通訊協議(TCP)和麵向無連線的 socket

Xshellwindows伺服器之間的檔案傳送rz/sz

Xshell可以使用rz/sz命令來完成與windows之間的檔案傳輸。 # rz rz命令是從windows傳檔案到伺服器(r:receive),輸入rz後按回車,Xshell彈出對話方塊,可以選擇需要上傳的檔案,點選開啟即可上傳。如下圖: #sz  error.tx

遠端伺服器斷開連線,為什麼總自動關閉開啟的程式(程式自動關閉)

遠端伺服器斷開連線,為什麼總自動關閉開啟的程式 系統故障:遠端桌面斷開時不久,系統就會自動登出(一辦都認為原先開啟的程式自動關閉)。即:遠端桌面斷開時,當前執行的軟體會自動關閉,正在執行的其它程式也沒有了。再用帳戶遠端登入,發現是一個全新的桌面。  解決辦法: