国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01

這篇具有很好參考價(jià)值的文章主要介紹了深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、網(wǎng)絡(luò)協(xié)議

計(jì)算機(jī)網(wǎng)絡(luò)是什么?
隨著計(jì)算機(jī)技術(shù)發(fā)展,計(jì)算機(jī)的體積和價(jià)格都在下降,之前計(jì)算機(jī)多用于研究機(jī)構(gòu),現(xiàn) 階段逐步進(jìn)入一般的公司用于辦公。原來(lái)計(jì)算機(jī)之間傳輸數(shù)據(jù)需要通過(guò)軟盤(pán)等第三方存儲(chǔ)介 質(zhì)進(jìn)行轉(zhuǎn)存,人們需要將數(shù)據(jù)直接通過(guò)通信線路傳輸,來(lái)縮短傳輸時(shí)間,于是計(jì)算機(jī)網(wǎng)絡(luò)開(kāi) 始誕生,并逐漸發(fā)展為現(xiàn)在巨大的 Internet。
定義和分類
計(jì)算機(jī)網(wǎng)絡(luò)的標(biāo)準(zhǔn)定義是:利用通信線路將地理上分散的、具有獨(dú)立功能的計(jì)算機(jī)系統(tǒng) 和通信設(shè)備按不同的形式連接起來(lái),以功能完善的網(wǎng)絡(luò)軟件及協(xié)議實(shí)現(xiàn)資源共享和信息傳遞 的系統(tǒng)。
計(jì)算機(jī)網(wǎng)絡(luò)從覆蓋范圍上劃分可以分為三類:局域網(wǎng)、城域網(wǎng)、廣域網(wǎng)。局域網(wǎng) LAN(作 用范圍一般為幾米到幾十公里)、城域網(wǎng) MAN(界于 WAN 與 LAN 之間)、廣域網(wǎng) WAN(作用 范圍一般為幾十到幾千公里)。當(dāng)然計(jì)算機(jī)網(wǎng)絡(luò)劃分不止這一種分類方式,可以按拓?fù)浣Y(jié)構(gòu) 分類(總線型、環(huán)型、星型、網(wǎng)狀)、還可以按按信息的交換方式(電路交換、報(bào)文交換、 報(bào)文分組交換)來(lái)分等等方式
計(jì)算機(jī)網(wǎng)絡(luò)發(fā)展簡(jiǎn)史
1、誕生階段,20 世紀(jì) 60 年代中期之前的第一代計(jì)算機(jī)網(wǎng)絡(luò)是以單個(gè)計(jì)算機(jī)為中心的 遠(yuǎn)程聯(lián)機(jī)系統(tǒng)。
2、ARPANET,多個(gè)主機(jī)通過(guò)通信線路互聯(lián)起來(lái)。60 年代初。當(dāng)時(shí),美國(guó)國(guó)防部為了保 證美國(guó)本土防衛(wèi)力量和海外防御武裝在受到前蘇聯(lián)第一次核打擊以后仍然具有一定的生存 和反擊能力,認(rèn)為有必要設(shè)計(jì)出一種分散的指揮系統(tǒng);它由一個(gè)個(gè)分散的指揮點(diǎn)組成,當(dāng) 部分指揮點(diǎn)被摧毀后,其它點(diǎn)仍能正常工作,并且在這些點(diǎn)之間能夠繞過(guò)那些已被摧毀的 指揮點(diǎn)而繼續(xù)保持聯(lián)系。這個(gè)設(shè)計(jì)出發(fā)點(diǎn)很重要,理解了它,就能夠理解為何后面要學(xué)習(xí) 的 TCP 要這么設(shè)計(jì)。 為了對(duì)這一構(gòu)思進(jìn)行驗(yàn)證,1969 年,美國(guó)國(guó)防部國(guó)防高級(jí)研究計(jì)劃署 (DOD/DARPA)資助建立了一個(gè)名為 ARPANET(即"阿帕網(wǎng)")的網(wǎng)絡(luò),將多個(gè)大學(xué)的計(jì)算機(jī)主機(jī) 聯(lián)接起來(lái),位于各個(gè)結(jié)點(diǎn)的大型計(jì)算機(jī)采用分組交換技術(shù),通過(guò)專門(mén)的通信交換機(jī)和專門(mén)的 通信線路相互連接。E-mail、FTP 和 Telnet 在 ARPANET 上已經(jīng)誕生。
3、開(kāi)放性的標(biāo)準(zhǔn)化體系結(jié)構(gòu),OSI 誕生。ARPANET 興起后,計(jì)算機(jī)網(wǎng)絡(luò)發(fā)展迅猛,各大計(jì) 算機(jī)公司相繼推出自己的網(wǎng)絡(luò)體系結(jié)構(gòu)及實(shí)現(xiàn)這些結(jié)構(gòu)的軟硬件產(chǎn)品。由于沒(méi)有統(tǒng)一的標(biāo)準(zhǔn), 不同廠商的產(chǎn)品之間互聯(lián)很困難,人們迫切需要一種開(kāi)放性的標(biāo)準(zhǔn)化實(shí)用網(wǎng)絡(luò)環(huán)境,這樣應(yīng) 運(yùn)而生了兩種國(guó)際通用的最重要的體系結(jié)構(gòu), 為了實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備間的互相通訊,ISO 和 IEEE (電氣和電子工程師協(xié)會(huì),是世界上最大的非營(yíng)利性專業(yè)技術(shù)學(xué)會(huì))相繼提出了 OSI 參考模 型及其 TCP/IP 模型。由于 TCP/IP 盡早地制定了可行性較強(qiáng)的協(xié)議,提出了應(yīng)對(duì)技術(shù)快速革 新的協(xié)議,并及時(shí)進(jìn)行后期改良的方案,因此打敗了 OSI 模型,成為了事實(shí)上的標(biāo)準(zhǔn)。
4、Internet 互聯(lián)網(wǎng) 20 世紀(jì) 90 年代至今的第四代計(jì)算機(jī)網(wǎng)絡(luò), 就是我們所熟知的 Internet 互聯(lián)網(wǎng)。 既然網(wǎng)絡(luò)是很多的計(jì)算設(shè)備(電腦、手機(jī)等等)連接在一起的,這些計(jì)算設(shè)備來(lái)自不同 的公司,有不同的體系結(jié)構(gòu),相互之間如何通信呢?這就好比我們的語(yǔ)言,中國(guó)地廣人多, 地方性語(yǔ)言也非常豐富,而且方言之間差距巨大。A 地區(qū)的方言可能 B 地區(qū)的人根本無(wú)法聽(tīng) 懂,所以要為全國(guó)進(jìn)行溝通建立一個(gè)語(yǔ)言標(biāo)準(zhǔn),這就是我們的普通話的作用。計(jì)算機(jī)網(wǎng)絡(luò)協(xié) 議同我們的普通話一樣,幫助我們的計(jì)算機(jī)之間進(jìn)行溝通。 想要成為計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域高手,掌握計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域知識(shí)就是必備的,而學(xué)習(xí)計(jì)算機(jī)網(wǎng) 絡(luò)領(lǐng)域知識(shí)過(guò)程就是理解網(wǎng)絡(luò)協(xié)議的構(gòu)成、原理和工作方式的過(guò)程。
計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)
開(kāi)放系統(tǒng)互連參考模型 (Open System Interconnect 簡(jiǎn)稱 OSI )是國(guó)際標(biāo)準(zhǔn)化組織 (ISO) 和國(guó)際電報(bào)電話咨詢委員會(huì)(CCITT) 聯(lián)合制定的開(kāi)放系統(tǒng)互連參考模型,為開(kāi)放式互連信息系 統(tǒng)提供了一種功能結(jié)構(gòu)的框架。其目的是為異種計(jì)算機(jī)互連提供一個(gè)共同的基礎(chǔ)和標(biāo)準(zhǔn)框架, 并為保持相關(guān)標(biāo)準(zhǔn)的一致性和兼容性提供共同的參考。這里所說(shuō)的開(kāi)放系統(tǒng),實(shí)質(zhì)上指的是 遵循 OSI 參考模型和相關(guān)協(xié)議能夠?qū)崿F(xiàn)互連的具有各種應(yīng)用目的的計(jì)算機(jī)系統(tǒng)。 OSI 采用了分層的結(jié)構(gòu)化技術(shù),共分七層, 物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì) 話層、表示層、應(yīng)用層 。
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

TCP/IP 模型

OSI 模型比較復(fù)雜且學(xué)術(shù)化,所以我們實(shí)際使用的 TCP/IP 模型,分 5 層,物理層、數(shù)據(jù) 鏈路層 也有 TCP/IP 模型將物理層、數(shù)據(jù)鏈路層合稱為 網(wǎng)絡(luò)接口層 ,與之對(duì)應(yīng)的,協(xié)議就 被稱為 TCP/IP 四層協(xié)議模型 )、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層 。兩個(gè)模型之間的對(duì)應(yīng)關(guān)系如圖 所示:
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
無(wú)論什么模型,每一個(gè)抽象層建立在低一層提供的服務(wù)上,并且為高一層提供服務(wù)。大 致來(lái)說(shuō),可以這么理解(只是幫助我們理解,實(shí)際上肯定會(huì)有點(diǎn)出入),對(duì)于我們的 PC 機(jī) 來(lái)說(shuō),物理層可以看成網(wǎng)卡,數(shù)據(jù)鏈路層可以看成網(wǎng)卡驅(qū)動(dòng)程序,網(wǎng)絡(luò)層和傳輸層由操作負(fù) 責(zé)處理,應(yīng)用層則是常用的一些網(wǎng)絡(luò)應(yīng)用程序和我們自己所編寫(xiě)的網(wǎng)絡(luò)應(yīng)用程序。
TCP/IP 協(xié)議族
Transmission Control Protocol/Internet Protocol 的簡(jiǎn)寫(xiě),中譯名為傳輸控制協(xié)議 / 因特網(wǎng) 互聯(lián)協(xié)議,是 Internet 最基本的協(xié)議、 Internet 國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的 IP 協(xié)議和 傳輸層的 TCP 協(xié)議組成。協(xié)議采用了 5 層的層級(jí)結(jié)構(gòu)。然而在很多情況下,它是利用 IP 進(jìn) 行通信時(shí)所必須用到的協(xié)議群的統(tǒng)稱。也就是說(shuō),它其實(shí)是個(gè)協(xié)議家族,由很多個(gè)協(xié)議組成, 并且是在不同的層, 是互聯(lián)網(wǎng)的基礎(chǔ)通信架構(gòu)。
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

IP、TCP UDP?

在上述圖形中,網(wǎng)際協(xié)議 IP TCP/IP 中非常重要的協(xié)議,往往用來(lái)確定網(wǎng)絡(luò)中唯一的 一臺(tái)計(jì)算設(shè)備,它的作用就好比我們現(xiàn)實(shí)生活中的電話號(hào)碼或者或者通訊地址。所以這層負(fù) 責(zé)對(duì)數(shù)據(jù)加上 IP 地址(有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地 址))和其他的數(shù)據(jù)以確定傳輸?shù)哪繕?biāo)。 而 TCP UDP 都是傳輸層的協(xié)議,傳輸層主要為兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端的 通信。
TCP 有點(diǎn)類似于我們?nèi)粘I钪械拇螂娫?,電話接通后通過(guò)“喂”確認(rèn)對(duì)方身份,聽(tīng)不 清會(huì)要求對(duì)方重說(shuō),對(duì)方說(shuō)的太快了會(huì)要求對(duì)方說(shuō)慢點(diǎn),講完了各說(shuō)一句“再見(jiàn)”結(jié)束通話。 TCP 提供了一種可靠的數(shù)據(jù)傳輸服務(wù), TCP 是面向連接的,也就是說(shuō),利用 TCP 通信的兩臺(tái) 主機(jī)首先要經(jīng)歷一個(gè)建立連接的過(guò)程,等到連接建立后才開(kāi)始傳輸數(shù)據(jù),而且傳輸過(guò)程中采 用“ 帶重傳的肯定確認(rèn) 技術(shù)來(lái)實(shí)現(xiàn)傳輸?shù)目煽啃浴?/span> TCP 還采用一種稱為 滑動(dòng)窗口 的方式進(jìn) 行流量控制,發(fā)送完成后還會(huì)關(guān)閉連接。
UDP User Datagram Protocol 的簡(jiǎn)稱, 中文名是用戶數(shù)據(jù)報(bào)協(xié)議)有點(diǎn)類似于我們?nèi)?常生活中通過(guò)不靠譜的物流系統(tǒng)寄東西。UDP 是把數(shù)據(jù)直接發(fā)出去,而不管對(duì)方是不是在接 收,也不管對(duì)方是否能接收的了,也不需要接收方確認(rèn),屬于不可靠的傳輸,可能會(huì)出現(xiàn)丟 包現(xiàn)象,實(shí)際應(yīng)用中要求程序員編程驗(yàn)證。 所以 TCP 要比 UDP 可靠的多。
注意:
我們一些常見(jiàn)的網(wǎng)絡(luò)應(yīng)用基本上都是基于 TCP UDP 的,這兩個(gè)協(xié)議又會(huì)使用網(wǎng)絡(luò)層 IP 協(xié)議。但是我們完全可以繞過(guò)傳輸層的 TCP UDP ,直接使用 IP ,比如 Linux 內(nèi)核中的 LVS 就可以直接基于 IP 層進(jìn)行負(fù)載平衡調(diào)度;甚至還可以直接訪問(wèn)鏈路層,比如 tcpdump 程序就是直接和鏈路層進(jìn)行通信的。

?TCP/IP 網(wǎng)絡(luò)傳輸中的數(shù)據(jù)

每個(gè)分層中,都會(huì)對(duì)所發(fā)送的數(shù)據(jù)附加一個(gè)首部,在這個(gè)首部中包含了該層必要的信息, 如發(fā)送的目標(biāo)地址以及協(xié)議相關(guān)信息。通常,為協(xié)議提供的信息為包首部,所要發(fā)送的內(nèi)容 為數(shù)據(jù)。在下一層的角度看,從上一層收到的包全部都被認(rèn)為是本層的數(shù)據(jù)。 網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包由兩部分組成:一部分是協(xié)議所要用到的首部,另一部分是上一層 傳過(guò)來(lái)的數(shù)據(jù)。首部的結(jié)構(gòu)由協(xié)議的具體規(guī)范詳細(xì)定義。在數(shù)據(jù)包的首部,明確標(biāo)明了協(xié)議應(yīng)該如何讀取數(shù)據(jù)。反過(guò)來(lái)說(shuō),看到首部,也就能夠了解該協(xié)議必要的信息以及所要處理的 數(shù)據(jù)。我們用用戶 A 發(fā)送,用戶 B 接受來(lái)說(shuō)說(shuō)明:
用戶 A 應(yīng)用程序處理
首先應(yīng)用程序會(huì)進(jìn)行編碼處理產(chǎn)生報(bào)文 / 消息( message )交給下面的 TCP 層。
用戶 A TCP 模塊的處理
TCP 根據(jù)應(yīng)用的指示,負(fù)責(zé)建立連接、發(fā)送數(shù)據(jù)以及斷開(kāi)連接。 TCP 提供將應(yīng)用層發(fā)來(lái)的 數(shù)據(jù)順利發(fā)送至對(duì)端的可靠傳輸。為了實(shí)現(xiàn)這一功能,需要將應(yīng)用層數(shù)據(jù)封裝為報(bào)文段 (segment )并附加一個(gè) TCP 首部然后交給下面的 IP 層。
用戶 A IP 模塊的處理
IP TCP 傳過(guò)來(lái)的 TCP 首部和 TCP 數(shù)據(jù)合起來(lái)當(dāng)做自己的數(shù)據(jù),并在 TCP 首部的前端 加上自己的 IP 首部生成 IP 數(shù)據(jù)報(bào)( datagram )然后交給下面的數(shù)據(jù)鏈路層。
用戶 A 數(shù)據(jù)鏈路層的處理
IP 傳過(guò)來(lái)的 IP 包對(duì)于數(shù)據(jù)鏈路層來(lái)說(shuō)就是數(shù)據(jù)。給這些數(shù)據(jù)附加上鏈路層首部封裝為 鏈路層幀(frame ),生成的鏈路層幀( frame )將通過(guò)物理層傳輸給接收端。
用戶 B 數(shù)據(jù)鏈路層的處理
用戶 B 主機(jī)收到鏈路層幀( frame )后,首先從鏈路層幀( frame )首部找到 MAC 地址 判斷 是否為發(fā)送給自己的包,若不是則丟棄數(shù)據(jù)。 如果是發(fā)送給自己的包,則從以太網(wǎng)包首部中的類型確定數(shù)據(jù)類型,再傳給相應(yīng)的模塊,如 IP、 ARP 等。這里的例子則是 IP 。
用戶 B IP 模塊的處理
IP 模塊接收到 數(shù)據(jù)后也做類似的處理。從包首部中判斷此 IP 地址是否與自己的 IP 地址 匹配,如果匹配則根據(jù)首部的協(xié)議類型將數(shù)據(jù)發(fā)送給對(duì)應(yīng)的模塊,如 TCP 、 UDP 。這里的例 子則是 TCP 。
用戶 B TCP 模塊的處理
TCP 模塊中,首先會(huì)計(jì)算一下校驗(yàn)和,判斷數(shù)據(jù)是否被破壞。然后檢查是否在按照序號(hào) 接收數(shù)據(jù)。最后檢查端口號(hào),確定具體的應(yīng)用程序。數(shù)據(jù)被完整地接收以后,會(huì)傳給由端口 號(hào)識(shí)別的應(yīng)用程序。
用戶 B 應(yīng)用程序的處理
接收端應(yīng)用程序會(huì)直接接收發(fā)送端發(fā)送的數(shù)據(jù)。通過(guò)解析數(shù)據(jù),展示相應(yīng)的內(nèi)容。

?深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

地址和端口號(hào)

MAC 地址
我們常聽(tīng)說(shuō) MAC 地址和 IP 地址。
MAC 地址全稱叫做媒體訪問(wèn)控制地址,也稱為局域網(wǎng)地址( LAN Address ), MAC 位址, 以太網(wǎng)地址(Ethernet Address )或物理地址( Physical Address ),由網(wǎng)絡(luò)設(shè)備制造商生產(chǎn)時(shí) 寫(xiě)在硬件內(nèi)部。MAC 地址與網(wǎng)絡(luò)無(wú)關(guān),也即無(wú)論將帶有這個(gè)地址的硬件(如網(wǎng)卡、集線器、 路由器等)接入到網(wǎng)絡(luò)的何處,都有相同的 MAC 地址,它由廠商寫(xiě)在網(wǎng)卡的 BIOS 里,從理 論上講,除非盜來(lái)硬件(網(wǎng)卡),否則是沒(méi)有辦法冒名頂替的。 MAC 地址共 48 位(6 個(gè)字節(jié))。前 24 位由 IEEE (電氣和電子工程師協(xié)會(huì))決定如何分 配,后 24 位由實(shí)際生產(chǎn)該網(wǎng)絡(luò)設(shè)備的廠商自行制定。例如: FF:FF:FF:FF:FF:FF 或 FF-FF-FF-FF-FF-FF
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

?深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

IP 地址

IP 地址( Internet Protocol Address )的全稱叫作互聯(lián)網(wǎng)協(xié)議地址,它的本義是為互聯(lián)網(wǎng) 上的每一個(gè)網(wǎng)絡(luò)和每一臺(tái)主機(jī)配置一個(gè)唯一的邏輯地址,用來(lái)與物理地址作區(qū)分。 所以 IP 地址用來(lái)識(shí)別 TCP/IP 網(wǎng)絡(luò)中互連的主機(jī)和路由器。 IP 地址基于邏輯,比較靈 活,不受硬件限制,也容易記憶。
IP 地址分為: IPv4 IPv6 。我們這里著重講的是 IPv4 地址, IP 地址是由 32 位的二進(jìn)制 數(shù)組成,它們通常被分為 4 個(gè)“ 8 位二進(jìn)制數(shù)”,我們可以把它理解為 4 個(gè)字節(jié),格式表示 為:(A.B.C.D )。其中, A , B , C , D 這四個(gè)英文字母表示為 0-255 的十進(jìn)制的整數(shù)。例192.168.1.1
Tips IP 地址和 MAC 地址之間的區(qū)別
1 、對(duì)于網(wǎng)絡(luò)中的一些設(shè)備,路由器或者是 PC 及而言, IP 地址的設(shè)計(jì)是出于拓?fù)湓O(shè)計(jì) 出來(lái)的,要在不重復(fù) IP 地址的情況下,它是可以隨意更改的;而 MAC 地址是根據(jù)生產(chǎn)廠 商燒錄好的,它一般不能改動(dòng)的,一般來(lái)說(shuō),當(dāng)一臺(tái) PC 機(jī)的網(wǎng)卡壞了之后,更換了網(wǎng)卡之 MAC 地址就會(huì)變了。
2 、在前面的介紹里面,它們最明顯的區(qū)別就是長(zhǎng)度不同, IP 地址的長(zhǎng)度為 32 位,而 MAC 地址為 48 位。
3 、它們的尋址協(xié)議層不同。 IP 地址應(yīng)用于 OSI 模型的網(wǎng)絡(luò)層,而 MAC 地址應(yīng)用在 OSI 模型的數(shù)據(jù)鏈路層。 數(shù)據(jù)鏈路層協(xié)議可以使數(shù)據(jù)從一個(gè)節(jié)點(diǎn)傳遞到相同鏈路的另一個(gè)節(jié)點(diǎn) 上(通過(guò) MAC 地址),而網(wǎng)絡(luò)層協(xié)議使數(shù)據(jù)可以從一個(gè)網(wǎng)絡(luò)傳遞到另一個(gè)網(wǎng)絡(luò)上( ARP 據(jù)目的 IP 地址,找到中間節(jié)點(diǎn)的 MAC 地址,通過(guò)中間節(jié)點(diǎn)傳送,從而最終到達(dá)目的網(wǎng)絡(luò))。
4 、分配依據(jù)不同。 IP 地址的分配是基于我們自身定義的網(wǎng)絡(luò)拓?fù)洌?/em> MAC 地址的分配是 基于制造商。
端口號(hào)
在傳輸層也有這種類似于地址的概念,那就是端口號(hào)。端口號(hào)用來(lái)識(shí)別同一臺(tái)計(jì)算機(jī)中 進(jìn)行通信的不同應(yīng)用程序。因此,它也被稱為程序地址。 一臺(tái)計(jì)算機(jī)上同時(shí)可以運(yùn)行多個(gè)程序。傳輸層協(xié)議正是利用這些端口號(hào)識(shí)別本機(jī)中正在 進(jìn)行通信的應(yīng)用程序,并準(zhǔn)確地將數(shù)據(jù)傳輸

?深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

面試題:為什么端口號(hào)有 65535 個(gè)?
因?yàn)樵? TCP 、 UDP 協(xié)議報(bào)文的開(kāi)頭,會(huì)分別有 16 位二進(jìn)制來(lái)存儲(chǔ)源端口號(hào)和目標(biāo)端口 號(hào),所以端口個(gè)數(shù)是 2^16=65536 個(gè),但是 0 號(hào)端口用來(lái)表示所有端口,所以實(shí)際可用的端 口號(hào)是 65535 個(gè)
端口號(hào)的確定
? 標(biāo)準(zhǔn)既定的端口號(hào):這種方法也叫靜態(tài)方法。它是指每個(gè)應(yīng)用程序都有其指定的端 口號(hào)。但并不是說(shuō)可以隨意使用任何一個(gè)端口號(hào)。例如 HTTP、 FTP 、 TELNET 等廣為使用的 應(yīng)用協(xié)議中所使用的端口號(hào)就是固定的。這些端口號(hào)被稱為知名端口號(hào),分布在 0~1023 之 間,我們?cè)诰帉?xiě)自己的網(wǎng)絡(luò)應(yīng)用服務(wù)時(shí),盡量不要使用這些端口號(hào)。
? 時(shí)序分配法:服務(wù)器有必要確定監(jiān)聽(tīng)端口號(hào),以讓客戶端程序訪問(wèn)服務(wù)器上的服務(wù)。 但是客戶端沒(méi)必要確定端口號(hào)。在這種方法下,客戶端應(yīng)用程序完全可以不用自己設(shè)置端口 號(hào),而全權(quán)交給操作系統(tǒng)進(jìn)行分配,客戶端使用的臨時(shí)端口號(hào),操作系統(tǒng)分配的一般都是大 于 10000 的。
觀察端口號(hào)
Windows 下使用 netstat -ano 查看所有端口號(hào), netstat -ano|findstr < 端口號(hào) > ”查看 指定端口號(hào)。
Linux 下可以用 root 用戶執(zhí)行 lsof -i: 端口號(hào)查看指定端口占用。
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

?lsof -i -U:顯示所有打開(kāi)的 UNIX domain 和端口文件

我們用的更多的是 netstat
netstat -tunlp 用于顯示 tcp , udp 的端口和進(jìn)程等相關(guān)情況。
netstat 查看端口占用語(yǔ)法格式:
netstat -tunlp | grep 端口號(hào)
-t (tcp) 僅顯示 tcp 相關(guān)選項(xiàng)
-u (udp) 僅顯示 udp 相關(guān)選項(xiàng)
-n 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化為數(shù)字
-l 僅列出在 Listen( 監(jiān)聽(tīng) ) 的服務(wù)狀態(tài)
-p 顯示建立相關(guān)鏈接的程序名
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
綜述
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
所以一般來(lái)說(shuō),不管計(jì)算機(jī)中有多少網(wǎng)卡,每個(gè)網(wǎng)卡都會(huì)有自己的 MAC 地址,這個(gè) MAC 地址是不會(huì)變化的。而每個(gè)網(wǎng)卡在正常工作的情況下,都會(huì)有一個(gè) IP 地址,這個(gè) IP 地址完全是可以變化的。而這臺(tái)計(jì)算機(jī)中承載的各種應(yīng)用程序可以擁有自己的端口號(hào),然后 通過(guò)服務(wù)器的網(wǎng)卡,正確地進(jìn)行網(wǎng)絡(luò)通信。
一臺(tái)服務(wù)器上的不同網(wǎng)絡(luò)應(yīng)用程序必須有不同的端口號(hào),A 程序啟動(dòng)了使用了端口 x , B 程序啟動(dòng)就不能使用端口 x ,否則會(huì)報(bào)錯(cuò)“ Address already in use ”。 總的來(lái)說(shuō),操作系統(tǒng)是通過(guò)源 IP 地址、目標(biāo) IP 地址、協(xié)議號(hào)(協(xié)議類型)、源端口號(hào) 以及目標(biāo)端口號(hào)這五個(gè)元素唯一性的識(shí)別一個(gè)網(wǎng)絡(luò)上的通信
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
面試題:一臺(tái)主機(jī)上只能保持最多 65535 個(gè) TCP 連接,對(duì)嗎?
這個(gè)說(shuō)法不對(duì),我們分服務(wù)器和客戶端分開(kāi)討論,以下的討論都基于服務(wù)器和客戶端都 只有 1 個(gè) IP 地址。
服務(wù)端
我們已經(jīng)知道網(wǎng)絡(luò)通信五元組是由過(guò)源 IP 地址、目標(biāo) IP 地址、協(xié)議號(hào)(協(xié)議類型)、 源端口號(hào)以及目標(biāo)端口號(hào)構(gòu)成?,F(xiàn)在考察的是 TCP 連接,自然五元組中的協(xié)議號(hào)已經(jīng)定下 來(lái)了,于是網(wǎng)絡(luò)通信五元組就變化為 TCP 四元組。
那就是說(shuō) TCP 連接四元組是由源 IP 地址、源端口、目的 IP 地址和目的端口構(gòu)成。 很明顯當(dāng)四元組中任意一個(gè)元素發(fā)生了改變,那么就代表的是一條完全不同的新連接。 拿我們常用的 MySQL 舉例,假設(shè)它的 IP X ,端口 3306 。用戶 A 基于 IP 地址 A1 ,端口 PA 連接 MySQL ,于是構(gòu)成了一個(gè) TCP 連接四元組 (A1,PA,X,3306) 。用戶 B 基于 IP 地址 B1 , 端口 PB 連接同一個(gè) MySQL ,這個(gè)時(shí)候 MySQL 需要開(kāi)啟一個(gè)新端口來(lái)和用戶 B 通信嗎?從 我們?nèi)粘5拈_(kāi)發(fā)就可以知道,MySQL 并不需要這么做,所以用戶 B 就和 MySQL 構(gòu)成了一個(gè) 新的 TCP 連接四元組 (B1,PB,X,3306) 。
服務(wù)端理論上能達(dá)成的最高并發(fā)數(shù)量是多少?從我們上面的用戶 A 和用戶 B 構(gòu)成的 TCP 連接四元組:
(A1,PA,X,3306)
(B1,PB,X,3306)
可以看到目的 IP 地址和目的端口( X,3306 )是不變的,這樣就只剩下源 IP 地址、源端 口是可變的。IP 地址是一個(gè) 32 位的整數(shù),所以源 IP 最大有 2 32 次方這么多個(gè)。 端 口是一個(gè) 16 位的整數(shù),所以端口的數(shù)量就是 2 16 次方。 2 32 次方( ip 數(shù))× 2 的 16 次方( port 數(shù))大約等于兩百多萬(wàn)億。所以理論上,我們每個(gè) server 可以接收的連 接上限就是兩百多萬(wàn)億。
當(dāng)然實(shí)際上做不到,目前工程實(shí)踐中可以達(dá)到的連接數(shù)在千萬(wàn)級(jí)別?;? Java 的應(yīng)用 程序大概能支持百萬(wàn)級(jí)別,具體怎么做會(huì)在本課程第五章中詳細(xì)說(shuō)明。
客戶端
前面我們已經(jīng)說(shuō)過(guò),“客戶端應(yīng)用程序完全可以不用自己設(shè)置端口號(hào),而全權(quán)交給操作 系統(tǒng)進(jìn)行分配”,可用的端口號(hào)只有 6 萬(wàn)多,從這個(gè)角度考慮,客戶端最多只能發(fā)起 6 萬(wàn)多 條 TCP 連接。但其實(shí)也不是。 TCP 連接四元組來(lái)考慮:源 IP 地址、源端口、目的 IP 地址和目的端口,目的 IP 地址 和目的端口指的是服務(wù)器的 IP 和端口,源 IP 地址、源端口自然就是客戶端的。 只要服務(wù)器的 IP 或者端口不一樣,即使客戶端的 IP 和端口是一樣的。這個(gè)四元組也 是屬于一條完全不同的新連接。比如:
連接 1 :客戶端 IP 10000 服務(wù)器 IP 10000
連接 2 :客戶端 IP 10000 服務(wù)器 IP 20000
雖然客戶端的 IP 和端口完全一樣,但由于服務(wù)器側(cè)的端口不同,所以仍然是兩條不同的連 接。問(wèn)題來(lái)了,客戶端同一個(gè)端口可以連接不同的服務(wù)器嗎?答案是可以的。 客戶端只要啟動(dòng)時(shí)不顯示綁定到某個(gè)端口上,內(nèi)核是可以使用一個(gè)端口連不同的服務(wù)端, 內(nèi)核會(huì)自己進(jìn)行選擇并恰當(dāng)?shù)貜?fù)用的,而且完全不會(huì)產(chǎn)生數(shù)據(jù)混亂,因?yàn)椤霸?IP 地址、目 標(biāo) IP 地址、源端口號(hào)以及目標(biāo)端口號(hào)就能唯一性確定一個(gè) TCP 連接”。 那么對(duì)客戶端來(lái)說(shuō),四元組里有 3 個(gè)可變,自然客戶端能同時(shí)支持的連接數(shù)比服務(wù)器還 要大得多。
TCP 特性
在我們上面的講述中,存在著客戶端和服務(wù)端兩者角色,在網(wǎng)絡(luò)通信里是怎么區(qū)分的? 這個(gè)就牽涉到了 TCP 的相關(guān)特性。 TCP( Transmission Control Protocol )是面向連接的通信協(xié)議,通過(guò)三次握手建立連接, 然后才能開(kāi)始數(shù)據(jù)的讀寫(xiě),通訊完成時(shí)要拆除連接,由于 TCP 是面向連接的所以只能用于端 到端的通訊。
TCP 提供的是一種可靠的數(shù)據(jù)流服務(wù),數(shù)據(jù)有可能被拆分后發(fā)送,那么采用超時(shí)重傳機(jī) 制是和應(yīng)答確認(rèn)機(jī)制是組成 TCP 可靠傳輸?shù)年P(guān)鍵設(shè)計(jì)。 而超時(shí)重傳機(jī)制中最最重要的就是重傳超時(shí)(RTO , Retransmission TimeOut )的時(shí)間選 擇,很明顯,在工程上和現(xiàn)實(shí)中網(wǎng)絡(luò)環(huán)境是十分復(fù)雜多變的,有時(shí)候可能突然的抽風(fēng),有時(shí) 候可能突然的又很順暢。在數(shù)據(jù)發(fā)送的過(guò)程中,如果用一個(gè)固定的值一直作為超時(shí)計(jì)時(shí)器的 時(shí)長(zhǎng)是非常不經(jīng)濟(jì)也非常不準(zhǔn)確的方法,這樣的話,超時(shí)的時(shí)長(zhǎng)就需要根據(jù)網(wǎng)絡(luò)情況動(dòng)態(tài)調(diào) 整,就需要采樣統(tǒng)計(jì)一個(gè)數(shù)據(jù)包從發(fā)送端發(fā)送出去到接收到這個(gè)包的回復(fù)這段時(shí)長(zhǎng)來(lái)動(dòng)態(tài)設(shè) 置重傳超時(shí)值,這個(gè)時(shí)長(zhǎng)就是為 RTT ,學(xué)名 round-trip time ,然后再根據(jù)這個(gè) RTT 通過(guò)各種 算法和公式平滑 RTT 值后,最終確定重傳超時(shí)值。 而 IP 層進(jìn)行數(shù)據(jù)傳輸時(shí),是不能保證數(shù)據(jù)包按照發(fā)送的順序達(dá)到目的機(jī)器。當(dāng) IP 將把 它們向‘ 傳送到 TCP 層后, TCP 將包排序并進(jìn)行錯(cuò)誤檢查。 TCP 數(shù)據(jù)包中包括序號(hào)和確認(rèn), 所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP 還采用一種稱為 滑動(dòng)窗口 的方式進(jìn)行流量控制,所謂窗口實(shí)際表示接收能力,用 以限制發(fā)送方的發(fā)送速度。 同時(shí) TCP 還允許在一個(gè) TCP 連接上,通信的雙方可以同時(shí)傳輸數(shù)據(jù),也就是所謂的全 雙工。 面向連接的服務(wù)(例如 Telnet 、 FTP rlogin 、 X Windows SMTP )需要高度的可靠性, 所以它們使用了 TCP 。 DNS 在某些情況下使用 TCP (發(fā)送和接收域名數(shù)據(jù)庫(kù)),但使用 UDP 傳送有關(guān)單個(gè)主機(jī)的信息。
TCP 三次握手
TCP 提供面向有連接的通信傳輸。面向有連接是指在數(shù)據(jù)通信開(kāi)始之前先做好兩端之間 的準(zhǔn)備工作。 所謂三次握手是指建立一個(gè) TCP 連接時(shí)需要客戶端和服務(wù)器端總共發(fā)送三個(gè)包以確認(rèn) 連接的建立。在 socket 編程中,這一過(guò)程由客戶端執(zhí)行 connect 來(lái)觸發(fā),所以網(wǎng)絡(luò)通信中, 發(fā)起連接的一方我們稱為客戶端,接收連接的一方我們稱之為服務(wù)端。 簡(jiǎn)易速記版
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
但是簡(jiǎn)易速記版,在真實(shí)的面試中不能讓面試官滿意,很多公司還會(huì)考察握手過(guò)程中的
具體詳情
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
第一次握手:客戶端將請(qǐng)求報(bào)文標(biāo)志位 SYN 置為 1 ,請(qǐng)求報(bào)文的 Sequence Number 字段 (簡(jiǎn)稱 seq )中填入一個(gè)隨機(jī)值 J ,并將該數(shù)據(jù)包發(fā)送給服務(wù)器端,客戶端進(jìn)入 SYN_SENT 狀 態(tài),等待服務(wù)器端確認(rèn)。
第二次握手:服務(wù)器端收到數(shù)據(jù)包后由請(qǐng)求報(bào)文標(biāo)志位 SYN=1 知道客戶端請(qǐng)求建立連 接,服務(wù)器端將應(yīng)答報(bào)文標(biāo)志位 SYN ACK 都置為 1 ,應(yīng)答報(bào)文的 Acknowledgment Number 字段(簡(jiǎn)稱 ack )中填入 ack=J+1 ,應(yīng)答報(bào)文的 seq 中填入一個(gè)隨機(jī)值 K ,并將該數(shù)據(jù)包發(fā)送 給客戶端以確認(rèn)連接請(qǐng)求,服務(wù)器端進(jìn)入 SYN_RCVD 狀態(tài)。
第三次握手:客戶端收到應(yīng)答報(bào)文后,檢查 ack 是否為 J+1 , ACK 是否為 1 ,如果正確 則將第三個(gè)報(bào)文標(biāo)志位 ACK 置為 1 , ack=K+1 ,并將該數(shù)據(jù)包發(fā)送給服務(wù)器端,服務(wù)器端檢 查 ack 是否為 K+1 ACK 是否為 1 ,如果正確則連接建立成功,客戶端和服務(wù)器端進(jìn)入 ESTABLISHED 狀態(tài),完成三次握手,隨后客戶端與服務(wù)器端之間可以開(kāi)始傳輸數(shù)據(jù)了。
為什么 TCP 握手需要三次 ?
TCP 是可靠的傳輸控制協(xié)議,而三次握手是保證數(shù)據(jù)可靠傳輸又能提高傳輸效率的最小 次數(shù)。為什么?RFC793 ,也就是 TCP 的協(xié)議 RFC 中就談到了原因,這是因?yàn)椋?為了實(shí)現(xiàn)可靠數(shù)據(jù)傳輸, TCP 協(xié)議的通信雙方,都必須維護(hù)一個(gè)序列號(hào), 以標(biāo)識(shí)發(fā)送 出去的數(shù)據(jù)包中,哪些是已經(jīng)被對(duì)方收到的。
舉例說(shuō)明:發(fā)送方在發(fā)送數(shù)據(jù)包(假設(shè)大小為 10 byte )時(shí), 同時(shí)送上一個(gè)序號(hào) ( 假設(shè) 為 500) ,那么接收方收到這個(gè)數(shù)據(jù)包以后, 就可以回復(fù)一個(gè)確認(rèn)號(hào)( 510 = 500 + 10 ) 告 訴發(fā)送方 “我已經(jīng)收到了你的數(shù)據(jù)包, 你可以發(fā)送下一個(gè)數(shù)據(jù)包, 序號(hào)從 511 開(kāi)始” 。 三次握手的過(guò)程即是通信雙方相互告知 序列號(hào)起始值,并 確認(rèn)對(duì)方 已經(jīng)收到了序列號(hào) 起始值的必經(jīng)步驟。
如果只是兩次握手, 至多只有連接發(fā)起方的起始序列號(hào)能被確認(rèn), 另一方選擇的序列 號(hào)則得不到確認(rèn)。 至于為什么不是四次,很明顯,三次握手后,通信的雙方都已經(jīng)知道了對(duì)方序列號(hào)起始
值,也確認(rèn)了對(duì)方知道自己序列號(hào)起始值,第四次握手已經(jīng)毫無(wú)必要了。
TCP 的三次握手的漏洞 -SYN 洪泛攻擊
但是在 TCP 三次握手中是有一個(gè)缺陷,被稱為 SYN 洪泛攻擊。三次握手中有一個(gè)第二 次握手,服務(wù)端向客戶端應(yīng)答請(qǐng)求,應(yīng)答請(qǐng)求是需要客戶端 IP 的,而且因?yàn)槲帐诌^(guò)程沒(méi)有 完成,操作系統(tǒng)使用隊(duì)列維持這個(gè)狀態(tài)(Linux 2.2 以后,這個(gè)隊(duì)列大小參數(shù)可以通過(guò) /proc/sys/net/ipv4/tcp_max_syn_backlog 設(shè)置)。于是攻擊者就偽造這個(gè) IP ,往服務(wù)器端狂 發(fā)送第一次握手的內(nèi)容,當(dāng)然第一次握手中的客戶端 IP 地址是偽造的,從而服務(wù)端忙于進(jìn) 行第二次握手,但是第二次握手是不會(huì)有應(yīng)答的,所以導(dǎo)致服務(wù)器隊(duì)列滿,而拒絕連接。 面對(duì)這種攻擊,有以下的解決方案,最好的方案是防火墻
無(wú)效連接監(jiān)視釋放
這種方法不停監(jiān)視所有的連接,包括三次握手的,還有握手一次的,反正是所有的,當(dāng) 達(dá)到一定( ) 閾值時(shí)拆除這些連接,從而釋放系統(tǒng)資源。這種方法對(duì)于所有的連接一視同仁, 不管是正常的還是攻擊的,所以這種方式不推薦。
延緩 TCB 分配方法
一般的做完第一次握手之后,服務(wù)器就需要為該請(qǐng)求分配一個(gè) TCB (連接控制資源), 通常這個(gè)資源需要 200 多個(gè)字節(jié)。延遲 TCB 的分配,當(dāng)正常連接建立起來(lái)后再分配 TCB 則 可以有效地減輕服務(wù)器資源的消耗。
使用防火墻
防火墻在確認(rèn)了連接的有效性后,才向內(nèi)部的服務(wù)器( Listener )發(fā)起 SYN 請(qǐng)求,
TCP 四次揮手(分手)
四次揮手即終止 TCP 連接,就是指斷開(kāi)一個(gè) TCP 連接時(shí),需要客戶端和服務(wù)端總共發(fā) 送 4 個(gè)包以確認(rèn)連接的斷開(kāi)。在 socket 編程中,這一過(guò)程由客戶端或服務(wù)端任一方執(zhí)行 close 來(lái)觸發(fā)。過(guò)程簡(jiǎn)易記憶版:
深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)
由于 TCP 連接是全雙工的,因此,每個(gè)方向都必須要單獨(dú)進(jìn)行關(guān)閉。首先進(jìn)行關(guān)閉的一 方將執(zhí)行主動(dòng)關(guān)閉,而另一方則執(zhí)行被動(dòng)關(guān)閉。

深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01,分布式框架,tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

?由上圖可見(jiàn),TCP 建立一個(gè)連接需 3 個(gè)分節(jié),終止一個(gè)連接則需 4 個(gè)分節(jié)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-576273.html

(1) 某個(gè)應(yīng)用進(jìn)程首先調(diào)用 close ,我們稱該端執(zhí)行主動(dòng)關(guān)閉( active close) 。該端的 TCP 于是發(fā)送一個(gè) FIN 分節(jié),表示數(shù)據(jù)發(fā)送完畢,應(yīng)用進(jìn)程進(jìn)入 FIN-WAIT-1 (終止等待 1 )狀態(tài)。
(2 )接收到這個(gè) FIN 的對(duì)端執(zhí)行被動(dòng)關(guān)閉 (passive close) ,發(fā)出確認(rèn)報(bào)文。因?yàn)? FIN 的接 收意味著接收端應(yīng)用進(jìn)程在相應(yīng)連接上再無(wú)額外數(shù)據(jù)可接收,接收端進(jìn)入了 CLOSE-WAIT (關(guān) 閉等待)狀態(tài),這時(shí)候處于半關(guān)閉狀態(tài),即主動(dòng)關(guān)閉端已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,但是被動(dòng)關(guān) 閉端若發(fā)送數(shù)據(jù),主動(dòng)關(guān)閉端依然要接受。這個(gè)狀態(tài)還要持續(xù)一段時(shí)間,也就是整個(gè) CLOSE-WAIT 狀態(tài)持續(xù)的時(shí)間。主動(dòng)關(guān)閉端收到確認(rèn)報(bào)文后進(jìn)入 FIN-WAIT-2 (終止等待 2 )狀 態(tài)。
(3) 一段時(shí)間后,被動(dòng)關(guān)閉的應(yīng)用進(jìn)程將調(diào)用 close 關(guān)閉它的套接字。這導(dǎo)致它的 TCP 也 發(fā)送一個(gè) FIN ,表示它也沒(méi)數(shù)據(jù)需要發(fā)送了。
(4) 接收這個(gè)最終 FIN 的原發(fā)送端 TCP (即執(zhí)行主動(dòng)關(guān)閉的那一端)確認(rèn)這個(gè) FIN 發(fā)出一 個(gè)確認(rèn) ACK 報(bào)文,并進(jìn)入了 TIME-WAIT (時(shí)間等待)狀態(tài)。注意此時(shí) TCP 連接還沒(méi)有釋放, 必須經(jīng)過(guò) 2 ? MSL (最長(zhǎng)報(bào)文段壽命 / 最長(zhǎng)分節(jié)生命期 max segement lifetime MSL 是任何 IP 數(shù)據(jù)報(bào)能夠在因特網(wǎng)中存活的最長(zhǎng)時(shí)間,任何 TCP 實(shí)現(xiàn)都必須為 MSL 選擇一個(gè)值。 RFC 1122[Braden 1989]的建議值是 2 分鐘,不過(guò)源自 Berkelcy 的實(shí)現(xiàn)傳統(tǒng)上改用 30 秒這個(gè)值。 這意味著 TIME_WAIT 狀態(tài)的持續(xù)時(shí)間在 1 分鐘到 4 分鐘之間)的時(shí)間后,當(dāng)主動(dòng)關(guān)閉端撤 銷相應(yīng)的 TCB 后,才進(jìn)入 CLOSED 狀態(tài)。
(5) 被動(dòng)關(guān)閉端只要收到了客戶端發(fā)出的確認(rèn),立即進(jìn)入 CLOSED 狀態(tài)。同樣,撤銷 TCB 后,就結(jié)束了這次的 TCP 連接??梢钥吹剑粍?dòng)關(guān)閉端結(jié)束 TCP 連接的時(shí)間要比主動(dòng)關(guān)閉 端早一些。 既然每個(gè)方向都需要一個(gè) FIN 和一個(gè) ACK ,因此通常需要 4 個(gè)分節(jié)。我們使用限定詞“通 ?!笔且?yàn)椋耗承┣樾蜗虏襟E 1 FIN 隨數(shù)據(jù)一起發(fā)送 ; 另外,步驟 2 和步驟 3 發(fā)送的分節(jié) 都出自執(zhí)行被動(dòng)關(guān)閉那- 一端,有可能被合并成一個(gè)分節(jié)。
為什么 TCP 的揮手需要四次?
TCP 是全雙工的連接,必須兩端同時(shí)關(guān)閉連接,連接才算真正關(guān)閉。 如果一方已經(jīng)準(zhǔn)備關(guān)閉寫(xiě),但是它還可以讀另一方發(fā)送的數(shù)據(jù)。發(fā)送給 FIN 結(jié)束報(bào)文給 對(duì)方,對(duì)方收到后,回復(fù) ACK 報(bào)文。當(dāng)這方也已經(jīng)寫(xiě)完了準(zhǔn)備關(guān)閉,發(fā)送 FIN 報(bào)文,對(duì)方回 復(fù) ACK 。兩端都關(guān)閉, TCP 連接正常關(guān)閉
為什么需要 TIME-WAIT 狀態(tài)?
TIME_WAIT 狀態(tài)存在的原因有兩點(diǎn)
1 、可靠的終止 TCP 連接。
2 、保證讓遲來(lái)的 TCP 報(bào)文有足夠的時(shí)間被識(shí)別并丟棄。 根據(jù)前面的四次握手的描述,我們知道,客戶端收到服務(wù)器的連接釋放的 FIN 報(bào)文后, 必須發(fā)出確認(rèn)。如最后這個(gè) ACK 確認(rèn)報(bào)文丟失,那么服務(wù)器沒(méi)有收到這個(gè) ACK 確認(rèn)報(bào)文, 就要重發(fā) FIN 連接釋放報(bào)文,客戶端要在某個(gè)狀態(tài)等待這個(gè) FIN 連接釋放報(bào)文段然后回復(fù)確 認(rèn)報(bào)文段,這樣才能可靠的終止 TCP 連接。 在 Linux 系統(tǒng)上,一個(gè) TCP 端口不能被同時(shí)打開(kāi)多次,當(dāng)一個(gè) TCP 連接處于 TIME_WAIT 狀態(tài)時(shí),我們無(wú)法使用該鏈接的端口來(lái)建立一個(gè)新連接。反過(guò)來(lái)思考,如果不存在 TIME_WAIT狀態(tài),則應(yīng)用程序能過(guò)立即建立一個(gè)和剛關(guān)閉的連接相似的連接(這里的相似,是指他們具 有相同的 IP 地址和端口號(hào))。這個(gè)新的、和原來(lái)相似的連接被稱為原來(lái)連接的化身。新的 化身可能受到屬于原來(lái)連接攜帶應(yīng)用程序數(shù)據(jù)的 TCP 報(bào)文段(遲到的報(bào)文段),這顯然是不 該發(fā)生的。這是 TIME_WAIT 狀態(tài)存在的第二個(gè)原因。
UDP UDT 、 QUIC
UDP 概述
我們已經(jīng)知道 UDP User Datagram Protocol 的簡(jiǎn)稱, 中文名是用戶數(shù)據(jù)報(bào) 協(xié)議)是把數(shù)據(jù)直接發(fā)出去,而不管對(duì)方是不是在接收,也不管對(duì)方是否能接收的了,也不需要接收方確認(rèn),屬于不靠的傳輸,可能會(huì)出現(xiàn)丟包現(xiàn)象,實(shí)際應(yīng) 用中要求程序員編程驗(yàn)證。
UDP 單播和廣播
單播的傳輸模式,定義為發(fā)送消息給一個(gè)由唯一的地址所標(biāo)識(shí)的單一的網(wǎng)絡(luò) 目的地。面向連接的協(xié)議和無(wú)連接協(xié)議都支持這種模式。 由于通訊不需要連接,所以可以實(shí)現(xiàn)廣播發(fā)送,所謂廣播——傳輸?shù)骄W(wǎng)絡(luò)(或 者子網(wǎng))上的所有主機(jī)。 UDP 因?yàn)闆](méi)有 TCP 等一系列復(fù)雜機(jī)制,所以使用也非常廣泛,使用 UDP 的 服務(wù)包括 NTP (網(wǎng)絡(luò)時(shí)間協(xié)議)和 DNS DNS 也使用 TCP ),包總量較少的通信 (DNS 、 SNMP 等); 2. 視頻、音頻等多媒體通信(即時(shí)通信); 3. 限定于 LAN 等 特定網(wǎng)絡(luò)中的應(yīng)用通信;4.DHCP 等協(xié)議就利用了 UDP 的廣播功能。 常用的 QQ ,就是一個(gè)以 UDP 為主, TCP 為輔的通訊協(xié)議
UDT
基于 UDP 的數(shù)據(jù)傳輸協(xié)議( UDP-based Data Transfer Protocol ,簡(jiǎn)稱 UDT ) 是一種互聯(lián)網(wǎng)數(shù)據(jù)傳輸協(xié)議。UDT 的主要目的是支持高速?gòu)V域網(wǎng)上的海量數(shù)據(jù)傳 輸,最典型的例子就是建立在光纖廣域網(wǎng)上的網(wǎng)格計(jì)算,一些研究所在這樣的網(wǎng) 絡(luò)上運(yùn)行他們的分布式的數(shù)據(jù)密集程式,例如,遠(yuǎn)程訪問(wèn)儀器、分布式數(shù)據(jù)挖掘 和高分辨率的多媒體流。 而互聯(lián)網(wǎng)上的標(biāo)準(zhǔn)數(shù)據(jù)傳輸協(xié)議 TCP 在高帶寬長(zhǎng)距離網(wǎng)絡(luò)上性能很差。 顧 名思義,UDT 建于 UDP 之上,并引入新的擁塞控制和數(shù)據(jù)可靠性控制機(jī)制。 UDT 是面向連接的雙向的應(yīng)用層協(xié)議。
UDT 的特性主要包括在以下幾個(gè)方面:
基于 UDP 的應(yīng)用層協(xié)議:有基本網(wǎng)絡(luò)知識(shí)的朋友都知道 TCP UDP 的區(qū)別 和使用場(chǎng)景,但是有沒(méi)有一種協(xié)議能同時(shí)兼顧 TCP 協(xié)議的安全可靠和 UDP 協(xié)議 的高效,那么 UDT 就是一種。 面向連接的協(xié)議:面向連接意味著兩個(gè)使用協(xié)議的應(yīng)用在彼此交換數(shù)據(jù)之前 必須先建立一個(gè)連接,當(dāng)然 UDT 是邏輯上存在的連接通道。這種連接的維護(hù)是 基于握手、Keep-alive (?;睿┮约瓣P(guān)閉連接。 可靠的協(xié)議:依靠包序號(hào)機(jī)制、接收者的 ACK 響應(yīng)和丟包報(bào)告、 ACK 序號(hào)機(jī) 制、重傳機(jī)制( 基于丟包報(bào)告和超時(shí)處理 ) 來(lái)實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)目煽啃浴?雙工的協(xié)議:每個(gè) UDT 實(shí)例包含發(fā)送端和接收端的信息。 新的擁塞算法,并且具有可擴(kuò)展的擁塞控制框架:新的擁塞控制算法不同于 基于窗口的 TCP 擁塞控制算法 ( 慢啟動(dòng)和擁塞避免 ) ,是混合的基于窗口的、基于 速率的擁塞控制法。可擴(kuò)展的擁塞控制框架開(kāi)源的代碼和擁塞控制的 C++ 類架 構(gòu),可支持開(kāi)發(fā)者派生專用的擁塞控制算法。
帶寬估計(jì):UDT 使用對(duì)包 (PP -- Packet pair) 的機(jī)制來(lái)估計(jì)帶寬值。即每 16 個(gè) 包為一組, 最后一個(gè)是對(duì)包 , 即發(fā)送方不用等到下一個(gè)發(fā)送周期內(nèi)再發(fā)送。接收方 接收到對(duì)包后對(duì)其到達(dá)時(shí)間行記錄 , 可結(jié)合上次記錄的值計(jì)算出鏈路的帶寬 ( 計(jì) 算的方法稱為中值過(guò)濾法), 并在下次 ACK 中進(jìn)行反饋。
QUIC
QUIC 代表”快速 UDP Internet 連接”,基于 UDP 的傳輸層協(xié)議,它本身就 是 Google 嘗試將 TCP 協(xié)議重寫(xiě)為一種結(jié)合了 HTTP/2 、 TCP UDP TLS (用于加 密)等多種技術(shù)的改進(jìn)技術(shù)。 谷歌希望 QUIC 通信技術(shù)逐漸取代 TCP UDP ,作為在 Internet 上移動(dòng)二進(jìn) 制數(shù)據(jù)的新選擇協(xié)議,QUIC 協(xié)議的主要目的,是為了整合 TCP 協(xié)議的可靠性 和 UDP 協(xié)議的速度和效率。 由于 TCP 是在操作系統(tǒng)內(nèi)核和中間件固件中實(shí)現(xiàn)的,因此對(duì) TCP 進(jìn)行重大 更改幾乎是不可能的(TCP 協(xié)議棧通常由操作系統(tǒng)實(shí)現(xiàn),如 Linux Windows 內(nèi) 核或者其他移動(dòng)設(shè)備操作系統(tǒng)。修改 TCP 協(xié)議是一項(xiàng)浩大的工程,因?yàn)槊糠N設(shè) 備、系統(tǒng)的實(shí)現(xiàn)都需要更新)。但是,由于 QUIC 建立在 UDP 之上,因此沒(méi)有 這種限制。
QUIC 的優(yōu)勢(shì)在于:
1 、采用多路復(fù)用 思想,一個(gè)連接可以同時(shí)承載多個(gè) 流 ( stream ) ,同時(shí)發(fā) 起多個(gè)請(qǐng)求。 請(qǐng)求間完全 獨(dú)立 ,某個(gè)請(qǐng)求阻塞甚至報(bào)文出錯(cuò)均不影響其他請(qǐng) 求。
2 、 QUIC 只需要 1RTT Round-Trip Time )的延遲就可以建立可靠安全的連接 , 相對(duì)于 TCP+TLS 3 RTT 要更加快捷。之后客戶端可以在本地緩存加密的認(rèn)證 信息,再次與服務(wù)器建立連接時(shí)可以實(shí)現(xiàn) 0-RTT 的連接建立延遲。
3 、 TCP 采用 重傳 機(jī)制,而 QUIC 采用 糾錯(cuò) 機(jī)制。 TCP 發(fā)生丟包時(shí),需要一個(gè)等待延時(shí)判斷發(fā)生了丟包,然后再啟動(dòng)重傳機(jī)制, 這個(gè)過(guò)程會(huì)造成一定的阻塞,影響傳輸時(shí)間。 而 QUIC 則采用一種更主動(dòng)的方案,有點(diǎn)類似 RAID5 ,每 n 個(gè)包額外發(fā) 一個(gè) 校驗(yàn)和包 。 如果這 n 個(gè)包中丟了一個(gè)包,可以通過(guò)其他包和校驗(yàn)和恢復(fù) 出來(lái),完全不需要重傳。
4 、 QUIC 直接基于客戶端 ( 應(yīng)用進(jìn)程 ) 實(shí)現(xiàn),而非基于內(nèi)核,可以快速迭代更 新,不需要操作系統(tǒng)層面的改造,部署靈活。
5 、連接保持
QUIC 在客戶端保存連接標(biāo)識(shí),當(dāng)客戶端 IP 或者端口發(fā)生變化時(shí),可以快 速恢復(fù)連接 —— 客戶端以標(biāo)識(shí)請(qǐng)求服務(wù)端,服務(wù)端驗(yàn)證標(biāo)識(shí)后感知客戶端新地 址端口并重新關(guān)聯(lián),繼續(xù)通訊。 這對(duì)于改善移動(dòng)端應(yīng)用連接體驗(yàn)意義重大( 從 WiFi 切換到流量 )

到了這里,關(guān)于深入理解網(wǎng)絡(luò)通信和TCP、IP協(xié)議-01的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 網(wǎng)絡(luò)通信深入解析:探索TCP/IP模型

    網(wǎng)絡(luò)通信深入解析:探索TCP/IP模型

    ? ? ? ? 你知道在我們的網(wǎng)頁(yè)瀏覽器的地址當(dāng)中輸入url,未必是如何呈現(xiàn)的嗎? ? ? ? ? web瀏覽器根據(jù)地址欄中指定的url,從web服務(wù)器獲取文件資源(resource)等信息,從而顯示出web頁(yè)面。web使用HTTP(超文本傳輸協(xié)議)的協(xié)議作為規(guī)范,完成從客戶端從服務(wù)器端等一系列的運(yùn)

    2024年02月07日
    瀏覽(25)
  • 【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)通信基礎(chǔ)——簡(jiǎn)述TCP/IP協(xié)議

    【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)通信基礎(chǔ)——簡(jiǎn)述TCP/IP協(xié)議

    個(gè)人主頁(yè):兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【網(wǎng)絡(luò)編程】【Java系列】 本專欄旨在分享學(xué)習(xí)網(wǎng)絡(luò)編程的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評(píng)論區(qū)交流討論?? ip地址簡(jiǎn)單來(lái)說(shuō)就是用來(lái)描述網(wǎng)絡(luò)上一個(gè)設(shè)備的所在位置。 端

    2024年02月04日
    瀏覽(35)
  • 【計(jì)網(wǎng)】TCP協(xié)議安全與風(fēng)險(xiǎn):深入探討網(wǎng)絡(luò)通信的基石

    【計(jì)網(wǎng)】TCP協(xié)議安全與風(fēng)險(xiǎn):深入探討網(wǎng)絡(luò)通信的基石

    ?? ?? 個(gè)人博客: 個(gè)人主頁(yè) ?? 個(gè)人專欄: Linux ???? 功不唐捐,玉汝于成 目錄 ??前言 ??正文 TCP (Transmission Control Protocol): UDP (User Datagram Protocol): HTTP (Hypertext Transfer Protocol): HTTPS (Hypertext Transfer Protocol Secure): ??結(jié)語(yǔ) ?我的其他博客 TCP(傳輸控制協(xié)議)是計(jì)算機(jī)網(wǎng)絡(luò)中最

    2024年03月10日
    瀏覽(22)
  • 網(wǎng)絡(luò)編程day2——基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信

    ? ? ? ? 計(jì)算機(jī)S ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????計(jì)算機(jī)C ? ? ?創(chuàng)建socket對(duì)象 ? ? ? ? ? ? ? ? ????????????????? 創(chuàng)建socket對(duì)象 ? ? ?準(zhǔn)備通信地址(自己的ip(非公網(wǎng)ip))? ? ? 準(zhǔn)備通信地址 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (計(jì)算

    2024年02月10日
    瀏覽(40)
  • 深入探討網(wǎng)絡(luò)通信:ISO七層模型與TCP/IP模型

    深入探討網(wǎng)絡(luò)通信:ISO七層模型與TCP/IP模型

    在當(dāng)今數(shù)字化時(shí)代,網(wǎng)絡(luò)通信扮演著至關(guān)重要的角色,連接著世界各地的人們和設(shè)備。為了更好地理解網(wǎng)絡(luò)通信的運(yùn)作原理,讓我們深入探討ISO七層模型和TCP/IP模型,這兩個(gè)核心概念為整個(gè)網(wǎng)絡(luò)通信領(lǐng)域提供了關(guān)鍵的框架和指導(dǎo)。 ISO七層模型是一種標(biāo)準(zhǔn)化的網(wǎng)絡(luò)通信框架,旨

    2024年04月14日
    瀏覽(24)
  • C++網(wǎng)絡(luò)通信實(shí)例(TCP/IP協(xié)議,包括服務(wù)端與客戶端通信)

    C++網(wǎng)絡(luò)通信實(shí)例(TCP/IP協(xié)議,包括服務(wù)端與客戶端通信)

    創(chuàng)作不易 覺(jué)得有幫助請(qǐng)點(diǎn)贊關(guān)注收藏 TCP/IP是當(dāng)下網(wǎng)絡(luò)協(xié)議棧中的主流協(xié)議 TCP屬于傳輸層的協(xié)議? 可靠傳輸 包括經(jīng)典的三次握手等等 IP協(xié)議是網(wǎng)絡(luò)層協(xié)議 盡全力傳輸?shù)豢煽?學(xué)過(guò)計(jì)算機(jī)網(wǎng)絡(luò)的同學(xué)們對(duì)這個(gè)應(yīng)該比較熟悉 以下是使用C++進(jìn)行網(wǎng)絡(luò)通信的實(shí)例? 服務(wù)端 主要使用

    2024年02月14日
    瀏覽(20)
  • SCTP, TCP, UDP, IP, ICMP都在哪一層?(TCP/IP網(wǎng)絡(luò)通信協(xié)議學(xué)習(xí))

    SCTP, TCP, UDP, IP, ICMP都在哪一層?(TCP/IP網(wǎng)絡(luò)通信協(xié)議學(xué)習(xí))

    TCP/IP網(wǎng)絡(luò)通信協(xié)議最早是由 羅伯特·卡恩 (Robert E. Kahn)和 文頓·瑟夫 (Vinton G. Cerf)于1972年提出的,它是一個(gè)實(shí)際的協(xié)議棧。 OSI七層網(wǎng)絡(luò)通信協(xié)議最早是 由國(guó)際標(biāo)準(zhǔn)化組織 (ISO)于1977年提出的,它是一個(gè)理論模型。TCP/IP網(wǎng)絡(luò)通信協(xié)議由于其簡(jiǎn)單性和實(shí)用性,成為 事實(shí)上

    2024年01月22日
    瀏覽(171)
  • socket套接字通信 TCP傳輸控制協(xié)議/IP網(wǎng)絡(luò)協(xié)議 5.18

    socket套接字通信 TCP傳輸控制協(xié)議/IP網(wǎng)絡(luò)協(xié)議 5.18

    B/S :瀏覽器和服務(wù)器 C/S :客戶機(jī)和服務(wù)器 網(wǎng)絡(luò)的層次結(jié)構(gòu)和每層所使用協(xié)議的集合 網(wǎng)絡(luò)采用分層管理的方法,將網(wǎng)絡(luò)的功能劃分為不同的模塊 OSI模型: 共7種: 數(shù)據(jù)的封裝與傳遞過(guò)程: 網(wǎng)絡(luò)傳輸數(shù)據(jù)大小user data: 6~1460 網(wǎng)絡(luò)傳輸中容易發(fā)生拆包和粘包,所以接收和發(fā)送的字節(jié)

    2024年02月05日
    瀏覽(30)
  • Java網(wǎng)絡(luò)編程之IP,端口號(hào),通信協(xié)議(UDP,TCP)

    Java網(wǎng)絡(luò)編程之IP,端口號(hào),通信協(xié)議(UDP,TCP)

    ① C/S :客戶端/服務(wù)器 在用戶本地需要下載安裝客戶端程序,在遠(yuǎn)程有一個(gè)服務(wù)器端程序。 優(yōu)點(diǎn):畫(huà)面精美,用戶體驗(yàn)好 缺點(diǎn):用戶需要下載更新 ② B/S :瀏覽器/服務(wù)器 只需要一個(gè)瀏覽器,用戶通過(guò)指定網(wǎng)址訪問(wèn)對(duì)應(yīng)的服務(wù)器。 優(yōu)點(diǎn):不需要開(kāi)發(fā)客戶端,只需要頁(yè)面+服務(wù)

    2024年02月03日
    瀏覽(96)
  • 理解網(wǎng)絡(luò)通信的基礎(chǔ):OSI七層模型與TCP/IP五層模型

    在今天的數(shù)字化世界中,網(wǎng)絡(luò)通信已經(jīng)成為我們?nèi)粘I詈蜕虡I(yè)活動(dòng)的重要組成部分。為了更好地理解和管理網(wǎng)絡(luò)通信,網(wǎng)絡(luò)工程師和管理員使用不同的模型來(lái)組織和解釋網(wǎng)絡(luò)協(xié)議和通信過(guò)程。本文將介紹兩種最重要的網(wǎng)絡(luò)模型:OSI七層模型和TCP/IP五層模型。 OSI(開(kāi)放系統(tǒng)互

    2024年02月07日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包