在瀏覽器輸入想要訪問的域名之后醉锄,瀏覽器會進行域名解析獲得IP地址,在經(jīng)過TCP的連接浙值,實現(xiàn)數(shù)據(jù)的傳輸就會有兩種報文恳不,及請求報文和響應(yīng)報文。最終才能實現(xiàn)通信开呐。因此想要實現(xiàn)通信烟勋,就得先弄懂DNS的解析原理以及TCP連接通道的流程。
理論內(nèi)容:
1筐付、DNS的介紹以及原理
2神妹、TCP/IP協(xié)議的介紹和三次握手及四次揮手
3、HTTP協(xié)議的介紹及請求與響應(yīng)報文
4家妆、用戶訪問瀏覽器的完整過程
1鸵荠、DNS的介紹及解析原理
1)說說DNS是什么:
DNS(Domain Name System,域名系統(tǒng))伤极,因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫蛹找,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去+·記住能夠被機器直接讀取的IP數(shù)串哨坪。通過主機名庸疾,最終得到該主機名對應(yīng)的IP地址的過程叫做域名解析(或主機名解析)。DNS協(xié)議運行在UDP協(xié)議之上当编,使用端口號53届慈。訪問網(wǎng)站的實質(zhì)就是解析其域名得到IP地址,再轉(zhuǎn)向其網(wǎng)站忿偷。
2)DNS的解析原理:
原理步驟:
1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息金顿,確認其中是否有與,域名www.baidu.com所對應(yīng)的IP地址鲤桥。如果有揍拆,就直接訪問這個IP地址所對應(yīng)的www.baidu.com域名服務(wù)器。
2)如果沒有找到茶凳,那么嫂拴,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機所指定的DNS服務(wù)器,稱為LDNS贮喧。如果LDNS服務(wù)器中有域名www.baidu.com所對應(yīng)的IP地址筒狠,則返回給客戶端的瀏覽器,如果沒有箱沦,則繼續(xù)請求其他DNS服務(wù)器辩恼。
3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.baidu.com的解析。根DNS服務(wù)器全球只有13臺,根域名服務(wù)器是沒有域名www.baidu.com解析記錄的运挫。但是它會有域名www.baidu.com所對應(yīng)的頂級域.com的解析記錄状共,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器。
4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后谁帕,就會去.com服務(wù)器請求對www.baidu.com域名的解析峡继。在頂級域名服務(wù)器也不會有www.baidu.com的解析記錄的。但是它有www.baidu.com的父級域名的解析記錄匈挖,即baidu.com碾牌。因此頂級域名.com服務(wù)器又會把baidu.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。
5)LDNS服務(wù)器收到baidu.com所對應(yīng)的IP地址后儡循,就會去baidu.com域名服務(wù)器請求對www.baidu.com的域名解析舶吗。Baidu.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器择膝。
6)baidu.com域名DNS服務(wù)器會吧www.baidu.com域名所對應(yīng)的IP地址給解析出來誓琼,然后發(fā)給LDNS。
7)LDNS把解析出來的結(jié)果肴捉,www.baudu.com所對應(yīng)的IP地址發(fā)送給客戶端的瀏覽器腹侣。并且LDNS也會將其域名和對應(yīng)的地址緩存到cache中。
8)客戶端瀏覽器收到后齿穗,也會將其域名以及對應(yīng)的IP地址緩存的到DNS緩存和hosts文件中傲隶。
2、TCP/IP協(xié)議的介紹和三次握手及四次揮手
1)說說TCP/IP協(xié)議是什么
Transmission Control Protocol/Internet Protocol的簡寫窃页,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議跺株,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議脖卖、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)乒省,由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng)胚嘲,以及數(shù)據(jù)如何在它們之間傳輸?shù)臉藴首鞫f(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求馋劈。通俗而言:TCP負責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號晾嘶,要求重新傳輸妓雾,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺聯(lián)網(wǎng)設(shè)備規(guī)定一個地址垒迂。
2)各個狀態(tài)的意義如下:
(1)LISTEN - 偵聽來自遠方TCP端口的連接請求械姻;
(2)SYN-SENT -在發(fā)送連接請求后等待匹配的連接請求;
(3)SYN-RECEIVED - 在收到和發(fā)送一個連接請求后等待對連接請求的確認机断;
(4)ESTABLISHED- 代表一個打開的連接楷拳,數(shù)據(jù)可以傳送給用戶绣夺;
(5)FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認欢揖;
(6)FIN-WAIT-2 - 從遠程TCP等待連接中斷請求陶耍;
(7)CLOSE-WAIT - 等待從本地用戶發(fā)來的連接中斷請求;
(8)CLOSING -等待遠程TCP對連接中斷的確認她混;
(9)LAST-ACK - 等待原來發(fā)向遠程TCP的連接中斷請求的確認烈钞;
(10)TIME-WAIT - 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
(11)CLOSED - 沒有任何連接狀態(tài)坤按;
3)TCP三次握手
所謂三次握手(Three-way Handshake)毯欣,是指建立一個TCP連接時,需要客戶端和服務(wù)器總共發(fā)送3個包臭脓。
三次握手的目的是連接服務(wù)器指定端口酗钞,建立TCP連接,并同步連接雙方的序列號和確認號并交換 TCP 窗口大小信息.在socket編程中,客戶端執(zhí)行connect()時来累。將觸發(fā)三次握手砚作。
三次握手過程:
1)第一次握手:建立連接時,客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B佃扼,并進入SYN_SEND狀態(tài)偎巢,等待服務(wù)器B確認。
2)第二次握手:服務(wù)器B收到SYN包兼耀,必須確認客戶A的SYN(ACK=j+1)压昼,同時自己也發(fā)送一個SYN包(SYN=k),即SYN+ACK包瘤运,此時服務(wù)器B進入SYN_RECV狀態(tài)窍霞。
3)第三次握手:客戶端A收到服務(wù)器B的SYN+ACK包炫彩,向服務(wù)器B發(fā)送確認包ACK(ACK=k+1)昌简,此包發(fā)送完畢罐盔,客戶端A和服務(wù)器B進入ESTABLISHED狀態(tài)龟虎,完成三次握手掀淘。
4)TCP 四次揮手
TCP的連接的拆除需要發(fā)送四個包美侦,因此稱為四次揮手(four-way handshake)宠蚂∨彝粒客戶端或服務(wù)器均可主動發(fā)起揮手動作梦裂,在socket編程中似枕,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。
四次揮手過程:
1)第一次揮手:客戶端A發(fā)送一個FIN年柠,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送凿歼。
2)第二次揮手:服務(wù)器B收到這個FIN,它發(fā)回一個ACK,確認序號為收到的序號加1答憔。和SYN一樣味赃,一個FIN將占用一個序號。
3)第三次揮手:服務(wù)器B關(guān)閉與客戶端A的連接虐拓,發(fā)送一個FIN給客戶端A心俗。
4)第四次揮手:客戶端A發(fā)回ACK報文確認,并將確認序號設(shè)置為收到序號加1侯嘀。
3另凌、HTTP協(xié)議的介紹及請求與響應(yīng)報文
1)HTTP報文
HTTP報文中有很多行內(nèi)人,這些行的字段都是由一些ASCII碼串組成戒幔,但各個字段的長度是不同的吠谢。HTTP報文可以分為兩種,一種是從web客戶端發(fā)往web服務(wù)端的HTTP報文诗茎,稱為請求保衛(wèi)工坊,另一種是從web服務(wù)端發(fā)往客戶端的報文,稱為響應(yīng)報文敢订。兩種報文的格式的基本相同王污。
(1)請求報文介紹
(2)請求報文的內(nèi)容與格式有如下:
1)請求行
作用:用來說明客戶端想要做什么。
內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本
2)請求頭
作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器
內(nèi)容:包括媒體類型楚午、語言類型昭齐、支持壓縮、客戶端類型矾柜、主機等信息阱驾。
3)空行
作用:告訴服務(wù)器空行以下內(nèi)容不屬于請求頭部信息。
4)請求報文主體
作用:用來說明客戶端具體想要做的事情怪蔑。
內(nèi)容:查看信息里覆、應(yīng)用post方法。
(3)響應(yīng)報文介紹
(4)請求報文的內(nèi)容與格式有如下:
1)狀態(tài)行
作用:用來說明服務(wù)端響應(yīng)客戶端的狀態(tài)缆瓣。
內(nèi)容:包括洗衣及版本號喧枷、數(shù)字狀態(tài)碼、狀態(tài)情況
2)響應(yīng)頭
作用:通過服務(wù)端把響應(yīng)的相關(guān)信息給客戶端
內(nèi)容:包括Location弓坞、server隧甚、connect、vary等
3)空行
作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息渡冻。
4)響應(yīng)報文主體
作用:用來裝載著要返回給客戶端的數(shù)據(jù)
內(nèi)容:包括文本呻逆、html、視頻或者是圖片菩帝。
(5)GET與POST的認識
GET:當(dāng)客戶端要從服務(wù)器中讀取某個資源時,使用GET 方法。GET 方法要求服務(wù)器將URL 定位的資源放在響應(yīng)報文的數(shù)據(jù)部分呼奢,回送給客戶端宜雀,即向服務(wù)器請求某個資源。使用GET 方法時握础,請求參數(shù)和對應(yīng)的值附加在 URL 后面辐董,利用一個問號(“?”)代表URL 的結(jié)尾與請求參數(shù)的開始,傳遞參數(shù)長度受限制禀综。例如简烘,/index.jsp?id=100&op=bind、
POST:當(dāng)客戶端給服務(wù)器提供信息較多時可以使用POST 方法定枷,POST 方法向服務(wù)器提交數(shù)據(jù)孤澎,比如完成表單數(shù)據(jù)的提交,將數(shù)據(jù)提交給服務(wù)器處理欠窒。GET 一般用于獲取/查詢資源信息覆旭,POST 會附帶用戶數(shù)據(jù),一般用于更新資源信息岖妄。POST 方法將請求參數(shù)封裝在HTTP 請求數(shù)據(jù)中型将,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù);
4荐虐、用戶訪問瀏覽器的完整過程
1七兜、客戶端在瀏覽器中輸入要訪問的域名地址,如:www.baidu.com
2福扬、瀏覽器請求解析DNS服務(wù)器腕铸,把域名www.baidu.com轉(zhuǎn)換成web服務(wù)器的IP地址。
1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息忧换,確認其中是否有與恬惯,域名www.baidu.com所對應(yīng)的IP地址。如果有亚茬,就直接訪問這個IP地址所對應(yīng)的www.baidu.com域名服務(wù)器酪耳。
2)如果沒有找到,那么刹缝,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機所指定的DNS服務(wù)器碗暗,稱為LDNS。如果LDNS服務(wù)器中有域名www.baidu.com所對應(yīng)的IP地址梢夯,則返回給客戶端的瀏覽器言疗,如果沒有,則繼續(xù)請求其他DNS服務(wù)器颂砸。
3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.baidu.com的解析噪奄。根DNS服務(wù)器全球只有13臺死姚,根域名服務(wù)器是沒有域名www.baidu.com解析記錄的。但是它會有域名www.baidu.com所對應(yīng)的頂級域.com的解析記錄勤篮,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器都毒。
4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后,就會去.com服務(wù)器請求對www.baidu.com域名的解析碰缔。在頂級域名服務(wù)器也不會有www.baidu.com的解析記錄的账劲。但是它有www.baidu.com的父級域名,即baidu.com金抡。因此頂級域名.com服務(wù)器又會把baidu.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS瀑焦。
5)LDNS服務(wù)器收到baidu.com所對應(yīng)的IP地址后,就會去baidu.com域名服務(wù)器請求對www.baidu.com的域名解析梗肝。Baidu.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器榛瓮。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器。
6)baidu.com域名DNS服務(wù)器會吧www.baidu.com域名所對應(yīng)的IP地址給解析出來统捶,然后發(fā)給LDNS榆芦。
7)LDNS把解析出來的結(jié)果,www.baudu.com所對應(yīng)的IP地址發(fā)送給客戶端的瀏覽器喘鸟。并且LDNS也會將其域名和對應(yīng)的地址緩存到cache中匆绣。
8)客戶端瀏覽器收到后,也會將其域名以及對應(yīng)的IP地址緩存的到DNS緩存和hosts文件中什黑。
3崎淳、瀏覽器從訪問的IP地址(URL)解析出默認的斷后號:80
4、瀏覽器通過解析后得到的IP地址和端口號進行web服務(wù)器建立一條TCP連接通道愕把。
1)第一次握手:
建立連接時拣凹,客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B,并進入SYN_SEND狀態(tài)恨豁,等待服務(wù)器B確認嚣镜。
2)第二次握手:
服務(wù)器B收到SYN包,必須確認客戶A的SYN(ACK=j+1)橘蜜,同時自己也發(fā)送一個SYN包(SYN=k)菊匿,即SYN+ACK包,此時服務(wù)器B進入SYN_RECV狀態(tài)计福。
3)第三次握手:
客戶端A收到服務(wù)器B的SYN+ACK包跌捆,向服務(wù)器B發(fā)送確認包ACK(ACK=k+1),此包發(fā)送完畢象颖,客戶端A和服務(wù)器B進入ESTABLISHED狀態(tài)佩厚,完成三次握手。
5说订、建立TCP連接之后抄瓦,瀏覽器向web服務(wù)器發(fā)送一條HTTP請求報文潮瓶。
1)請求行
作用:用來說明客戶端想要做什么。
內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本
2)請求頭
作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器
內(nèi)容:包括媒體類型闺鲸、語言類型筋讨、支持壓縮、客戶端類型摸恍、主機等信息。
3)空行
作用:告訴服務(wù)器空行以下內(nèi)容不屬于請求頭部信息赤屋。
4)請求報文主體
作用:用來說明客戶端具體想要做的事情立镶。
內(nèi)容:查看信息、應(yīng)用post方法类早。
6媚媒、web服務(wù)器響應(yīng)并讀取瀏覽器的請求信息,然后返回一條HTTP響應(yīng)報文涩僻。
1)狀態(tài)行
作用:用來說明服務(wù)端響應(yīng)客戶端的狀態(tài)缭召。
內(nèi)容:包括洗衣及版本號、數(shù)字狀態(tài)碼逆日、狀態(tài)情況
2)響應(yīng)頭
作用:通過服務(wù)端把響應(yīng)的相關(guān)信息給客戶端
內(nèi)容:包括Location嵌巷、server、connect室抽、vary等
3)空行
作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息搪哪。
4)響應(yīng)報文主體
作用:用來裝載著要返回給客戶端的數(shù)據(jù)
內(nèi)容:包括文本、html坪圾、視頻或者是圖片晓折。
7、web服務(wù)器關(guān)閉HTTP連接兽泄,關(guān)閉TCP連接漓概,web服務(wù)器顯示訪問的網(wǎng)站內(nèi)容到屏幕上。
1)第一次揮手:
客戶端A發(fā)送一個FIN病梢,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送胃珍。
2)第二次揮手:
服務(wù)器B收到這個FIN,它發(fā)回一個ACK飘千,確認序號為收到的序號加1堂鲜。和SYN一樣,一個FIN將占用一個序號护奈。
3)第三次揮手:
服務(wù)器B關(guān)閉與客戶端A的連接缔莲,發(fā)送一個FIN給客戶端A。
4)第四次揮手:
客戶端A發(fā)回ACK報文確認霉旗,并將確認序號設(shè)置為收到序號加1痴奏。