日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

TCP协议详解 (史上最全)

發(fā)布時(shí)間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP协议详解 (史上最全) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章很長(zhǎng),建議收藏起來(lái),慢慢讀! 瘋狂創(chuàng)客圈為小伙伴奉上以下珍貴的學(xué)習(xí)資源:

  • 瘋狂創(chuàng)客圈 經(jīng)典圖書(shū) : 《Netty Zookeeper Redis 高并發(fā)實(shí)戰(zhàn)》 面試必備 + 大廠必備 + 漲薪必備
  • 瘋狂創(chuàng)客圈 經(jīng)典圖書(shū) : 《SpringCloud、Nginx高并發(fā)核心編程》 面試必備 + 大廠必備 + 漲薪必備
  • 資源寶庫(kù): Java程序員必備 網(wǎng)盤(pán)資源大集合 價(jià)值>1000元 隨便取 GO->【博客園總?cè)肟?/strong> 】
  • 獨(dú)孤九劍:Netty靈魂實(shí)驗(yàn) : 本地 100W連接 高并發(fā)實(shí)驗(yàn),瞬間提升Java內(nèi)力
  • 最純粹的技術(shù)交流:和大廠 小伙伴、技術(shù)高手、架構(gòu)師 進(jìn)行 純粹的的技術(shù)問(wèn)題交流、探討求助、問(wèn)題圍觀學(xué)習(xí)

推薦2:史上最全 Java 面試題 21 個(gè)專題

史上最全 Java 面試題 21 個(gè)專題阿里、京東、美團(tuán)、頭條… 隨意挑、橫著走!!!
1: JVM面試題(史上最強(qiáng)、持續(xù)更新、吐血推薦)https://www.cnblogs.com/crazymakercircle/p/14365820.html
2:Java基礎(chǔ)面試題(史上最全、持續(xù)更新、吐血推薦)https://www.cnblogs.com/crazymakercircle/p/14366081.html
4:設(shè)計(jì)模式面試題 (史上最全、持續(xù)更新、吐血推薦)https://www.cnblogs.com/crazymakercircle/p/14367101.html
5:架構(gòu)設(shè)計(jì)面試題 (史上最全、持續(xù)更新、吐血推薦)https://www.cnblogs.com/crazymakercircle/p/14367907.html
還有 21篇必刷、必刷 的面試題更多 …, 請(qǐng)參見(jiàn)【 瘋狂創(chuàng)客圈 高并發(fā) 總目錄 】

推薦3: 瘋狂創(chuàng)客圈 高質(zhì)量 博文

springCloud 高質(zhì)量 博文
nacos 實(shí)戰(zhàn)(史上最全) sentinel (史上最全+入門(mén)教程)
springcloud + webflux 高并發(fā)實(shí)戰(zhàn) Webflux(史上最全)
SpringCloud gateway (史上最全)TCP/IP圖解 (史上最全)
10分鐘看懂, Java NIO 底層原理Feign原理 (圖解)
更多精彩博文 …請(qǐng)參見(jiàn)【 瘋狂創(chuàng)客圈 高并發(fā) 總目錄 】

TCP/IP協(xié)議包含了一系列的協(xié)議,也叫TCP/IP協(xié)議族(TCP/IP Protocol Suite,或TCP/IP
Protocols),簡(jiǎn)稱TCP/IP。TCP/IP協(xié)議族提供了點(diǎn)對(duì)點(diǎn)的連結(jié)機(jī)制,并且將傳輸數(shù)據(jù)幀的封裝、尋址、傳輸、路由以及接收方式,都予以標(biāo)準(zhǔn)化。

TCP/IP協(xié)議的分層模型

在展開(kāi)介紹TCP/IP協(xié)議之前,首先介紹一下七層ISO模型。國(guó)際標(biāo)準(zhǔn)化組織ISO為了使網(wǎng)絡(luò)應(yīng)用更為普及,推出了OSI參考模型,即開(kāi)放式系統(tǒng)互聯(lián)(Open
System Interconnect)模型,
一般都叫OSI參考模型。OSI參考模型是ISO組織在1985年發(fā)布的網(wǎng)絡(luò)互連模型,其含義就是為所有公司使用一個(gè)統(tǒng)一的規(guī)范來(lái)控制網(wǎng)絡(luò),這樣所有公司遵循相同的通信規(guī)范,網(wǎng)絡(luò)就能互聯(lián)互通了。

OSI模型的七層框架

OSI模型定義了網(wǎng)絡(luò)互連的七層框架(物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層),每一層實(shí)現(xiàn)各自的功能和協(xié)議,并完成與相鄰層的接口通信。OSI模型各層的通信協(xié)議,大致舉例如下表所示:

表:OSI模型各層的通信協(xié)議舉例

應(yīng)用層HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP、等等
表示層XDR、ASN.1、SMB、AFP、NCP、等等
會(huì)話層ASAP、SSH、RPC、NetBIOS、ASP、Winsock、BSD Sockets、等等
傳輸層TCP、UDP、TLS、RTP、SCTP、SPX、ATP、IL、等等
網(wǎng)絡(luò)層IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25、等等
數(shù)據(jù)鏈路層以太網(wǎng)、令牌環(huán)、HDLC、幀中繼、ISDN、ATM、IEEE 802.11、FDDI、PPP、等等
物理層例如銅纜、網(wǎng)線、光纜、無(wú)線電等等

TCP/IP協(xié)議是Internet互聯(lián)網(wǎng)最基本的協(xié)議,其在一定程度上參考了七層ISO模型。OSI模型共有七層,從下到上分別是物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層、會(huì)話層、表示層和應(yīng)用層。但是這顯然是有些復(fù)雜的,所以在TCP/IP協(xié)議中,七層被簡(jiǎn)化為了四個(gè)層次。TCP/IP模型中的各種協(xié)議,依其功能不同,被分別歸屬到這四層之中,常被視為是簡(jiǎn)化過(guò)后的七層OSI模型。

TCP/IP協(xié)議與七層ISO模型的對(duì)應(yīng)關(guān)系

TCP/IP協(xié)議與七層ISO模型的對(duì)應(yīng)關(guān)系,大致如下圖所示:

圖:TCP/IP協(xié)議與七層ISO模型的對(duì)應(yīng)關(guān)系

TCP/IP協(xié)議的應(yīng)用層的主要協(xié)議有HTTP、Telnet、FTP、SMTP等,是用來(lái)讀取來(lái)自傳輸層的數(shù)據(jù)或者將數(shù)據(jù)傳輸寫(xiě)入傳輸層;傳輸層的主要協(xié)議有UDP、TCP,實(shí)現(xiàn)端對(duì)端的數(shù)據(jù)傳輸;網(wǎng)絡(luò)層的主要協(xié)議有ICMP、IP、IGMP,主要負(fù)責(zé)網(wǎng)絡(luò)中數(shù)據(jù)包的傳送等;鏈路層有時(shí)也稱作數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層,主要協(xié)議有ARP、RARP,
通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口卡,它們一起處理與傳輸媒介(如電纜或其他物理設(shè)備)的物理接口細(xì)節(jié)。

(一)TCP/IP協(xié)議的應(yīng)用層

應(yīng)用層包括所有和應(yīng)用程序協(xié)同工作,并利用基礎(chǔ)網(wǎng)絡(luò)交換應(yīng)用程序的業(yè)務(wù)數(shù)據(jù)的協(xié)議。一些特定的程序被認(rèn)為運(yùn)行在這個(gè)層上,該層協(xié)議所提供的服務(wù)能直接支持用戶應(yīng)用。應(yīng)用層協(xié)議包括HTTP(萬(wàn)維網(wǎng)服務(wù))、FTP(文件傳輸)、SMTP(電子郵件)、SSH(安全遠(yuǎn)程登陸)、DNS(域名解析)以及許多其他協(xié)議。

(二)TCP/IP協(xié)議的傳輸層

傳輸層的協(xié)議,解決了諸如端到端可靠性問(wèn)題,能確保數(shù)據(jù)可靠的到達(dá)目的地,甚至能保證數(shù)據(jù)按照正確的順序到達(dá)目的地。傳輸層的主要功能大致如下:

(1)為端到端連接提供傳輸服務(wù);

(2)這種傳輸服務(wù)分為可靠和不可靠的,其中TCP是典型的可靠傳輸,而UDP則是不可靠傳輸;

(3)為端到端連接提供流量控制、差錯(cuò)控制、QoS(Quality of
Service)服務(wù)質(zhì)量等管理服務(wù)。

傳輸層主要有兩個(gè)性質(zhì)不同的協(xié)議:TCP傳輸控制協(xié)議和UDP用戶數(shù)據(jù)報(bào)協(xié)議。

TCP協(xié)議是一個(gè)面向連接的、可靠的傳輸協(xié)議,它提供一種可靠的字節(jié)流,能保證數(shù)據(jù)完整、無(wú)損并且按順序到達(dá)。TCP盡量連續(xù)不斷地測(cè)試網(wǎng)絡(luò)的負(fù)載并且控制發(fā)送數(shù)據(jù)的速度以避免網(wǎng)絡(luò)過(guò)載。另外,TCP試圖將數(shù)據(jù)按照規(guī)定的順序發(fā)送。

UDP協(xié)議是一個(gè)無(wú)連接的數(shù)據(jù)報(bào)協(xié)議,是一個(gè)“盡力傳遞”和“不可靠”協(xié)議,不會(huì)對(duì)數(shù)據(jù)包是否已經(jīng)到達(dá)目的地進(jìn)行檢查,并且不保證數(shù)據(jù)包按順序到達(dá)。

總體來(lái)說(shuō),TCP協(xié)議傳輸效率低,但可靠性強(qiáng);UDP協(xié)議傳輸效率高,但可靠性略低,適用于傳輸可靠性要求不高、體量小的數(shù)據(jù)(比如QQ聊天數(shù)據(jù))。

(三)TCP/IP協(xié)議的網(wǎng)絡(luò)層

TCP/IP協(xié)議網(wǎng)絡(luò)層的作用是在復(fù)雜的網(wǎng)絡(luò)環(huán)境中為要發(fā)送的數(shù)據(jù)報(bào)找到一個(gè)合適的路徑進(jìn)行傳輸。簡(jiǎn)單來(lái)說(shuō),網(wǎng)絡(luò)層負(fù)責(zé)將數(shù)據(jù)傳輸?shù)侥繕?biāo)地址,目標(biāo)地址可以是多個(gè)網(wǎng)絡(luò)通過(guò)路由器連接而成的某一個(gè)地址。另外,網(wǎng)絡(luò)層負(fù)責(zé)尋找合適的路徑到達(dá)對(duì)方計(jì)算機(jī),并把數(shù)據(jù)幀傳送給對(duì)方,網(wǎng)絡(luò)層還可以實(shí)現(xiàn)擁塞控制、網(wǎng)際互連等功能。網(wǎng)絡(luò)層協(xié)議的代表包括:ICMP、IP、IGMP等。

(四)TCP/IP協(xié)議的鏈路層

鏈路層有時(shí)也稱作數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層,用來(lái)處理連接網(wǎng)絡(luò)的硬件部分。該層既包括操作系統(tǒng)硬件的設(shè)備驅(qū)動(dòng)、NIC(網(wǎng)卡)、光纖等物理可見(jiàn)部分,還包括連接器等一切傳輸媒介。在這一層,數(shù)據(jù)的傳輸單位為比特。其主要協(xié)議有ARP、RARP等。

圖解 物理層:使用MAC解決設(shè)備的身份證問(wèn)題

通信的原始時(shí)代

很久很久之前,你不與任何其他電腦相連接,孤苦伶仃。

直到有一天,你希望與另一臺(tái)電腦 B 建立通信,于是你們各開(kāi)了一個(gè)網(wǎng)口,用一根網(wǎng)線連接了起來(lái)。

用一根網(wǎng)線連接起來(lái)怎么就能"通信"了呢?我可以給你講 IO、講中斷、講緩沖區(qū),但這不是研究網(wǎng)絡(luò)時(shí)該關(guān)心的問(wèn)題。

如果你糾結(jié),要么去研究一下操作系統(tǒng)是如何處理網(wǎng)絡(luò) IO 的,要么去研究一下包是如何被網(wǎng)卡轉(zhuǎn)換成電信號(hào)發(fā)送出去的,要么就僅僅把它當(dāng)做電腦里有個(gè)小人在開(kāi)槍吧~

反正,你們就是連起來(lái)了,并且可以通信。

有一天,一個(gè)新伙伴 C 加入了,但聰明的你們很快發(fā)現(xiàn),可以每個(gè)人開(kāi)兩個(gè)網(wǎng)口,用一共三根網(wǎng)線,彼此相連。

隨著越來(lái)越多的人加入,你發(fā)現(xiàn)身上開(kāi)的網(wǎng)口實(shí)在太多了,而且網(wǎng)線密密麻麻,混亂不堪。(而實(shí)際上一臺(tái)電腦根本開(kāi)不了這么多網(wǎng)口,所以這種連線只在理論上可行,所以連不上的我就用紅色虛線表示了,就是這么嚴(yán)謹(jǐn)哈哈~)

集線器的誕生

于是你們發(fā)明了一個(gè)中間設(shè)備,你們將網(wǎng)線都插到這個(gè)設(shè)備上,由這個(gè)設(shè)備做轉(zhuǎn)發(fā),就可以彼此之間通信了,本質(zhì)上和原來(lái)一樣,只不過(guò)網(wǎng)口的數(shù)量和網(wǎng)線的數(shù)量減少了,不再那么混亂。

你給它取名叫集線器,它僅僅是無(wú)腦將電信號(hào)轉(zhuǎn)發(fā)到所有出口(廣播),不做任何處理,你覺(jué)得它是沒(méi)有智商的,因此把人家定性在了物理層

由于轉(zhuǎn)發(fā)到了所有出口,那 BCDE 四臺(tái)機(jī)器怎么知道數(shù)據(jù)包是不是發(fā)給自己的呢?

首先,你要給所有的連接到交換機(jī)的設(shè)備,都起個(gè)名字。原來(lái)你們叫 ABCD,但現(xiàn)在需要一個(gè)更專業(yè)的,全局唯一的名字作為標(biāo)識(shí),你把這個(gè)更高端的名字稱為 MAC 地址

你的 MAC 地址是 aa-aa-aa-aa-aa-aa,你的伙伴 b 的 MAC 地址是 bb-bb-bb-bb-bb-bb,以此類推,不重復(fù)就好。

這樣,A 在發(fā)送數(shù)據(jù)包給 B 時(shí),只要在頭部拼接一個(gè)這樣結(jié)構(gòu)的數(shù)據(jù),就可以了。

B 在收到數(shù)據(jù)包后,根據(jù)頭部的目標(biāo) MAC 地址信息,判斷這個(gè)數(shù)據(jù)包的確是發(fā)給自己的,于是便收下

其他的 CDE 收到數(shù)據(jù)包后,根據(jù)頭部的目標(biāo) MAC 地址信息,判斷這個(gè)數(shù)據(jù)包并不是發(fā)給自己的,于是便丟棄

雖然集線器使整個(gè)布局干凈不少,但原來(lái)我只要發(fā)給電腦 B 的消息,現(xiàn)在卻要發(fā)給連接到集線器中的所有電腦,這樣既不安全,又不節(jié)省網(wǎng)絡(luò)資源。

圖解 數(shù)據(jù)鏈路:使用交換機(jī)解決MAC 地址映射問(wèn)題

集線器的問(wèn)題

如果把這個(gè)集線器弄得更智能一些,只發(fā)給目標(biāo) MAC 地址指向的那臺(tái)電腦,就好了。

交換機(jī)的誕生

雖然只比集線器多了這一點(diǎn)點(diǎn)區(qū)別,但看起來(lái)似乎有智能了,你把這東西叫做交換機(jī)。也正因?yàn)檫@一點(diǎn)點(diǎn)智能,你把它放在了另一個(gè)層級(jí),數(shù)據(jù)鏈路層

如上圖所示,你是這樣設(shè)計(jì)的。

交換機(jī)內(nèi)部維護(hù)一張 MAC 地址表,記錄著每一個(gè) MAC 地址的設(shè)備,連接在其哪一個(gè)端口上。

MAC 地址端口
bb-bb-bb-bb-bb-bb1
cc-cc-cc-cc-cc-cc3
aa-aa-aa-aa-aa-aa4
dd-dd-dd-dd-dd-dd5

假如你仍然要發(fā)給 B 一個(gè)數(shù)據(jù)包,構(gòu)造了如下的數(shù)據(jù)結(jié)構(gòu)從網(wǎng)口出去。

到達(dá)交換機(jī)時(shí),交換機(jī)內(nèi)部通過(guò)自己維護(hù)的 MAC 地址表,發(fā)現(xiàn)目標(biāo)機(jī)器 B 的 MAC 地址 bb-bb-bb-bb-bb-bb 映射到了端口 1 上,于是把數(shù)據(jù)從 1 號(hào)端口發(fā)給了 B,完事~

你給這個(gè)通過(guò)這樣傳輸方式而組成的小范圍的網(wǎng)絡(luò),叫做以太網(wǎng)

當(dāng)然最開(kāi)始的時(shí)候,MAC 地址表是空的,是怎么逐步建立起來(lái)的呢?

假如在 MAC 地址表為空是,你給 B 發(fā)送了如下數(shù)據(jù)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-quHDePVL-1615262768771)(https://upload-images.jianshu.io/upload_images/19816137-2195d8e3fa05f616.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

由于這個(gè)包從端口 4 進(jìn)入的交換機(jī),所以此時(shí)交換機(jī)就可以在 MAC地址表記錄第一條數(shù)據(jù):

MAC:aa-aa-aa-aa-aa-aa-aa
端口:4

交換機(jī)看目標(biāo) MAC 地址(bb-bb-bb-bb-bb-bb)在地址表中并沒(méi)有映射關(guān)系,于是將此包發(fā)給了所有端口,也即發(fā)給了所有機(jī)器。

之后,只有機(jī)器 B 收到了確實(shí)是發(fā)給自己的包,于是做出了響應(yīng),響應(yīng)數(shù)據(jù)從端口 1 進(jìn)入交換機(jī),于是交換機(jī)此時(shí)在地址表中更新了第二條數(shù)據(jù):

MAC:bb-bb-bb-bb-bb-bb
端口:1

過(guò)程如下

經(jīng)過(guò)該網(wǎng)絡(luò)中的機(jī)器不斷地通信,交換機(jī)最終將 MAC 地址表建立完畢~

隨著機(jī)器數(shù)量越多,交換機(jī)的端口也不夠了,但聰明的你發(fā)現(xiàn),只要將多個(gè)交換機(jī)連接起來(lái),這個(gè)問(wèn)題就輕而易舉搞定~

你完全不需要設(shè)計(jì)額外的東西,只需要按照之前的設(shè)計(jì)和規(guī)矩來(lái),按照上述的接線方式即可完成所有電腦的互聯(lián),所以交換機(jī)設(shè)計(jì)的這種規(guī)則,真的很巧妙。你想想看為什么(比如 A 要發(fā)數(shù)據(jù)給 F)。

但是你要注意,上面那根紅色的線,最終在 MAC 地址表中可不是一條記錄呀,而是要把 EFGH 這四臺(tái)機(jī)器與該端口(端口6)的映射全部記錄在表中。

MAC 地址和端口的映射記錄

最終,兩個(gè)交換機(jī)將分別記錄 A ~ H 所有機(jī)器的映射記錄

左邊的交換機(jī)

MAC 地址端口
bb-bb-bb-bb-bb-bb1
cc-cc-cc-cc-cc-cc3
aa-aa-aa-aa-aa-aa4
dd-dd-dd-dd-dd-dd5
ee-ee-ee-ee-ee-ee6
ff-ff-ff-ff-ff-ff6
gg-gg-gg-gg-gg-gg6
hh-hh-hh-hh-hh-hh6

右邊的交換機(jī)

MAC 地址端口
bb-bb-bb-bb-bb-bb1
cc-cc-cc-cc-cc-cc1
aa-aa-aa-aa-aa-aa1
dd-dd-dd-dd-dd-dd1
ee-ee-ee-ee-ee-ee2
ff-ff-ff-ff-ff-ff3
gg-gg-gg-gg-gg-gg4
hh-hh-hh-hh-hh-hh6

這在只有 8 臺(tái)電腦的時(shí)候還好,甚至在只有幾百臺(tái)電腦的時(shí)候,都還好,所以這種交換機(jī)的設(shè)計(jì)方式,已經(jīng)足足支撐一陣子了。

但很遺憾,人是貪婪的動(dòng)物,很快,電腦的數(shù)量就發(fā)展到幾千、幾萬(wàn)、幾十萬(wàn)。

圖解 傳輸層:IP地址和路由器

二層交換機(jī)的問(wèn)題

交換機(jī)已經(jīng)無(wú)法記錄如此龐大的映射關(guān)系了。

此時(shí)你動(dòng)了歪腦筋,你發(fā)現(xiàn)了問(wèn)題的根本在于,連出去的那根紅色的網(wǎng)線,后面不知道有多少個(gè)設(shè)備不斷地連接進(jìn)來(lái),從而使得地址表越來(lái)越大。

那我可不可以讓那根紅色的網(wǎng)線,接入一個(gè)新的設(shè)備,這個(gè)設(shè)備就跟電腦一樣有自己獨(dú)立的 MAC 地址,而且同時(shí)還能幫我把數(shù)據(jù)包做一次轉(zhuǎn)發(fā)呢?

這個(gè)設(shè)備就是路由器,它的功能就是,作為一臺(tái)獨(dú)立的擁有 MAC 地址的設(shè)備,并且可以幫我把數(shù)據(jù)包做一次轉(zhuǎn)發(fā)你把它定在了網(wǎng)絡(luò)層。

注意,路由器的每一個(gè)端口,都有獨(dú)立的 MAC 地址

好了,現(xiàn)在交換機(jī)的 MAC 地址表中,只需要多出一條 MAC 地址 ABAB 與其端口的映射關(guān)系,就可以成功把數(shù)據(jù)包轉(zhuǎn)交給路由器了,這條搞定。

那如何做到,把發(fā)送給 C 和 D,甚至是把發(fā)送給 DEFGH… 的數(shù)據(jù)包,統(tǒng)統(tǒng)先發(fā)送給路由器呢?

不難想到這樣一個(gè)點(diǎn)子,假如電腦 C 和 D 的 MAC 地址擁有共同的前綴,比如分別是

C 的 MAC 地址:FFFF-FFFF-CCCC D 的 MAC 地址:FFFF-FFFF-DDDD

那我們就可以說(shuō),將目標(biāo) MAC 地址為 FFFF-FFFF-?開(kāi)頭的,統(tǒng)統(tǒng)先發(fā)送給路由器。

這樣是否可行呢?答案是否定的。

IP地址的誕生

我們先從現(xiàn)實(shí)中 MAC 地址的結(jié)構(gòu)入手,MAC地址也叫物理地址、硬件地址,長(zhǎng)度為 48 位,一般這樣來(lái)表示

00-16-EA-AE-3C-40

它是由網(wǎng)絡(luò)設(shè)備制造商生產(chǎn)時(shí)燒錄在網(wǎng)卡的EPROM(一種閃存芯片,通常可以通過(guò)程序擦寫(xiě))。

其中前 24 位(00-16-EA)代表網(wǎng)絡(luò)硬件制造商的編號(hào),后 24 位(AE-3C-40)是該廠家自己分配的,一般表示系列號(hào)。

只要不更改自己的 MAC 地址,MAC 地址在世界是唯一的。形象地說(shuō),MAC地址就如同身份證上的身份證號(hào)碼,具有唯一性。

那如果你希望向上面那樣表示將目標(biāo) MAC 地址為 FFFF-FFFF-?開(kāi)頭的,統(tǒng)一從路由器出去發(fā)給某一群設(shè)備(后面會(huì)提到這其實(shí)是子網(wǎng)的概念),那你就需要要求某一子網(wǎng)下統(tǒng)統(tǒng)買(mǎi)一個(gè)廠商制造的設(shè)備,要么你就需要要求廠商在生產(chǎn)網(wǎng)絡(luò)設(shè)備燒錄 MAC 地址時(shí),提前按照你規(guī)劃好的子網(wǎng)結(jié)構(gòu)來(lái)定 MAC 地址,并且日后這個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)都不能輕易改變。

這顯然是不現(xiàn)實(shí)的。

于是你發(fā)明了一個(gè)新的地址,給每一臺(tái)機(jī)器一個(gè) 32 位的編號(hào),如:

11000000101010000000000000000001

你覺(jué)得有些不清晰,于是把它分成四個(gè)部分,中間用點(diǎn)相連。

11000000.10101000.00000000.00000001

你還覺(jué)得不清晰,于是把它轉(zhuǎn)換成 10 進(jìn)制。

192.168.0.1

最后你給了這個(gè)地址一個(gè)響亮的名字,IP 地址。現(xiàn)在每一臺(tái)電腦,同時(shí)有自己的 MAC 地址,又有自己的 IP 地址,只不過(guò) IP 地址是軟件層面上的,可以隨時(shí)修改,MAC 地址一般是無(wú)法修改的。

這樣一個(gè)可以隨時(shí)修改的 IP 地址,就可以根據(jù)你規(guī)劃的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),來(lái)調(diào)整了。

如上圖所示,假如我想要發(fā)送數(shù)據(jù)包給 ABCD 其中一臺(tái)設(shè)備,不論哪一臺(tái),我都可以這樣描述,“將 IP 地址為 192.168.0 開(kāi)頭的全部發(fā)送給到路由器,之后再怎么轉(zhuǎn)發(fā),交給它!”,巧妙吧。

路由器的誕生

路由器誕生了,專門(mén)負(fù)責(zé)IP地址的尋找。那報(bào)文交給路由器之后,路由器又是怎么把數(shù)據(jù)包準(zhǔn)確轉(zhuǎn)發(fā)給指定設(shè)備的呢?

別急我們慢慢來(lái)。

我們先給上面的組網(wǎng)方式中的每一臺(tái)設(shè)備,加上自己的 IP 地址

現(xiàn)在兩個(gè)設(shè)備之間傳輸,除了加上數(shù)據(jù)鏈路層的頭部之外,還要再增加一個(gè)網(wǎng)絡(luò)層的頭部。

假如 A 給 B 發(fā)送數(shù)據(jù),由于它們直接連著交換機(jī),所以 A 直接發(fā)出如下數(shù)據(jù)包即可,其實(shí)網(wǎng)絡(luò)層沒(méi)有體現(xiàn)出作用。

但假如 A 給 C 發(fā)送數(shù)據(jù),A 就需要先轉(zhuǎn)交給路由器,然后再由路由器轉(zhuǎn)交給 C。由于最底層的傳輸仍然需要依賴以太網(wǎng),所以數(shù)據(jù)包是分成兩段的。

A ~ 路由器這段的包如下:

路由器到 C 這段的包如下:

好了,上面說(shuō)的兩種情況(A->B,A->C),相信細(xì)心的讀者應(yīng)該會(huì)有不少疑問(wèn),下面我們一個(gè)個(gè)來(lái)展開(kāi)。

子網(wǎng)的由來(lái)

A 給 C 發(fā)數(shù)據(jù)包,怎么知道是否要通過(guò)路由器轉(zhuǎn)發(fā)呢?

答案:子網(wǎng)

如果源 IP 與目的 IP 處于一個(gè)子網(wǎng),直接將包通過(guò)交換機(jī)發(fā)出去。

如果源 IP 與目的 IP 不處于一個(gè)子網(wǎng),就交給路由器去處理。

好,那現(xiàn)在只需要解決,什么叫處于一個(gè)子網(wǎng)就好了。

  • 192.168.0.1 和 192.168.0.2 處于同一個(gè)子網(wǎng)

  • 192.168.0.1 和 192.168.1.1 處于不同子網(wǎng)

這兩個(gè)是我們?nèi)藶橐?guī)定的,即我們想表示,對(duì)于 192.168.0.1 來(lái)說(shuō):

192.168.0.xxx 開(kāi)頭的,就算是在一個(gè)子網(wǎng),否則就是在不同的子網(wǎng)。

那對(duì)于計(jì)算機(jī)來(lái)說(shuō),怎么表達(dá)這個(gè)意思呢?于是人們發(fā)明了子網(wǎng)掩碼的概念

假如某臺(tái)機(jī)器的子網(wǎng)掩碼定為 255.255.255.0

這表示,將源 IP 與目的 IP 分別同這個(gè)子網(wǎng)掩碼進(jìn)行與運(yùn)算****,相等則是在一個(gè)子網(wǎng),不相等就是在不同子網(wǎng),就這么簡(jiǎn)單。

比如

  • A電腦:192.168.0.1 & 255.255.255.0 = 192.168.0.0

  • B電腦:192.168.0.2 & 255.255.255.0 = 192.168.0.0

  • C電腦:192.168.1.1 & 255.255.255.0 = 192.168.1.0

  • D電腦:192.168.1.2 & 255.255.255.0 = 192.168.1.0

那么 A 與 B 在同一個(gè)子網(wǎng),C 與 D 在同一個(gè)子網(wǎng),但是 A 與 C 就不在同一個(gè)子網(wǎng),與 D 也不在同一個(gè)子網(wǎng),以此類推。

所以如果 A 給 C 發(fā)消息,A 和 C 的 IP 地址分別 & A 機(jī)器配置的子網(wǎng)掩碼,發(fā)現(xiàn)不相等,則 A 認(rèn)為 C 和自己不在同一個(gè)子網(wǎng),于是把包發(fā)給路由器,就不管了,之后怎么轉(zhuǎn)發(fā),A 不關(guān)心

A 如何知道,哪個(gè)設(shè)備是路由器?

答案:在 A 上要設(shè)置默認(rèn)網(wǎng)關(guān)

上一步 A 通過(guò)是否與 C 在同一個(gè)子網(wǎng)內(nèi),判斷出自己應(yīng)該把包發(fā)給路由器,那路由器的 IP 是多少呢?

其實(shí)說(shuō)發(fā)給路由器不準(zhǔn)確,應(yīng)該說(shuō) A 會(huì)把包發(fā)給默認(rèn)網(wǎng)關(guān)

對(duì) A 來(lái)說(shuō),A 只能直接把包發(fā)給同處于一個(gè)子網(wǎng)下的某個(gè) IP 上,所以發(fā)給路由器還是發(fā)給某個(gè)電腦,對(duì) A 來(lái)說(shuō)也不關(guān)心,只要這個(gè)設(shè)備有個(gè) IP 地址就行。

所以默認(rèn)網(wǎng)關(guān),就是 A 在自己電腦里配置的一個(gè) IP 地址,以便在發(fā)給不同子網(wǎng)的機(jī)器時(shí),發(fā)給這個(gè) IP 地址。

僅此而已!

路由表的由來(lái)(和Mac表的由來(lái)好像,都是逼出來(lái)的)

路由器如何知道C在哪里?

答案:路由表

現(xiàn)在 A 要給 C 發(fā)數(shù)據(jù)包,已經(jīng)可以成功發(fā)到路由器這里了,最后一個(gè)問(wèn)題就是,路由器怎么知道,收到的這個(gè)數(shù)據(jù)包,該從自己的哪個(gè)端口出去,才能直接(或間接)地最終到達(dá)目的地 C 呢。

路由器收到的數(shù)據(jù)包有目的 IP 也就是 C 的 IP 地址,需要轉(zhuǎn)化成從自己的哪個(gè)端口出去,很容易想到,應(yīng)該有個(gè)表,就像 MAC 地址表一樣。

這個(gè)表就叫路由表

至于這個(gè)路由表是怎么出來(lái)的,有很多路由算法,本文不展開(kāi),因?yàn)槲乙膊粫?huì)哈哈~

不同于 MAC 地址表的是,路由表并不是一對(duì)一這種明確關(guān)系,我們下面看一個(gè)路由表的結(jié)構(gòu)。

目的地址子網(wǎng)掩碼下一跳端口
192.168.0.0255.255.255.00
192.168.0.254255.255.255.2550
192.168.1.0255.255.255.01
192.168.1.254255.255.255.2551

我們學(xué)習(xí)一種新的表示方法,由于子網(wǎng)掩碼其實(shí)就表示前多少位表示子網(wǎng)的網(wǎng)段,所以如 192.168.0.0(255.255.255.0) 也可以簡(jiǎn)寫(xiě)為 192.168.0.0/24

目的地址下一跳端口
192.168.0.0/240
192.168.0.254/320
192.168.1.0/241
192.168.1.254/321

這就很好理解了,路由表就表示,192.168.0.xxx 這個(gè)子網(wǎng)下的,都轉(zhuǎn)發(fā)到 0 號(hào)端口,192.168.1.xxx 這個(gè)子網(wǎng)下的,都轉(zhuǎn)發(fā)到 1 號(hào)端口。下一跳列還沒(méi)有值,我們先不管

配合著結(jié)構(gòu)圖來(lái)看(這里把子網(wǎng)掩碼和默認(rèn)網(wǎng)關(guān)都補(bǔ)齊了)

剛才說(shuō)的都是 IP 層,但發(fā)送數(shù)據(jù)包的數(shù)據(jù)鏈路層需要知道 MAC 地址,可是我只知道 IP 地址該怎么辦呢?

答案:arp

假如你(A)此時(shí)不知道你同伴 B 的 MAC 地址(現(xiàn)實(shí)中就是不知道的,剛剛我們只是假設(shè)已知),你只知道它的 IP 地址,你該怎么把數(shù)據(jù)包準(zhǔn)確傳給 B 呢?

答案很簡(jiǎn)單,在網(wǎng)絡(luò)層,我需要把 IP 地址對(duì)應(yīng)的 MAC 地址找到,也就是通過(guò)某種方式,找到 192.168.0.2 對(duì)應(yīng)的 MAC 地址 BBBB

這種方式就是 arp 協(xié)議,同時(shí)電腦 A 和 B 里面也會(huì)有一張 arp 緩存表,表中記錄著 IP 與 MAC 地址的對(duì)應(yīng)關(guān)系。

IP 地址MAC 地址
192.168.0.2BBBB

一開(kāi)始的時(shí)候這個(gè)表是空的,電腦 A 為了知道電腦 B(192.168.0.2)的 MAC 地址,將會(huì)廣播一條 arp 請(qǐng)求,B 收到請(qǐng)求后,帶上自己的 MAC 地址給 A 一個(gè)響應(yīng)。此時(shí) A 便更新了自己的 arp 表。

這樣通過(guò)大家不斷廣播 arp 請(qǐng)求,最終所有電腦里面都將 arp 緩存表更新完整。

圖解:整個(gè)傳輸過(guò)程

從各個(gè)節(jié)點(diǎn)的視角來(lái)看

電腦視角

  • 首先我要知道我的 IP 以及對(duì)方的 IP

  • 通過(guò)子網(wǎng)掩碼判斷我們是否在同一個(gè)子網(wǎng)

  • 在同一個(gè)子網(wǎng)就通過(guò) arp 獲取對(duì)方 mac 地址直接扔出去

  • 不在同一個(gè)子網(wǎng)就通過(guò) arp 獲取默認(rèn)網(wǎng)關(guān)的 mac 地址直接扔出去

交換機(jī)視角:

  • 我收到的數(shù)據(jù)包必須有目標(biāo) MAC 地址

  • 通過(guò) MAC 地址表查映射關(guān)系

  • 查到了就按照映射關(guān)系從我的指定端口發(fā)出去

  • 查不到就所有端口都發(fā)出去

路由器視角:

  • 我收到的數(shù)據(jù)包必須有目標(biāo) IP 地址

  • 通過(guò)路由表查映射關(guān)系

  • 查到了就按照映射關(guān)系從我的指定端口發(fā)出去(不在任何一個(gè)子網(wǎng)范圍,走其路由器的默認(rèn)網(wǎng)關(guān)也是查到了)

  • 查不到則返回一個(gè)路由不可達(dá)的數(shù)據(jù)包

如果你嗅覺(jué)足夠敏銳,你應(yīng)該可以感受到下面這句話:

網(wǎng)絡(luò)層(IP協(xié)議)本身沒(méi)有傳輸包的功能,包的實(shí)際傳輸是委托給數(shù)據(jù)鏈路層(以太網(wǎng)中的交換機(jī))來(lái)實(shí)現(xiàn)的。

涉及到的三張表分別是

  • 交換機(jī)中有 MAC 地址表用于映射 MAC 地址和它的端口

  • 路由器中有路由表用于映射 IP 地址(段)和它的端口

  • 電腦和路由器中都有** arp 緩存表**用于緩存 IP 和 MAC 地址的映射關(guān)系

這三張表是怎么來(lái)的

  • MAC 地址表是通過(guò)以太網(wǎng)內(nèi)各節(jié)點(diǎn)之間不斷通過(guò)交換機(jī)通信,不斷完善起來(lái)的。

  • 路由表是各種路由算法 + 人工配置逐步完善起來(lái)的。

  • arp 緩存表是不斷通過(guò) arp 協(xié)議的請(qǐng)求逐步完善起來(lái)的。

知道了以上這些,目前網(wǎng)絡(luò)上兩個(gè)節(jié)點(diǎn)是如何發(fā)送數(shù)據(jù)包的這個(gè)過(guò)程,就完全可以解釋通了!

參考的網(wǎng)絡(luò)拓?fù)鋱D

那接下來(lái)我們就放上參考的 最后一個(gè)網(wǎng)絡(luò)拓?fù)鋱D吧,請(qǐng)做好 戰(zhàn)斗 準(zhǔn)備!

這時(shí)路由器 1 連接了路由器 2,所以其路由表有了下一條地址這一個(gè)概念,所以它的路由表就變成了這個(gè)樣子。如果匹配到了有下一跳地址的一項(xiàng),則需要再次匹配,找到其端口,并找到下一跳 IP 的 MAC 地址。

也就是說(shuō)找來(lái)找去,最終必須能映射到一個(gè)端口號(hào),然后從這個(gè)端口號(hào)把數(shù)據(jù)包發(fā)出去。

目的地址下一跳端口
192.168.0.0/240
192.168.0.254/320
192.168.1.0/241
192.168.1.254/321
192.168.2.0/24192.168.100.5
192.168.100.0/242
192.168.100.4/322

這時(shí)如果 A 給 F 發(fā)送一個(gè)數(shù)據(jù)包,能不能通呢?如果通的話整個(gè)過(guò)程是怎樣的呢?

思考一分鐘…

詳細(xì)過(guò)程動(dòng)畫(huà)描述:

詳細(xì)過(guò)程文字描述:

1. 首先 A(192.168.0.1)通過(guò)子網(wǎng)掩碼(255.255.255.0)計(jì)算出自己與 F(192.168.2.2)并不在同一個(gè)子網(wǎng)內(nèi),于是決定發(fā)送給默認(rèn)網(wǎng)關(guān)(192.168.0.254)

2. A 通過(guò) ARP 找到 默認(rèn)網(wǎng)關(guān) 192.168.0.254 的 MAC 地址。

3. A 將源 MAC 地址(AAAA)與網(wǎng)關(guān) MAC 地址(ABAB)封裝在數(shù)據(jù)鏈路層頭部,又將源 IP 地址(192.168.0.1)和目的 IP 地址(192.168.2.2)(注意這里千萬(wàn)不要以為填寫(xiě)的是默認(rèn)網(wǎng)關(guān)的 IP 地址,從始至終這個(gè)數(shù)據(jù)包的兩個(gè) IP 地址都是不變的,只有 MAC 地址在不斷變化)封裝在網(wǎng)絡(luò)層頭部,然后發(fā)包

4. 交換機(jī) 1 收到數(shù)據(jù)包后,發(fā)現(xiàn)目標(biāo) MAC 地址是 ABAB,轉(zhuǎn)發(fā)給路由器1

5. 數(shù)據(jù)包來(lái)到了路由器 1,發(fā)現(xiàn)其目標(biāo) IP 地址是 192.168.2.2,查看其路由表,發(fā)現(xiàn)了下一跳的地址是 192.168.100.5*

6. 所以此時(shí)路由器 1 需要做兩件事,第一件是再次匹配路由表,發(fā)現(xiàn)匹配到了端口為 2,于是將其封裝到數(shù)據(jù)鏈路層,最后把包從 2 號(hào)口發(fā)出去。

7. 此時(shí)路由器 2 收到了數(shù)據(jù)包,看到其目的地址是 192.168.2.2,查詢其路由表,匹配到端口號(hào)為 1,準(zhǔn)備從 1 號(hào)口把數(shù)據(jù)包送出去。

8. 但此時(shí)路由器 2 需要知道 192.168.2.2 的 MAC 地址了,于是查看其 arp 緩存,找到其 MAC 地址為 FFFF,將其封裝在數(shù)據(jù)鏈路層頭部,并從 1 號(hào)端口把包發(fā)出去。

9. 交換機(jī) 3 收到了數(shù)據(jù)包,發(fā)現(xiàn)目的 MAC 地址為 FFFF,查詢其 MAC 地址表,發(fā)現(xiàn)應(yīng)該從其 6 號(hào)端口出去,于是從 6 號(hào)端口把數(shù)據(jù)包發(fā)出去。

**10.**F 最終收到了數(shù)據(jù)包!**并且發(fā)現(xiàn)目的 MAC 地址就是自己,于是收下了這個(gè)包

HTTP報(bào)文傳輸原理

利用TCP/IP進(jìn)行網(wǎng)絡(luò)通信時(shí),數(shù)據(jù)包會(huì)按照分層順序與對(duì)方進(jìn)行通信。發(fā)送端從應(yīng)用層往下走,接收端從鏈路層往上走。從客戶端到服務(wù)器的數(shù)據(jù),每一幀數(shù)據(jù)的傳輸?shù)捻樞蚨紴?#xff1a;應(yīng)用層->運(yùn)輸層->網(wǎng)絡(luò)層->鏈路層->鏈路層->網(wǎng)絡(luò)層->運(yùn)輸層->應(yīng)用層。

HTTP報(bào)文傳輸過(guò)程

以一個(gè)HTTP請(qǐng)求的傳輸為例,請(qǐng)求從HTTP客戶端(如瀏覽器)和HTTP服務(wù)端應(yīng)用的傳輸過(guò)程,大致如下圖所示:

圖:HTTP請(qǐng)求報(bào)文的分層傳輸過(guò)程

數(shù)據(jù)封裝和分用

接下來(lái),為大家介紹一下數(shù)據(jù)封裝和分用。

數(shù)據(jù)通過(guò)互聯(lián)網(wǎng)傳輸?shù)臅r(shí)候不可能是光禿禿的不加標(biāo)識(shí),如果這樣數(shù)據(jù)就會(huì)亂。所以數(shù)據(jù)在發(fā)送的時(shí)候,需要加上特定標(biāo)識(shí),加上特定標(biāo)識(shí)的過(guò)程叫做數(shù)據(jù)的封裝,在數(shù)據(jù)使用的時(shí)候再去掉特定標(biāo)識(shí),去掉特定標(biāo)識(shí)的過(guò)程就叫做分用。TCP/IP協(xié)議的數(shù)據(jù)封裝和分用過(guò)程,大致如下圖所示:

圖:TCP/IP協(xié)議的數(shù)據(jù)封裝和分用過(guò)程

在數(shù)據(jù)封裝時(shí),數(shù)據(jù)經(jīng)過(guò)每個(gè)層都會(huì)打上該層特定標(biāo)識(shí),添加上頭部。

在傳輸層封裝時(shí),添加的報(bào)文首部時(shí)要存入一個(gè)應(yīng)用程序的標(biāo)識(shí)符,無(wú)論TCP和UDP都用一個(gè)16位的端口號(hào)來(lái)表示不同的應(yīng)用程序,并且都會(huì)將源端口和目的端口存入報(bào)文首部中。

在網(wǎng)絡(luò)層封裝時(shí),IP首部會(huì)標(biāo)識(shí)處理數(shù)據(jù)的協(xié)議類型,或者說(shuō)標(biāo)識(shí)出網(wǎng)絡(luò)層數(shù)據(jù)幀所攜帶的上層數(shù)據(jù)類型,如TCP、UDP、ICMP、IP、IGMP等等。
具體來(lái)說(shuō),會(huì)在IP首部中存入一個(gè)長(zhǎng)度為8位的數(shù)值,稱作協(xié)議域:
1表示為ICMP協(xié)議、2表示為IGMP協(xié)議、6表示為T(mén)CP協(xié)議、17表示為UDP協(xié)議、等等。IP首部還會(huì)標(biāo)識(shí)發(fā)送方地址(源IP)和接收方地址(目標(biāo)IP)。

在鏈路層封裝時(shí),網(wǎng)絡(luò)接口分別要發(fā)送和接收IP、ARP和RARP等多種不同協(xié)議的報(bào)文,因此也必須在以太網(wǎng)的幀首部中加入某種形式的標(biāo)識(shí),以指明所處理的協(xié)議類型,為此,以太網(wǎng)的報(bào)文幀的首部也有一個(gè)16位的類型域,標(biāo)識(shí)出以太網(wǎng)數(shù)據(jù)幀所攜帶的上層數(shù)據(jù)類型,如IPv4、ARP、IPV6、PPPoE等等。

數(shù)據(jù)封裝和分用的過(guò)程大致為:發(fā)送端每通過(guò)一層會(huì)增加該層的首部,接收端每通過(guò)一層則刪除該層的首部。

總體來(lái)說(shuō),TCP/IP分層管理、數(shù)據(jù)封裝和分用的好處:分層之后若需改變相關(guān)設(shè)計(jì),只需替換變動(dòng)的層。各層之間的接口部分規(guī)劃好之后,每個(gè)層次內(nèi)部的設(shè)計(jì)就可以自由改動(dòng)。層次化之后,設(shè)計(jì)也變得相對(duì)簡(jiǎn)單:各個(gè)層只需考慮分派給自己的傳輸任務(wù)。

TCP/IP與OSI的區(qū)別主要有哪些呢?除了TCP/IP與OSI在分層模塊上稍有區(qū)別,更重要的區(qū)別為:OSI參考模型注重“通信協(xié)議必要的功能是什么”,而TCP/IP則更強(qiáng)調(diào)“在計(jì)算機(jī)上實(shí)現(xiàn)協(xié)議應(yīng)該開(kāi)發(fā)哪種程序”。

實(shí)際上,在傳輸過(guò)程中,數(shù)據(jù)報(bào)文會(huì)在不同的物理網(wǎng)絡(luò)之間傳遞,還是以一個(gè)HTTP請(qǐng)求的傳輸為例,請(qǐng)求在不同物理網(wǎng)絡(luò)之間的傳輸過(guò)程,大致如下圖所示:

圖:HTTP請(qǐng)求在不同物理網(wǎng)絡(luò)之間的傳輸過(guò)程

數(shù)據(jù)包在不同物理網(wǎng)絡(luò)之間的傳輸過(guò)程中,網(wǎng)絡(luò)層會(huì)通過(guò)路由器去對(duì)不同的網(wǎng)絡(luò)之間的數(shù)據(jù)包進(jìn)行存儲(chǔ)、分組轉(zhuǎn)發(fā)處理。構(gòu)造互連網(wǎng)最簡(jiǎn)單的方法是把兩個(gè)或多個(gè)網(wǎng)絡(luò)通過(guò)路由器進(jìn)行連接。路由器可以簡(jiǎn)單理解為一種特殊的用于網(wǎng)絡(luò)互連的硬件盒,其作用是為不同類型的物理網(wǎng)絡(luò)提供連接:以太網(wǎng)、令牌環(huán)網(wǎng)、點(diǎn)對(duì)點(diǎn)的鏈接和FDDI(光纖分布式數(shù)據(jù)接口)等等。

物理網(wǎng)絡(luò)之間通過(guò)路由器進(jìn)行互連,隨著增加不同類型的物理網(wǎng)絡(luò),可能會(huì)有很多個(gè)路由器,但是對(duì)于應(yīng)用層來(lái)說(shuō)仍然是一樣的,TCP協(xié)議棧為大家屏蔽了物理層的復(fù)雜性。總之,物理細(xì)節(jié)和差異性的隱藏,使得互聯(lián)網(wǎng)TCP/IP傳輸?shù)墓δ茏兊梅浅?qiáng)大。

接下來(lái),開(kāi)始為大家介紹與傳輸性能有密切關(guān)系的內(nèi)容:TCP傳輸層的三次握手建立連接,四次揮手釋放連接。不過(guò)在此之前,還得先介紹一下TCP報(bào)文協(xié)議。

TCP協(xié)議的報(bào)文格式

在TCP/IP協(xié)議棧中,IP協(xié)議層只關(guān)心如何使數(shù)據(jù)能夠跨越本地網(wǎng)絡(luò)邊界的問(wèn)題,而不關(guān)心數(shù)據(jù)如何傳輸。整體TCP/IP協(xié)議棧,共同配合一起解決數(shù)據(jù)如何通過(guò)許許多多個(gè)點(diǎn)對(duì)點(diǎn)通路,順利傳輸?shù)竭_(dá)目的地。一個(gè)點(diǎn)對(duì)點(diǎn)通路被稱為一“跳”(hop),通過(guò)TCP/IP協(xié)議棧,網(wǎng)絡(luò)成員能夠在許多“跳”的基礎(chǔ)上建立相互的數(shù)據(jù)通路。

傳輸層TCP協(xié)議提供了一種面向連接的、可靠的字節(jié)流服務(wù),其數(shù)據(jù)幀格式,大致如下圖所示:

圖:傳輸層TCP協(xié)議的數(shù)據(jù)幀格式

一個(gè)傳輸層TCP協(xié)議的數(shù)據(jù)幀,大致包含以下字段:

(一)源端口號(hào)

源端口號(hào)表示報(bào)文的發(fā)送端口,占16位。源端口和源IP地址組合起來(lái),可以標(biāo)識(shí)報(bào)文的發(fā)送地址。

(二)目的端口號(hào)

目的端口號(hào)表示報(bào)文的接收端口,占16位。目的端口和目的IP地址相結(jié)合,可以標(biāo)識(shí)報(bào)文的接收地址。

TCP協(xié)議是基于IP協(xié)議的基礎(chǔ)上傳輸?shù)?#xff0c;TCP報(bào)文中的源端口號(hào)+源IP,與TCP報(bào)文中的目的端口號(hào)+目的IP一起,組合起來(lái)唯一性的確定一條TCP連接。

(三)序號(hào)(Sequence Number)

TCP傳輸過(guò)程中,在發(fā)送端出的字節(jié)流中,傳輸報(bào)文中的數(shù)據(jù)部分的每一個(gè)字節(jié)都有它的編號(hào)。序號(hào)(Sequence
Number)占32位,發(fā)起方發(fā)送數(shù)據(jù)時(shí),都需要標(biāo)記序號(hào)。

序號(hào)(Sequence Number)的語(yǔ)義與SYN控制標(biāo)志(Control
Bits)的值有關(guān)。根據(jù)控制標(biāo)志(Control Bits)中的SYN是否為1,序號(hào)(Sequence
Number)表達(dá)不同的含義:

(1)當(dāng)SYN = 1時(shí),當(dāng)前為連接建立階段,此時(shí)的序號(hào)為初始序號(hào)ISN((Initial Sequence
Number),通過(guò)算法來(lái)隨機(jī)生成序號(hào);

(2)當(dāng)SYN = 0時(shí)在數(shù)據(jù)傳輸正式開(kāi)始時(shí),第一個(gè)報(bào)文的序號(hào)為 ISN +
1,后面的報(bào)文的序號(hào),為前一個(gè)報(bào)文的SN值+TCP報(bào)文的凈荷字節(jié)數(shù)(不包含TCP頭)。比如,如果發(fā)送端發(fā)送的一個(gè)TCP幀的凈荷為12byte,序號(hào)為5,則發(fā)送端接著發(fā)送的下一個(gè)數(shù)據(jù)包的時(shí)候,序號(hào)的值應(yīng)該設(shè)置為5+12=17。

在數(shù)據(jù)傳輸過(guò)程中,TCP協(xié)議通過(guò)序號(hào)(Sequence
Number)對(duì)上層提供有序的數(shù)據(jù)流。發(fā)送端可以用序號(hào)來(lái)跟蹤發(fā)送的數(shù)據(jù)量;接收端可以用序號(hào)識(shí)別出重復(fù)接收到的TCP包,從而丟棄重復(fù)包;對(duì)于亂序的數(shù)據(jù)包,接收端也可以依靠序號(hào)對(duì)其進(jìn)行排序。

(四)確認(rèn)序號(hào)(Acknowledgment Number)

確認(rèn)序號(hào)(Acknowledgment
Number)標(biāo)識(shí)了報(bào)文接收端期望接收的字節(jié)序列。如果設(shè)置了ACK控制位,確認(rèn)序號(hào)的值表示一個(gè)準(zhǔn)備接收的包的序列碼,注意,它所指向的是準(zhǔn)備接收的包,也就是下一個(gè)期望接收的包的序列碼。

舉個(gè)例子,假設(shè)發(fā)送端(如Client)發(fā)送3個(gè)凈荷為1000byte、起始SN序號(hào)為1的數(shù)據(jù)包給Server服務(wù)端,Server每收到一個(gè)包之后,需要回復(fù)一個(gè)ACK響應(yīng)確認(rèn)數(shù)據(jù)包給Client。ACK響應(yīng)數(shù)據(jù)包的ACK
Number值,為每個(gè)Client包的為SN+包凈荷,既表示Server已經(jīng)確認(rèn)收到的字節(jié)數(shù),還表示期望接收到的下一個(gè)Client發(fā)送包的SN序號(hào),具體的ACK值如下圖左邊的正常傳輸部分所示。

圖:傳輸過(guò)程的確認(rèn)序號(hào)(Acknowledgment Number)值示例圖

在上圖的左邊部分,Server第1個(gè)ACK包的ACK
Number值為1001,是通過(guò)Client第1個(gè)包的SN+包凈荷=1+1000計(jì)算得到,表示期望第2個(gè)Client包的SN序號(hào)為1001;Server第2個(gè)ACK包的ACK
Number值為2001,為Client第2個(gè)包的SN+包凈荷=2001,表示期望第3個(gè)Server包的SN為2001,以此類推。

如果發(fā)生錯(cuò)誤,假設(shè)Server在處理Client的第二個(gè)發(fā)送包異常,Server仍然回復(fù)一個(gè)ACK
Number值為1001的確認(rèn)包,則Client的第二個(gè)數(shù)據(jù)包需要重復(fù)發(fā)送,具體的ACK值如上圖右邊的正常傳輸部分所示。

只有控制標(biāo)志的ACK標(biāo)志為1時(shí),數(shù)據(jù)幀中的確認(rèn)序號(hào)ACK
Number才有效。TCP協(xié)議規(guī)定,連接建立后,所有發(fā)送的報(bào)文的ACK必須為1,也就是建立連接后,所有報(bào)文的確認(rèn)序號(hào)有效。如果是SYN類型的報(bào)文,其ACK標(biāo)志為0,故沒(méi)有確認(rèn)序號(hào)。

(五)頭部長(zhǎng)度

該字段占用4位,用來(lái)表示TCP報(bào)文首部的長(zhǎng)度,單位是4bit位。其值所表示的并不是字節(jié)數(shù),而是頭部的所含有的32bit的數(shù)目(或者倍數(shù)),或者4個(gè)字節(jié)的倍數(shù),所以TCP頭部最多可以有60字節(jié)(4*15=60)。沒(méi)有任何選項(xiàng)字段的TCP頭部長(zhǎng)度為20字節(jié),所以其頭部長(zhǎng)度為5,可以通過(guò)20/4=5計(jì)算得到。

(六)預(yù)留6位

頭部長(zhǎng)度后面預(yù)留的字段長(zhǎng)度為6位,作為保留字段,暫時(shí)沒(méi)有什么用處。

(七)控制標(biāo)志

控制標(biāo)志(Control
Bits)共6個(gè)bit位,具體的標(biāo)志位為:URG、ACK、PSH、RST、SYN、FIN。6個(gè)標(biāo)志位的說(shuō)明,如下表所示。

表:TCP報(bào)文控制標(biāo)志(Control Bits)說(shuō)明

標(biāo)志位說(shuō)明
URG占1位,表示緊急指針字段有效。URG位指示報(bào)文段里的上層實(shí)體(數(shù)據(jù))標(biāo)記為“緊急”數(shù)據(jù)。當(dāng)URG=1時(shí),其后的緊急指針指示緊急數(shù)據(jù)在當(dāng)前數(shù)據(jù)段中的位置(相對(duì)于當(dāng)前序列號(hào)的字節(jié)偏移量),TCP接收方必須通知上層實(shí)體。
ACK占1位,置位ACK=1表示確認(rèn)號(hào)字段有效;TCP協(xié)議規(guī)定,接建立后所有發(fā)送的報(bào)文的ACK必須為1;當(dāng)ACK=0時(shí),表示該數(shù)據(jù)段不包含確認(rèn)信息。當(dāng)ACK=1時(shí),表示該報(bào)文段包括一個(gè)對(duì)已被成功接收?qǐng)?bào)文段的確認(rèn)序號(hào)Acknowledgment Number,該序號(hào)同時(shí)也是下一個(gè)報(bào)文的預(yù)期序號(hào)。
PSH占1位,表示當(dāng)前報(bào)文需要請(qǐng)求推(push)操作;當(dāng)PSH=1時(shí),接收方在收到數(shù)據(jù)后立即將數(shù)據(jù)交給上層,而不是直到整個(gè)緩沖區(qū)滿。
RST占1位,置位RST=1表示復(fù)位TCP連接;用于重置一個(gè)已經(jīng)混亂的連接,也可用于拒絕一個(gè)無(wú)效的數(shù)據(jù)段或者拒絕一個(gè)連接請(qǐng)求。如果數(shù)據(jù)段被設(shè)置了RST位,說(shuō)明報(bào)文發(fā)送方有問(wèn)題發(fā)生。
SYN占1位,在連接建立時(shí)用來(lái)同步序號(hào)。當(dāng)SYN=1而ACK=0時(shí),表明這是一個(gè)連接請(qǐng)求報(bào)文。對(duì)方若同意建立連接,則應(yīng)在響應(yīng)報(bào)文中使SYN=1和ACK=1。 綜合一下,SYN置1就表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文。
FIN占1位,用于在釋放TCP連接時(shí),標(biāo)識(shí)發(fā)送方比特流結(jié)束,用來(lái)釋放一個(gè)連接。當(dāng) FIN = 1時(shí),表明此報(bào)文的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢,并要求釋放連接。

在連接建立的三次握手過(guò)程中,若只是單個(gè)SYN置位,表示的只是建立連接請(qǐng)求。如果SYN和ACK同時(shí)置位為1,表示的建立連接之后的響應(yīng)。

(八)窗口大小:

長(zhǎng)度為16位,共2個(gè)字節(jié)。此字段用來(lái)進(jìn)行流量控制。流量控制的單位為字節(jié)數(shù),這個(gè)值是本端期望一次接收的字節(jié)數(shù)。

(九)校驗(yàn)和:

長(zhǎng)度為16位,共2個(gè)字節(jié)。對(duì)整個(gè)TCP報(bào)文段,即TCP頭部和TCP數(shù)據(jù)進(jìn)行校驗(yàn)和計(jì)算,接收端用于對(duì)收到的數(shù)據(jù)包進(jìn)行驗(yàn)證。

(十)緊急指針:

長(zhǎng)度為16位,2個(gè)字節(jié)。它是一個(gè)偏移量,和SN序號(hào)值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)。

以上十項(xiàng)內(nèi)容是TCP報(bào)文首部必須的字段,也稱固有字段,長(zhǎng)度為20個(gè)字節(jié)。接下來(lái)是TCP報(bào)文的可選項(xiàng)和填充部分。

(十一)可選項(xiàng)和填充部分

可選項(xiàng)和填充部分的長(zhǎng)度為4n字節(jié)(n是整數(shù)),該部分是根據(jù)需要而增加的選項(xiàng)。如果不足4n字節(jié),要加填充位,使得選項(xiàng)長(zhǎng)度為32位(4字節(jié))的整數(shù)倍,具體的做法是在這個(gè)字段中加入額外的零,以確保TCP頭是32位(4字節(jié))的整數(shù)倍。

最常見(jiàn)的選項(xiàng)字段是MSS(Maximum Segment
Size最長(zhǎng)報(bào)文大小),每個(gè)連接方通常都在通信的第一個(gè)報(bào)文段(SYN標(biāo)志為1的那個(gè)段)中指明這個(gè)選項(xiàng)字段,表示當(dāng)前連接方所能接受的最大報(bào)文段的長(zhǎng)度。

由于可選項(xiàng)和填充部分不是必須的,所以TCP報(bào)文首部最小長(zhǎng)度為20個(gè)字節(jié)。

至此,TCP報(bào)文首部的字段,就全部介紹完了。TCP報(bào)文首部的后面,接著的是數(shù)據(jù)部分,不過(guò)數(shù)據(jù)部分是可選的。在一個(gè)連接建立和一個(gè)連接終止時(shí),雙方交換的報(bào)文段僅有TCP首部。如果一方?jīng)]有數(shù)據(jù)要發(fā)送,也使用沒(méi)有任何數(shù)據(jù)的首部來(lái)確認(rèn)收到的數(shù)據(jù),比如在處理超時(shí)的過(guò)程中,也會(huì)發(fā)送不帶任何數(shù)據(jù)的報(bào)文段。

總體來(lái)說(shuō),TCP協(xié)議的可靠性,主要通過(guò)以下幾點(diǎn)來(lái)保障:

(1)應(yīng)用數(shù)據(jù)分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊。這部分是通過(guò)MSS(最大數(shù)據(jù)包長(zhǎng)度)選項(xiàng)來(lái)控制的,通常這種機(jī)制也被稱為一種協(xié)商機(jī)制,MSS規(guī)定了TCP傳往另一端的最大數(shù)據(jù)塊的長(zhǎng)度。值得注意的是,MSS只能出現(xiàn)在SYN報(bào)文段中,若一方不接收來(lái)自另一方的MSS值,則MSS就定為536字節(jié)。一般來(lái)講,MSS值還是越大越好,這樣可以提高網(wǎng)絡(luò)的利用率。

(2)重傳機(jī)制。設(shè)置定時(shí)器,等待確認(rèn)包,如果定時(shí)器超時(shí)還沒(méi)有收到確認(rèn)包,則報(bào)文重傳。

(3)對(duì)首部和數(shù)據(jù)進(jìn)行校驗(yàn)。

(4)接收端對(duì)收到的數(shù)據(jù)進(jìn)行排序,然后交給應(yīng)用層。

(5)接收端丟棄重復(fù)的數(shù)據(jù)。

(6)TCP還提供流量控制,主要是通過(guò)滑動(dòng)窗口來(lái)實(shí)現(xiàn)流量控制。

至此TCP協(xié)議的數(shù)據(jù)幀格式介紹完了。接下來(lái)開(kāi)始為大家重點(diǎn)介紹:TCP傳輸層的三次握手建立連接,四次揮手釋放連接。

TCP的三次握手

TCP連接的建立時(shí),雙方需要經(jīng)過(guò)三次握手,而斷開(kāi)連接時(shí),雙方需要經(jīng)過(guò)四次分手,那么,其三次握手和四次分手分別做了什么呢?又是如何進(jìn)行的呢?

通常情況下,建立連接的雙方,由一端打開(kāi)一個(gè)監(jiān)聽(tīng)套接字(ServerSocket)來(lái)監(jiān)聽(tīng)來(lái)自請(qǐng)求方的TCP(Socket)連接,當(dāng)服務(wù)器端監(jiān)聽(tīng)開(kāi)始時(shí),必須做好準(zhǔn)備接受外來(lái)的連接,在Java中該操作通過(guò)創(chuàng)建一個(gè)ServerSocket服務(wù)監(jiān)聽(tīng)套接字實(shí)例來(lái)完成,此操作會(huì)調(diào)用底層操作系統(tǒng)(如Linux)的C代碼中三個(gè)函數(shù)socket()、bind()、listen()
來(lái)完成。開(kāi)始監(jiān)聽(tīng)之后,服務(wù)器端就做好接受外來(lái)連接的準(zhǔn)備,如果監(jiān)聽(tīng)到建立新連接的請(qǐng)求,會(huì)開(kāi)啟一個(gè)傳輸套接字,稱之為被動(dòng)打開(kāi)(Passive
Open)。

一段簡(jiǎn)單的服務(wù)端監(jiān)聽(tīng)新連接請(qǐng)求,并且被動(dòng)打開(kāi)(Passive
Open)傳輸套接字的Java示例代碼,具體如下:

public class SocketServer {public static void main(String[] args) {try {// 創(chuàng)建服務(wù)端socketServerSocket serverSocket = new ServerSocket(8080);//循環(huán)監(jiān)聽(tīng)等待客戶端的連接while(true){//監(jiān)聽(tīng)到客戶端連接,傳輸套接字被動(dòng)開(kāi)啟Socket socket = serverSocket.accept();//開(kāi)啟線程進(jìn)行連接的IO處理ServerThread thread = new ServerThread(socket);thread.start();......}} catch (Exception e) {// 處理異常e.printStackTrace();}}}

客戶端在發(fā)起連接建立時(shí),Java代碼通過(guò)創(chuàng)建Socket實(shí)例,調(diào)用底層的connect(…)方法,主動(dòng)打開(kāi)(Active
Open)Socket連接。套接字監(jiān)聽(tīng)方在收到請(qǐng)求之后,監(jiān)聽(tīng)方和發(fā)起方(客戶端)之間就會(huì)建立一條的連接通道,該通道由雙方IP和雙方端口所唯一確定。

一段簡(jiǎn)單的客戶端連接主動(dòng)打開(kāi)(Active Open)的Java示例代碼,具體如下:

public class SocketClient {public static void main(String[] args) throws InterruptedException {try {// 和服務(wù)器創(chuàng)建連接Socket socket = new Socket("localhost",8080);// 寫(xiě)入給監(jiān)聽(tīng)方的輸出流OutputStream os = socket.getOutputStream();…..// 讀取監(jiān)聽(tīng)方的輸入流InputStream is = socket.getInputStream();…..} catch (Exception e) {e.printStackTrace();}}}

三次握手過(guò)程

TCP連接的建立時(shí),雙方需要經(jīng)過(guò)三次握手,具體過(guò)程如下:

(1)第一次握手:Client進(jìn)入SYN_SENT狀態(tài),發(fā)送一個(gè)SYN幀來(lái)主動(dòng)打開(kāi)傳輸通道,該幀的SYN標(biāo)志位被設(shè)置為1,同時(shí)會(huì)帶上Client分配好的SN序列號(hào),該SN是根據(jù)時(shí)間產(chǎn)生的一個(gè)隨機(jī)值,通常情況下每間隔4ms會(huì)加1。除此之外,SYN幀還會(huì)帶一個(gè)MSS(最大報(bào)文段長(zhǎng)度)可選項(xiàng)的值,表示客戶端發(fā)送出去的最大數(shù)據(jù)塊的長(zhǎng)度。

(2)第二次握手:Server端在收到SYN幀之后,會(huì)進(jìn)入SYN_RCVD狀態(tài),同時(shí)返回SYN+ACK幀給Client,主要目的在于通知Client,Server端已經(jīng)收到SYN消息,現(xiàn)在需要進(jìn)行確認(rèn)。Server端發(fā)出的SYN+ACK幀的ACK標(biāo)志位被設(shè)置為1,其確認(rèn)序號(hào)AN(Acknowledgment
Number)值被設(shè)置為Client的SN+1;SYN+ACK幀的SYN標(biāo)志位被設(shè)置為1,SN值為Server端生成的SN序號(hào);SYN+ACK幀的MSS(最大報(bào)文段長(zhǎng)度)表示的是Server端的最大數(shù)據(jù)塊長(zhǎng)度。

(3)第三次握手:Client在收到Server的第二次握手SYN+ACK確認(rèn)幀之后,首先將自己的狀態(tài)會(huì)從SYN_SENT變成ESTABLISHED,表示自己方向的連接通道已經(jīng)建立成功,Client可以發(fā)送數(shù)據(jù)給Server端了。然后,Client發(fā)ACK幀給Server端,該ACK幀的ACK標(biāo)志位被設(shè)置為1,其確認(rèn)序號(hào)AN(Acknowledgment
Number)值被設(shè)置為Server端的SN序列號(hào)+1。還有一種情況,Client可能會(huì)將ACK幀和第一幀要發(fā)送的數(shù)據(jù),合并到一起發(fā)送給Server端。

(4)Server端在收到Client的ACK幀之后,會(huì)從SYN_RCVD狀態(tài)會(huì)進(jìn)入ESTABLISHED狀態(tài),至此,Server方向的通道連接建立成功,Server可以發(fā)送數(shù)據(jù)給Client,TCP的全雙工連接建立完成。

三次握手的圖解

三次握手的交互過(guò)程,具體如下圖所示:

圖:TCP建立的連接時(shí)三次握手示意圖

Client和Server完成了三次握手后,雙方就進(jìn)入了數(shù)據(jù)傳輸?shù)碾A段。數(shù)據(jù)傳輸完成后,連接將斷開(kāi),連接斷開(kāi)的過(guò)程需要經(jīng)歷四次揮手。

TCP的四次揮手

業(yè)務(wù)數(shù)據(jù)通信完成之后,TCP連接開(kāi)始斷開(kāi)(或者拆接)的過(guò)程,在這個(gè)過(guò)程中連接的每個(gè)端的都能獨(dú)立地、主動(dòng)的發(fā)起,斷開(kāi)的過(guò)程TCP協(xié)議使用了四路揮手操作。

四次揮手具體過(guò)程

四次揮手具體過(guò)程,具體如下:

(1)第一次揮手:主動(dòng)斷開(kāi)方(可以是客戶端,也可以是服務(wù)器端),向?qū)Ψ桨l(fā)送一個(gè)FIN結(jié)束請(qǐng)求報(bào)文,此報(bào)文的FIN位被設(shè)置為1,并且正確設(shè)置Sequence
Number(序列號(hào))和Acknowledgment
Number(確認(rèn)號(hào))。發(fā)送完成后,主動(dòng)斷開(kāi)方進(jìn)入FIN_WAIT_1狀態(tài),這表示主動(dòng)斷開(kāi)方?jīng)]有業(yè)務(wù)數(shù)據(jù)要發(fā)送給對(duì)方,準(zhǔn)備關(guān)閉SOCKET連接了。

(2)第二次揮手:正常情況下,在收到了主動(dòng)斷開(kāi)方發(fā)送的FIN斷開(kāi)請(qǐng)求報(bào)文后,被動(dòng)斷開(kāi)方會(huì)發(fā)送一個(gè)ACK響應(yīng)報(bào)文,報(bào)文的Acknowledgment
Number(確認(rèn)號(hào))值為斷開(kāi)請(qǐng)求報(bào)文的Sequence Number
(序列號(hào))加1,該ACK確認(rèn)報(bào)文的含義是:“我同意你的連接斷開(kāi)請(qǐng)求”。之后,被動(dòng)斷開(kāi)方就進(jìn)入了CLOSE-WAIT(關(guān)閉等待)狀態(tài),TCP協(xié)議服務(wù)會(huì)通知高層的應(yīng)用進(jìn)程,對(duì)方向本地方向的連接已經(jīng)關(guān)閉,對(duì)方已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,若本地還要發(fā)送數(shù)據(jù)給對(duì)方,對(duì)方依然會(huì)接受。被動(dòng)斷開(kāi)方的CLOSE-WAIT(關(guān)閉等待)還要持續(xù)一段時(shí)間,也就是整個(gè)CLOSE-WAIT狀態(tài)持續(xù)的時(shí)間。

主動(dòng)斷開(kāi)方在收到了ACK報(bào)文后,由FIN_WAIT_1轉(zhuǎn)換成FIN_WAIT_2狀態(tài)。

(3)第三次揮手:在發(fā)送完成ACK報(bào)文后,被動(dòng)斷開(kāi)方還可以繼續(xù)完成業(yè)務(wù)數(shù)據(jù)的發(fā)送,待剩余數(shù)據(jù)發(fā)送完成后,或者CLOSE-WAIT(關(guān)閉等待)截止后,被動(dòng)斷開(kāi)方會(huì)向主動(dòng)斷開(kāi)方發(fā)送一個(gè)FIN+ACK結(jié)束響應(yīng)報(bào)文,表示被動(dòng)斷開(kāi)方的數(shù)據(jù)都發(fā)送完了,然后,被動(dòng)斷開(kāi)方進(jìn)入LAST_ACK狀態(tài)。

(4)第四次揮手:主動(dòng)斷開(kāi)方收在到FIN+ACK斷開(kāi)響應(yīng)報(bào)文后,還需要進(jìn)行最后的確認(rèn),向被動(dòng)斷開(kāi)方發(fā)送一個(gè)ACK確認(rèn)報(bào)文,然后,自己就進(jìn)入TIME_WAIT狀態(tài),等待超時(shí)后最終關(guān)閉連接。處于TIME_WAIT狀態(tài)的主動(dòng)斷開(kāi)方,在等待完成2MSL的時(shí)間后,如果期間沒(méi)有收到其他報(bào)文,則證明對(duì)方已正常關(guān)閉,主動(dòng)斷開(kāi)方的連接最終關(guān)閉。

被動(dòng)斷開(kāi)方在收到主動(dòng)斷開(kāi)方的最后的ACK報(bào)文以后,最終關(guān)閉了連接,自己啥也不管了。

四次揮手圖解

四次揮手的全部交互過(guò)程,具體如下圖所示:

圖:TCP建立的連接時(shí)四次揮手的示意圖

處于TIME_WAIT狀態(tài)的主動(dòng)斷開(kāi)方,在等待完成2MSL的時(shí)間后,才真正關(guān)閉連接通道,其等待的時(shí)間為什么是2MSL呢?

2MSL翻譯過(guò)來(lái)就是兩倍的MSL。MSL全稱為Maximum Segment
Lifetime,指的是一個(gè)TCP報(bào)文片段在網(wǎng)絡(luò)中最大的存活時(shí)間,具體來(lái)說(shuō),2MSL對(duì)應(yīng)于一次消息的來(lái)回(一個(gè)發(fā)送和一個(gè)回復(fù))所需的最大時(shí)間。如果直到2MSL,主動(dòng)斷開(kāi)方都沒(méi)有再一次收到對(duì)方的報(bào)文(如FIN報(bào)文),則可以推斷ACK已經(jīng)被對(duì)方成功接收,此時(shí),主動(dòng)斷開(kāi)方將最終結(jié)束自己的TCP連接。所以,TCP的TIME_WAIT狀態(tài)也稱為2MSL等待狀態(tài)。

有關(guān)MSL的具體的時(shí)間長(zhǎng)度,在RFC1122協(xié)議中推薦為2分鐘。在SICS(瑞典計(jì)算機(jī)科學(xué)院)開(kāi)發(fā)的一個(gè)小型開(kāi)源的TCP/IP協(xié)議棧——LwIP開(kāi)源協(xié)議棧中MSL默認(rèn)為1分鐘。在源自Berkeley的TCP協(xié)議棧實(shí)現(xiàn)中MSL默認(rèn)長(zhǎng)度為30秒。總體來(lái)說(shuō),TIME_WAIT(2MSL)等待狀態(tài)的時(shí)間長(zhǎng)度,一般維持在1-4分鐘之間。

通過(guò)三次握手建立連接和四次揮手拆除連接,一次TCP的連接建立及拆除,至少進(jìn)行7次通信,可見(jiàn)其成本是很高的。

三次握手、四次揮手的常見(jiàn)面試題

有關(guān)TCP的連接建立的三次握手及拆除過(guò)程的四次揮手的面試問(wèn)題,是技術(shù)面試過(guò)程中的出現(xiàn)頻率很高的重點(diǎn)和難點(diǎn)問(wèn)題,常見(jiàn)問(wèn)題大致如下:

問(wèn)題(1):為什么關(guān)閉連接的需要四次揮手,而建立連接卻只要三次握手呢?

關(guān)閉連接時(shí),被動(dòng)斷開(kāi)方在收到對(duì)方的FIN結(jié)束請(qǐng)求報(bào)文時(shí),很可能業(yè)務(wù)數(shù)據(jù)沒(méi)有發(fā)送完成,并不能立即關(guān)閉連接,被動(dòng)方只能先回復(fù)一個(gè)ACK響應(yīng)報(bào)文,告訴主動(dòng)斷開(kāi)方:“你發(fā)的FIN報(bào)文我收到了,只有等到我所有的業(yè)務(wù)報(bào)文都發(fā)送完了,我才能真正的結(jié)束,在結(jié)束之前,我會(huì)發(fā)你FIN+ACK報(bào)文的,你先等著”。所以,被動(dòng)斷開(kāi)方的確認(rèn)報(bào)文,需要拆開(kāi)成為兩步,故總體就需要四步揮手。

而在建立連接場(chǎng)景中,Server端的應(yīng)答可以稍微簡(jiǎn)單一些。當(dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后,其中ACK報(bào)文表示對(duì)請(qǐng)求報(bào)文的應(yīng)答,SYN報(bào)文用來(lái)表示服務(wù)端的連接也已經(jīng)同步開(kāi)啟了,而ACK報(bào)文和SYN報(bào)文之間,不會(huì)有其他報(bào)文需要發(fā)送,故而可以合二為一,可以直接發(fā)送一個(gè)SYN+ACK報(bào)文。所以,在建立連接時(shí),只需要三次握手即可。

問(wèn)題(2):為什么連接建立的時(shí)候是三次握手,可以改成兩次握手嗎?

三次握手完成兩個(gè)重要的功能:一是雙方都做好發(fā)送數(shù)據(jù)的準(zhǔn)備工作,而且雙方都知道對(duì)方已準(zhǔn)備好;二是雙方完成初始SN序列號(hào)的協(xié)商,雙方的SN序列號(hào)在握手過(guò)程中被發(fā)送和確認(rèn)。

如果把三次握手改成兩次握手,可能發(fā)生死鎖。兩次握手的話,缺失了Client的二次確認(rèn)ACK幀,假想的TCP建立的連接時(shí)二次揮手,可以如下圖所示:

圖:假想的TCP建立的連接時(shí)二次握手的示意圖

在假想的TCP建立的連接時(shí)二次握手過(guò)程中,Client發(fā)送Server發(fā)送一個(gè)SYN請(qǐng)求幀,Server收到后發(fā)送了確認(rèn)應(yīng)答SYN+ACK幀。按照兩次握手的協(xié)定,Server認(rèn)為連接已經(jīng)成功地建立了,可以開(kāi)始發(fā)送數(shù)據(jù)幀。這個(gè)過(guò)程中,如果確認(rèn)應(yīng)答SYN+ACK幀在傳輸中被丟失,Client沒(méi)有收到,Client將不知道Server是否已準(zhǔn)備好,也不知道Server的SN序列號(hào),Client認(rèn)為連接還未建立成功,將忽略Server發(fā)來(lái)的任何數(shù)據(jù)分組,會(huì)一直等待Server的SYN+ACK確認(rèn)應(yīng)答幀。而Server在發(fā)出的數(shù)據(jù)幀后,一直沒(méi)有收到對(duì)應(yīng)的ACK確認(rèn)后就會(huì)產(chǎn)生超時(shí),重復(fù)發(fā)送同樣的數(shù)據(jù)幀。這樣就形成了死鎖。

問(wèn)題(3):為什么主動(dòng)斷開(kāi)方在TIME-WAIT狀態(tài)必須等待2MSL的時(shí)間?

原因之一:主動(dòng)斷開(kāi)方等待2MSL的時(shí)間,是為了確保兩端都能最終關(guān)閉。假設(shè)網(wǎng)絡(luò)是不可靠的,被動(dòng)斷開(kāi)方發(fā)送FIN+ACK報(bào)文后,其主動(dòng)方的ACK響應(yīng)報(bào)文有可能丟失,這時(shí)候的被動(dòng)斷開(kāi)方處于LAST-ACK狀態(tài)的,由于收不到ACK確認(rèn)被動(dòng)方一直不能正常的進(jìn)入CLOSED狀態(tài)。在這種場(chǎng)景下,被動(dòng)斷開(kāi)方會(huì)超時(shí)重傳FIN+ACK斷開(kāi)響應(yīng)報(bào)文,如果主動(dòng)斷開(kāi)方在2MSL時(shí)間內(nèi),收到這個(gè)重傳的FIN+ACK報(bào)文,會(huì)重傳一次ACK報(bào)文,后再一次重新啟動(dòng)2MSL計(jì)時(shí)等待,這樣,就能確保被動(dòng)斷開(kāi)方能收到ACK報(bào)文,從而能確保被動(dòng)方順利進(jìn)入到CLOSED狀態(tài)。只有這樣,雙方都能夠確保關(guān)閉。反過(guò)來(lái)說(shuō),如果主動(dòng)斷開(kāi)方在發(fā)送完ACK響應(yīng)報(bào)文后,不是進(jìn)入TIME_WAIT狀態(tài)去等待2MSL時(shí)間,而是立即釋放連接,則將無(wú)法收到被動(dòng)方重傳的FIN+ACK報(bào)文,所以不會(huì)再發(fā)送一次ACK確認(rèn)報(bào)文,此時(shí)處于LAST-ACK狀態(tài)的被動(dòng)斷開(kāi)方,無(wú)法正常進(jìn)入到CLOSED狀態(tài)。

原因之二:防止“舊連接的已失效的數(shù)據(jù)報(bào)文”出現(xiàn)在新連接中。主動(dòng)斷開(kāi)方在發(fā)送完最后一個(gè)ACK報(bào)文后,再經(jīng)過(guò)2MSL,才能最終關(guān)閉和釋放端口,這就意味著,相同端口的新TCP新連接,需要在2MSL的時(shí)間之后,才能夠正常的建立。2MSL這段時(shí)間內(nèi),舊連接所產(chǎn)生的所有數(shù)據(jù)報(bào)文,都已經(jīng)從網(wǎng)絡(luò)中消失了,從而,確保了下一個(gè)新的連接中不會(huì)出現(xiàn)這種舊連接請(qǐng)求報(bào)文。

問(wèn)題(4):如果已經(jīng)建立了連接,但是Client端突然出現(xiàn)故障了怎么辦?

TCP還設(shè)有一個(gè)保活計(jì)時(shí)器,Client端如果出現(xiàn)故障,Server端不能一直等下去,這樣會(huì)浪費(fèi)系統(tǒng)資源。每收到一次Client客戶端的數(shù)據(jù)幀后,Server端都的保活計(jì)時(shí)器會(huì)復(fù)位。計(jì)時(shí)器的超時(shí)時(shí)間通常是設(shè)置為2小時(shí),若2小時(shí)還沒(méi)有收到Client端的任何數(shù)據(jù)幀,Server端就會(huì)發(fā)送一個(gè)探測(cè)報(bào)文段,以后每隔75秒鐘發(fā)送一次。若一連發(fā)送10個(gè)探測(cè)報(bào)文仍然沒(méi)反應(yīng),Server端就認(rèn)為Client端出了故障,接著就關(guān)閉連接。如果覺(jué)得保活計(jì)時(shí)器的兩個(gè)多小時(shí)的間隔太長(zhǎng),可以自行調(diào)整TCP連接的保活參數(shù)。

總結(jié)

以上是生活随笔為你收集整理的TCP协议详解 (史上最全)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

欧美在线视频不卡 | 亚洲一区二区三区精品在线观看 | 人人爽人人澡 | 国产久草在线观看 | www亚洲一区 | 日韩69av | 狠狠的干狠狠的操 | www.久热| 久要激情网 | 国产糖心vlog在线观看 | 一区二区三区动漫 | 成人午夜黄色 | 天天爱天天射天天干天天 | 免费看片日韩 | 涩涩网站在线播放 | 国产一区二区免费在线观看 | 日韩激情在线视频 | 国产一区国产二区在线观看 | 91av免费在线观看 | 91亚洲精品在线观看 | 99久久婷婷国产一区二区三区 | 91av九色 | 免费91在线 | 久久男人免费视频 | 亚州精品在线视频 | 免费看黄色毛片 | 天天干天天操天天爱 | av官网| 精品久久电影 | 99爱这里只有精品 | 久久精品欧美一区 | 亚洲亚洲精品在线观看 | 日韩精品一区二区三区水蜜桃 | 久久免费视频国产 | 成人一区二区在线观看 | 久久高清国产 | 在线黄色av电影 | 精品国产乱码久久久久久浪潮 | 经典三级一区 | 国产精品美女久久久网av | 日韩av免费在线看 | 国产精品av免费在线观看 | 在线播放第一页 | 国产精品久久久毛片 | 热久久免费视频精品 | 国产精品免费久久久 | 久久精品久久精品久久 | 国产v视频 | 美女免费视频观看网站 | 中文网丁香综合网 | 日韩免费一区二区 | 欧美a级片网站 | 欧美日韩国产网站 | 亚洲黄电影| 日本一区二区三区视频在线播放 | 国产亚洲精品福利 | 亚洲精品综合一区二区 | 伊人影院av | 这里只有精品视频在线 | 国产.精品.日韩.另类.中文.在线.播放 | 免费av在线 | 精品久久久久久久久久久久久久久久久久 | 日韩一区二区三区在线观看 | www.天天操 | 五月婷婷色播 | 天天操天天射天天操 | 午夜91在线 | 国产福利中文字幕 | 久青草影院 | 激情图片区 | 日韩城人在线 | 婷婷深爱网| 性日韩欧美在线视频 | 六月丁香激情综合色啪小说 | 久久久亚洲网站 | 久久国产精品精品国产色婷婷 | 97超碰总站 | 日韩在线观看一区二区三区 | 激情av一区二区 | 日韩有码中文字幕在线 | 日韩欧美高清 | 亚洲精品视频免费在线 | 国产精品96久久久久久吹潮 | 亚洲精品麻豆视频 | 天天操综合网站 | 精品一区二区免费在线观看 | 国产又粗又长的视频 | 日日干天夜夜 | 在线观看成人福利 | 日本乱视频 | 欧美激情另类 | 蜜臀久久99精品久久久酒店新书 | 成人97人人超碰人人99 | 国产91在线观看 | 久久久精品国产一区二区电影四季 | 伊人永久| 日韩欧美一区二区三区在线 | japanese黑人亚洲人4k | 久久久久久片 | 狠狠干激情| 国产91免费在线 | 免费在线激情视频 | 黄色大全免费观看 | 亚洲区另类春色综合小说校园片 | 色婷婷狠狠五月综合天色拍 | 日韩中文字幕免费看 | 天天干夜夜干 | 欧美精品网站 | 国产成人精品亚洲日本在线观看 | 免费av片在线 | 色网免费观看 | 久久国产精品精品国产色婷婷 | 九九热免费在线观看 | 人人干免费 | 欧美片网站yy | 天堂网av在线 | 久草香蕉在线 | 色欧美88888久久久久久影院 | 久久精品国产一区二区三区 | 亚洲欧美在线视频免费 | 国产视频一二三 | 国产午夜精品理论片在线 | 五月天综合 | 丁香久久婷婷 | 国产一区免费在线 | 日韩免费电影在线观看 | 久久久精品二区 | 久久久www成人免费毛片 | 伊人激情网 | 婷婷日 | 日韩欧美在线第一页 | 亚洲高清久久久 | 五月的婷婷 | 欧美天堂视频在线 | 中文字幕电影在线 | 亚洲欧美日韩精品一区二区 | 午夜精品久久久久久久久久久久 | 国产自制av | 亚洲性少妇性猛交wwww乱大交 | 久久午夜电影网 | 国产精品美女久久久久久2018 | 欧美日韩国产一区二区三区 | www.色就是色 | 久久久久久综合 | 草久草久 | 国产精品视频久久 | 国产高清第一页 | 国产精品一区二区av日韩在线 | 国产主播99| 天天操天天操天天操天天操天天操天天操 | 午夜在线免费视频 | 大片网站久久 | 成人9ⅰ免费影视网站 | 国产正在播放 | 日韩一区二区三区高清在线观看 | 欧美一级视频一区 | 五月综合色 | 欧美精品久久久久久久亚洲调教 | 午夜精品久久久久久久久久久久久久 | 成人黄色电影视频 | 99在线精品视频 | 在线观看黄色 | 97在线观看免费观看高清 | 亚洲综合情 | 亚洲国产精品成人综合 | 午夜私人影院 | 欧美激情在线网站 | 天天干天天想 | 国产区精品 | 欧美成年人在线视频 | 91看片淫黄大片91 | 日韩欧美在线中文字幕 | 亚洲精品午夜久久久久久久久久久 | 97精品视频在线播放 | 国产成人61精品免费看片 | 最近中文国产在线视频 | 亚洲综合小说电影qvod | 日日摸日日添夜夜爽97 | 日韩欧美一区二区三区在线 | 精品国产一区二区三区免费 | 不卡的av电影 | 国内精品久久久精品电影院 | 蜜臀av夜夜澡人人爽人人桃色 | 亚洲精品在线视频播放 | 精品99在线视频 | 国产乱对白刺激视频在线观看女王 | 欧美片一区二区三区 | 男女视频久久久 | 中文一区二区三区在线观看 | 久久人人爽人人爽人人片av软件 | 国产精品12 | 国产成人三级三级三级97 | 欧美整片sss | 国产日韩av在线 | 三级av在线 | 亚洲三级黄 | 成人亚洲综合 | 高清久久久久久 | 91夫妻视频 | 亚洲最新在线视频 | 人人模人人爽 | 91精品视频在线观看免费 | 中文字幕在线资源 | 亚洲精品国产精品乱码在线观看 | 91视频啊啊啊 | 国产精品淫 | 高清av中文字幕 | 亚洲精品国产精品国自产 | 国产精品18久久久久久vr | 综合伊人久久 | 精品特级毛片 | 99亚洲精品视频 | 亚洲黄色av | 国产在线91精品 | 国产精品久久伊人 | 午夜精品视频一区二区三区在线看 | 国产免费高清视频 | av网站播放 | 美女福利视频在线 | 婷婷激情av| 伊人婷婷久久 | 久久国产影视 | 日韩精品不卡在线 | 国产九九九精品视频 | 亚洲午夜精 | 国产一区二区三区四区大秀 | 亚洲另类久久 | 亚洲欧洲精品一区二区精品久久久 | 欧美一区免费在线观看 | 狠狠干成人综合网 | 最近最新中文字幕 | 日韩在线视频观看免费 | 欧美成人猛片 | 国产精品久久久久久高潮 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 天天干天天爽 | 五月天伊人 | 久久69av | 在线观看视频中文字幕 | 国产超碰在线观看 | 国产午夜三级一二三区 | 国产精品理论片 | 全久久久久久久久久久电影 | 久草免费新视频 | 免费国产在线视频 | 国产黄色片在线免费观看 | 99久久99久久精品国产片 | 最近日本中文字幕a | 久久美女免费视频 | 国产午夜三级 | 免费看片亚洲 | 中文字幕一区在线观看视频 | 国产第一福利 | 国产精品av久久久久久无 | 欧美日高清视频 | 亚洲精品1区2区3区 超碰成人网 | 国产精品s色 | 国产精品女同一区二区三区久久夜 | 久久久天天操 | 欧美精品在线观看免费 | 色综合久久久久久久 | 免费视频一区二区 | 久人人 | 九九热精品国产 | 国产97色在线 | 91精品久久久久久粉嫩 | 精品久久一区 | 久久不卡av| av中文字幕第一页 | 国产18精品乱码免费看 | 天天干亚洲 | 欧美日韩一区二区久久 | 欧美性脚交 | 97超碰网| 欧美粗又大 | 亚洲91精品在线观看 | 亚洲精品久久久蜜桃直播 | 国产一区二区在线观看免费 | 永久黄网站色视频免费观看w | 九草在线视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 成人羞羞视频在线观看免费 | 国产精品免费视频一区二区 | 91麻豆高清视频 | 婷婷色中文网 | 天天干天天操天天做 | 九九综合九九 | 久久精彩免费视频 | 国产精品免费一区二区 | 国产欧美中文字幕 | 天天色天天综合网 | 黄色国产在线 | 制服丝袜亚洲 | 国产色婷婷精品综合在线手机播放 | 中文字幕一区二区三区久久 | 欧美91在线 | 国产精品麻豆免费版 | 成人av一二三区 | 日韩免费av片 | 99久久婷婷国产精品综合 | 日韩精品专区 | 国产视频精品久久 | 美女久久 | 又大又硬又黄又爽视频在线观看 | 国产手机在线观看 | 美女性爽视频国产免费app | 久久精品在线视频 | 国产综合视频在线观看 | 亚洲精品99久久久久久 | 国产在线视频一区 | 国产黄在线播放 | 在线黄色免费av | 最新中文字幕视频 | 国产成人久久av免费高清密臂 | 中文字幕在线影院 | 欧美一级性视频 | 美女视频久久久 | 91高清视频在线 | 欧美日韩国产二区三区 | 黄色国产精品 | 久久精品国产精品亚洲精品 | 色婷五月天 | 婷婷天天色 | 亚洲第一av在线 | 国产精品免费不 | 日日操天天操狠狠操 | 欧美午夜久久久 | 麻豆91视频 | 亚洲最新视频在线播放 | 亚洲欧美国产精品 | aaa日本高清在线播放免费观看 | 99精品国产99久久久久久福利 | 欧美日韩国产一二 | 亚洲91中文字幕无线码三区 | 国产高清视频在线播放 | 国产一区二区在线免费视频 | 日韩欧美第二页 | 国产一区91 | 国产手机视频在线观看 | www欧美色| 91在线免费公开视频 | 韩国av不卡 | 97精品国产97久久久久久粉红 | 日韩精品不卡在线观看 | 国产免费中文字幕 | 国产精品女同一区二区三区久久夜 | 久久精品影片 | 91最新在线观看 | 免费福利在线 | 色精品视频 | 日韩精品一区二 | 久久久久久网址 | 久久视频国产精品免费视频在线 | 亚洲日本色 | 国产在线a | 成人动漫一区二区 | 中文字幕日韩国产 | 国产色在线视频 | 日本黄色免费看 | 最近中文字幕国语免费av | 日韩精品一区电影 | 97碰碰精品嫩模在线播放 | 免费在线色电影 | 黄色大全免费网站 | 日本xxxx裸体xxxx17 | 亚洲国产成人精品在线 | 99精品偷拍视频一区二区三区 | 贫乳av女优大全 | 免费在线播放视频 | 国产打女人屁股调教97 | 久久免费99精品久久久久久 | 午夜一级免费电影 | 九九九热精品免费视频观看 | 亚洲精品一区中文字幕乱码 | 97精产国品一二三产区在线 | 欧美另类网站 | 亚州天堂| 日产乱码一二三区别在线 | 亚洲九九九在线观看 | 国产一区二区三区在线免费观看 | 国产精品毛片久久久久久久 | 欧美另类交人妖 | 天天艹天天干天天 | 国产区高清在线 | 人人爽人人舔 | 看黄色.com| 欧美成人一二区 | 500部大龄熟乱视频使用方法 | 欧美日韩性视频 | 91色一区二区三区 | 91久久国产精品 | 国产午夜精品av一区二区 | 免费福利视频网站 | 免费网站黄色 | 欧美精品久久久久久 | 国产精品美女久久久久久网站 | 国产一级大片免费看 | 免费视频一区 | 天天操天 | 国产精品手机在线播放 | 日韩精品免费在线观看视频 | 欧美另类交人妖 | 349k.cc看片app| 91成品人影院| 黄色免费在线视频 | 黄色av一级片 | 99超碰在线播放 | 成人中文字幕av | 色综合久久久久综合体桃花网 | 福利视频第一页 | 91视频在线免费看 | 亚洲人成人99网站 | 日韩mv欧美mv国产精品 | 天天av在线播放 | 视频在线观看一区 | 一区二区中文字幕在线观看 | 日韩av网站在线播放 | www.com久久 | 91亚洲永久精品 | 久久好看免费视频 | 亚洲aⅴ在线观看 | 操操操影院 | 在线视频一区观看 | 亚洲特级片| 91精品视频观看 | 久99久视频 | 中文字幕免费一区二区 | 国产露脸91国语对白 | 国内精品久久久久影院一蜜桃 | 日韩av在线一区二区 | 国产91欧美 | 色丁香久久 | 五月天最新网址 | 日韩精品最新在线观看 | 久久中文欧美 | 91成人短视频在线观看 | 亚洲一区二区91 | 超碰精品在线观看 | 狠狠激情中文字幕 | 国产精品 亚洲精品 | 国产国产人免费人成免费视频 | 日韩一二区在线观看 | 99这里只有精品视频 | 国产黄色av网站 | 狠狠的干狠狠的操 | 香蕉视频日本 | 国产午夜三级 | 毛片激情永久免费 | 91视频网址入口 | 天堂av观看 | 91麻豆福利 | 亚洲成人影音 | 日韩精品一区二区三区丰满 | 9在线观看免费高清完整版在线观看明 | 免费成人在线电影 | 麻豆一二三精选视频 | 精品国产乱码一区二区三区在线 | 国产一级黄色片免费看 | 欧美成人精品欧美一级乱 | 久久久久麻豆 | 黄色一级影院 | 不卡电影免费在线播放一区 | 欧美日韩精品综合 | 久久久九九 | 视频在线99re | 91成人免费电影 | 日韩在线观看不卡 | 四虎国产永久在线精品 | 国产精品美女网站 | 国产自产高清不卡 | 天天综合视频在线观看 | 麻豆传媒视频在线 | www.夜夜草| 成人av电影在线观看 | 亚洲成a人片77777kkkk1在线观看 | 国产午夜精品一区二区三区在线观看 | 久久高清片| 91久久久久久久 | 黄色动态图xx | 久久在线免费 | 国产91亚洲精品 | 日本 在线 视频 中文 有码 | 日韩高清观看 | 欧美日韩免费在线观看视频 | 国产福利精品视频 | 亚洲美女精品区人人人人 | 91在线免费播放视频 | 521色香蕉网站在线观看 | 国产黄色观看 | 日本中文字幕久久 | 国产亚洲精品久久久久久电影 | av色综合网 | 99在线精品视频观看 | 人人干网| 亚洲精品一区二区在线观看 | 黄毛片在线观看 | 色综合久久久久久久 | 久久久久久久影视 | 91欧美国产 | 免费网址在线播放 | 久久99在线观看 | 免费www视频 | 国产精品一区二区麻豆 | 欧美性猛片,| 日本性生活免费看 | 97小视频 | 亚洲电影院 | 久久久久激情视频 | 色香蕉在线视频 | 久久不射网站 | 成人黄色片免费看 | 中文字幕免费高清在线 | 亚洲精品久久久久中文字幕二区 | 五月婷婷网站 | 在线看一级片 | 在线草 | 九色91在线视频 | 麻豆91在线观看 | 国产三级精品在线 | 欧美日韩不卡在线观看 | 久久66热这里只有精品 | 五月天婷婷综合 | 超碰人人草| 久久国产精品99久久久久 | 怡红院av久久久久久久 | 国产日韩精品一区二区三区在线 | 免费看片色 | 国产专区精品 | 日韩精品在线视频免费观看 | 国产精品mv | 亚洲视频综合在线 | 五月婷综合| 在线看片一区 | 香蕉视频4aa | 精品国产成人在线 | 欧美日韩中文在线 | 一二区精品| 午夜视频在线观看一区二区 | 国产高清视频 | 国产亚洲精品精品精品 | 亚洲国产美女久久久久 | 久草视频在| 久久久久国产免费免费 | 亚洲免费一级电影 | 中文字幕亚洲精品在线观看 | 青春草免费视频 | a级免费观看 | 97超碰网 | 国产精品久久久久9999吃药 | 色婷婷伊人 | 日日夜夜天天操 | 黄色免费视频在线观看 | 四虎精品成人免费网站 | 久久精品79国产精品 | 九月婷婷人人澡人人添人人爽 | 911国产 | 欧美色一色| 国产亚洲成av人片在线观看桃 | 日本中文字幕网站 | 国产伦理久久精品久久久久_ | 天天干天天干天天色 | 国产精品久久久久久久久久久久午夜片 | 日本精品视频免费 | 国产精品永久在线 | 亚洲免费av电影 | 成人资源在线观看 | 欧美一级日韩三级 | 不卡中文字幕av | 中文字幕乱码亚洲精品一区 | 国产99爱| 久久久精品 一区二区三区 国产99视频在线观看 | 精品亚洲一区二区 | 99九九99九九九视频精品 | 国产精品一区二区免费在线观看 | 99视频在线精品 | 视频在线99re| 精品夜夜嗨av一区二区三区 | 最近中文字幕高清字幕在线视频 | 成人免费看片98欧美 | 亚洲 欧洲av | 久久久久久久18 | 日韩免费二区 | 狠狠干夜夜操天天爽 | 免费影视大全推荐 | 亚洲国产日韩一区 | 在线看成人av| www·22com天天操 | 天天色天天色天天色 | 一级一片免费视频 | 亚洲精品女人久久久 | 狠狠干我| 日本性动态图 | 国产三级国产精品国产专区50 | 亚洲精品久久久蜜臀下载官网 | 激情久久一区二区三区 | 成人av片免费看 | 久99久精品 | 91成品视频 | 在线播放 日韩专区 | 91精品欧美 | 欧美激情精品久久久久久免费印度 | 国产三级国产精品国产专区50 | 日本视频精品 | 高清精品视频 | 中文字幕在线观看一区 | 美女黄频视频大全 | 奇米网444 | 久久久九色精品国产一区二区三区 | 久久精品电影 | 园产精品久久久久久久7电影 | 美女黄久久 | 国产高清在线a视频大全 | 开心色停停 | 精品久久亚洲 | 亚洲精品999 | 国产精品综合久久久久久 | 久草视频免费在线观看 | 亚洲永久免费av | 久久久久久久福利 | 99久久久国产精品免费观看 | 91伊人久久大香线蕉蜜芽人口 | 日韩中文字幕免费视频 | 丁香激情网 | 国产精品第一页在线 | 亚洲男人天堂2018 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 99r在线精品| 99久久影视| 国产福利av在线 | 国产成人av电影在线 | 91精品久久久久久 | 国产精品视频在线看 | 91精品视频在线观看免费 | 在线观看国产麻豆 | 亚洲永久av| 欧美伦理一区 | 久久伦理 | 成人av电影免费在线观看 | 最近中文字幕国语免费av | 欧美成人基地 | 久久99热精品这里久久精品 | 久久99久国产精品黄毛片入口 | 91经典在线 | 国产精品青草综合久久久久99 | 九九视频一区 | 精品在线99| 久久久久国产精品一区二区 | 国产98色在线 | 日韩 | 久久久久久久久久国产精品 | wwwwwww黄 | 一区在线电影 | 久久久影院官网 | 亚洲精品国偷拍自产在线观看 | 伊人影院在线观看 | 国产一区在线视频观看 | 日韩av快播电影网 | 欧美激情精品久久久久久免费 | 日日干网 | 免费看污黄网站 | 午夜999 | 免费福利片2019潦草影视午夜 | 国产精品一区二区麻豆 | 欧美精品久久久久久久久老牛影院 | 综合成人在线 | 九色精品免费永久在线 | 久草亚洲视频 | 97精品久久 | 中文字幕一区二区在线播放 | 成人av资源网 | 日韩免费看的电影 | 97精品国产一二三产区 | 国产精品不卡视频 | 天天艹天天操 | 久久不见久久见免费影院 | 91黄色小网站 | 国产探花视频在线播放 | 999日韩 | www五月天| 亚洲精品久久久久中文字幕二区 | 久草99| 四虎在线免费观看视频 | 九九久久免费视频 | 欧美性生活免费看 | 一区二区三区四区五区在线视频 | 久久亚洲在线 | 亚洲国产精品电影在线观看 | 国产极品尤物在线 | 青春草免费在线视频 | 亚洲 欧美日韩 国产 中文 | 五月婷婷六月丁香 | 成人免费观看视频网站 | 99精品免费久久久久久久久 | 麻豆精品国产传媒 | 91成人天堂久久成人 | 国产日韩高清在线 | 日本精品va在线观看 | 99久久99久久精品国产片 | 日韩电影在线一区 | 午夜视频在线观看一区二区 | 国产a高清 | 国内外成人在线视频 | 免费观看91视频 | 午夜av免费观看 | 国产馆在线播放 | 在线亚洲人成电影网站色www | 天堂av观看 | 蜜臀av一区二区 | 伊人色综合网 | 日韩欧美高清不卡 | 91视频麻豆 | 美女网色| 久久久久综合 | 国产精品va在线播放 | 五月婷婷在线视频观看 | 少妇性aaaaaaaaa视频 | 欧美xxxxx在线视频 | 手机成人av | 精品九九九 | 日本中文字幕免费观看 | 999国内精品永久免费视频 | 69国产成人综合久久精品欧美 | 中文字幕av在线免费 | 99久久婷婷国产一区二区三区 | 久久久 激情 | 国产欧美中文字幕 | av网在线观看 | 97在线观看免费观看高清 | 在线视频一区二区 | 亚洲 精品在线视频 | 久久伦理网 | 午夜成人影视 | 成人av高清在线 | 久久国产精品99精国产 | 深夜免费小视频 | 国产精品mv | 久久视奸 | 美女视频黄在线观看 | 欧美日韩69| 偷拍区另类综合在线 | 国产精品不卡在线播放 | 欧美日在线观看 | 狠狠操天天干 | a视频在线播放 | 欧美日韩亚洲国产一区 | 在线观看中文字幕dvd播放 | 成人啪啪18免费游戏链接 | 日一日干一干 | www.久艹| 九九视频这里只有精品 | 粉嫩av一区二区三区免费 | 日韩理论在线视频 | 日韩a级免费视频 | 99精品在线免费观看 | 日韩在线视频播放 | 国产精品美女视频网站 | 九九日九九操 | 国产精品一区二区视频 | www操操| 中文字幕在线观看免费观看 | 97免费在线观看视频 | 色综合久久88色综合天天 | 国产无区一区二区三麻豆 | 午夜骚影| 亚洲五月综合 | 麻豆影视网 | 久久免费精品一区二区三区 | 99国产免费网址 | 特黄一级毛片 | 亚洲成人动漫在线观看 | 色婷婷综合久久久 | 在线最新av | 99久国产| 欧美va天堂va视频va在线 | 波多野结衣电影久久 | 六月色丁香 | 免费福利在线视频 | 黄色在线观看www | 日韩中文在线视频 | 日韩理论在线播放 | 成人精品亚洲 | 亚洲视频在线观看免费 | 91在线中文 | 就要干b| 国产日韩精品一区二区 | 久久久亚洲影院 | 91桃花视频| 久久图 | 国产免费a| 日韩专区在线观看 | 亚洲精品资源在线 | 亚洲成av人影片在线观看 | 99精品视频在线观看视频 | 日精品 | 日韩激情在线视频 | 久久理论电影网 | 久久免费美女视频 | 日韩午夜剧场 | 日本爱爱免费 | 国内小视频在线观看 | 色 中文字幕| 国产日韩精品欧美 | 99视频免费观看 | 91精品第一页 | 成人免费观看视频大全 | 国产精品18久久久久久首页狼 | 免费观看久久 | av怡红院| 国产高清不卡 | 精品视频在线视频 | 久久综合九色综合97_ 久久久 | 亚洲精品美女在线 | 国产主播大尺度精品福利免费 | 最新av在线免费观看 | 一区二区国产精品 | 激情综合站 | 97理论电影 | 久久久精品二区 | 亚洲日韩中文字幕 | 色综合天天做天天爱 | 国产精品1区 | 91大神精品视频在线观看 | 麻豆视频网址 | 四虎影视8848aamm| 天天爱天天操天天射 | 久久99久久久久 | 久久精品欧美视频 | 国产精品视频线看 | 久久99视频免费观看 | 1000部国产精品成人观看 | 操操操综合| 999成人免费视频 | 亚洲乱码精品久久久久 | 午夜视频播放 | 日韩| 九色91在线 | 日韩精品中文字幕av | 五月在线视频 | 国产99久久 | 国产精品手机在线 | 成年人毛片在线观看 | 久久精品伊人 | 久久人人爽人人片av | 亚洲欧美国产日韩在线观看 | 激情综合色综合久久 | 91精品久久香蕉国产线看观看 | 成人免费一区二区三区在线观看 | 四虎在线观看 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 在线va网站 | 色亚洲网 | 中文字幕在线看视频国产中文版 | 国产xxxx做受性欧美88 | 天天干天天摸 | 天天操天天操天天操天天操 | 激情黄色av | 97在线观看免费高清 | 99这里只有久久精品视频 | 婷婷免费视频 | 波多野结衣最新 | 国产精品va在线观看入 | 伊人伊成久久人综合网小说 | 激情婷婷网 | 国语麻豆 | 2017狠狠干 | 国产高清久久久 | 五月婷婷综合久久 | 99久久精品国产亚洲 | 午夜黄色大片 | 成人性生交大片免费看中文网站 | 狂野欧美激情性xxxx | 亚洲天天摸日日摸天天欢 | 国产精品大片免费观看 | 久久久久一区二区三区 | 免费黄色网址大全 | 99精品视频免费看 | 国产一级淫片在线观看 | av免费观看网址 | 中文字幕在线看人 | adn—256中文在线观看 | 久久精品国产免费观看 | 国产精品久久久久久久av电影 | 2023国产精品自产拍在线观看 | 波多野结衣一区二区三区中文字幕 | 久久久久久免费网 | 精品成人在线 | 一区二区三区在线影院 | 四虎影视av | 欧美综合在线观看 | 色99之美女主播在线视频 | 麻豆视频国产在线观看 | av大片网站 | 久久久久国产精品免费 | 国产黄色av | 国产毛片在线 | 久久精品国产免费看久久精品 | 日日日爽爽爽 | 久热只有精品 | 在线观看黄色小视频 | 久久99精品久久久久久清纯直播 | 一区二区三区影院 | 在线电影播放 | 成人国产精品一区二区 | 日本中文一级片 | 欧美一区二区日韩一区二区 | 色噜噜日韩精品一区二区三区视频 | ww视频在线观看 | 奇米网777| 99视频播放| 国产午夜影院 | 九九久久国产精品 | 中文字幕在 | 亚洲91视频 | 一级片免费在线 | 日韩精品一区在线播放 | 97超碰人人澡人人爱 | 五月天色中色 | 亚洲视频,欧洲视频 | 国产精品视频永久免费播放 | 99久久精品国产一区 | 99久久99久久精品国产片 | 免费亚洲精品 | 中文在线天堂资源 | 97自拍超碰 | 午夜91视频 | 国产a级免费 | 深夜免费福利在线 | 欧美精品小视频 | 色综合天天色 | 日日草天天草 | 欧美日韩高清免费 | 久久久久亚洲国产精品 | 免费黄色在线网址 | 国产中文伊人 | 最新亚洲视频 | 五月开心色 | 精品久久国产 | 日韩综合视频在线观看 | 日韩在线精品视频 | 国产精品99在线播放 | 亚洲综合激情小说 | 久久黄色网| 激情视频久久 | 色婷婷狠狠五月综合天色拍 | av在线日韩 | 日韩精品视频久久 | 黄av资源 | 欧美一级久久 | 日韩在线小视频 | 麻豆精品91 | 中文资源在线官网 | 91色国产| 中文字幕在 | 亚洲色综合 | av中文在线播放 | 日本在线观看一区二区 | 国产这里只有精品 | 亚洲夜夜综合 | 性色av免费在线观看 | www.在线观看av | 美女视频黄频大全免费 | www.国产毛片 | 在线观看免费福利 | 国产精品一区二区三区在线免费观看 | 伊人成人激情 | 欧美激情视频一区 | 午夜私人影院久久久久 | 欧美成人影音 | 伊人开心激情 | 亚洲最新av| 日韩av免费在线看 | 91精品国产麻豆国产自产影视 | 国产成a人亚洲精v品在线观看 | 日韩在线国产精品 | 久久激情五月丁香伊人 | 久久久久久久免费观看 | www麻豆视频 | 视频国产在线观看18 | 久久久久久久久艹 | 国产不卡高清 | 久久成人久久 | 天天夜夜狠狠操 | 成人免费视频网 | 婷婷视频导航 | 久久精品欧美日韩精品 | 国产精品成人免费一区久久羞羞 | 国产福利免费看 | 天天激情综合网 | 麻豆高清免费国产一区 | 国产一级高清视频 | 91亚色视频在线观看 | 久久久免费精品国产一区二区 | 亚洲国产欧美在线人成大黄瓜 | 欧美日韩国产色综合一二三四 | 九九视频免费在线观看 | 国产精品久久久久久久免费观看 | 欧美影院久久 | 首页中文字幕 | 国产精品成人久久久久久久 |