欧美日韩国产一区二区三区不卡,欧洲一区二区三区精品,日韩一区不卡,成人国产二区

tcpip協(xié)議(通俗易懂網(wǎng)絡(luò)協(xié)議(TCP/IP概述))

時間:2024-10-19 16:18:53 閱讀:9

普通易懂網(wǎng)絡(luò)協(xié)議(TCP/IP概述)

近期事情,跟網(wǎng)絡(luò)協(xié)議干系,這讓我天然會更深開學(xué)習(xí)網(wǎng)絡(luò)協(xié)議,而之前很長一段時間,我對網(wǎng)絡(luò)協(xié)議的了解都停留在比力淺的層面。

好比:TCP是面向毗連的、可靠傳輸,而UDP好壞毗連的、不成靠傳輸,TCP建連必要3次握手,會形成delay,UDP更快。

好比:socket編程,辦事器socket create、bind、listen、accept、read/write、shutdown/close,客戶端socket create、connect、read/write、shutdown/close,再加上epoll/select這幾下子。

再好比:我曉得網(wǎng)絡(luò)編程要無視SIGPIPE信號不然會掛,read前往0代表對端主動關(guān)閉,非壅閉的read要放在循環(huán)里要思索前往值,多路復(fù)用以及壅閉、非壅閉的區(qū)別。

TCP/UDP的區(qū)別上,我是如此了解的:從北京到杭州,TCP相當(dāng)于修了一條高鐵線路(建連)再通車發(fā)貨(傳輸數(shù)據(jù)),而UDP相當(dāng)于寄快遞,丟了不管(直接傳輸數(shù)據(jù))。

外表的了解對不合錯誤?可以說對,也可以說不合錯誤。關(guān)于使用步驟員來說,有了外表的熟悉+熟習(xí)socket編程接口,夠了嗎?不夠嗎?

大物理學(xué)家費(fèi)曼提出一個高效的費(fèi)曼學(xué)習(xí)法,即從成績動手,試著把成績都講出來,以教代學(xué),一旦你能把成績都講清晰,便學(xué)會了。以是我想實(shí)驗(yàn)一下把TCP/IP講清晰,借此讓本人學(xué)明白,特地協(xié)助一下讀者。

固然《TCP/IP詳解卷1》是一本關(guān)于互聯(lián)網(wǎng)協(xié)議族很嚴(yán)謹(jǐn)細(xì)致的書,但在我看來,它略微有點(diǎn)難懂,約莫必要讀幾遍,才干心心相印。固然我沒有才能把這個成績說的更好,但由于我履歷過從稀里懵懂到稍有所悟的歷程,這約莫是大師不成比的,我將盡力用普通易懂的言語把TCP/IP干系的知識講清晰。

TCP/IP是什么

TCP/IP協(xié)議族是一組協(xié)議的聚集,也叫互聯(lián)網(wǎng)協(xié)議族用來完成互聯(lián)網(wǎng)上主機(jī)之間的互相通訊。TCP和IP只是此中的2個協(xié)議,也是很緊張的2個協(xié)議,以是用TCP/IP來定名這個互聯(lián)網(wǎng)協(xié)議族,實(shí)踐上,它還包含其他協(xié)議,好比UDP、ICMP、IGMP、ARP/RARP等。

網(wǎng)絡(luò)分層

大學(xué)《盤算機(jī)網(wǎng)絡(luò)》教科書上有經(jīng)典的網(wǎng)絡(luò)ISO七層模子,但七層區(qū)分太細(xì)了,稍顯繁瑣,不容易記取。

互聯(lián)網(wǎng)協(xié)議族TCP/IP按粗粒度的四層區(qū)分,兩種區(qū)分的比力圖讓互干系系一清二楚。



分層是盤算機(jī)范疇的常用本事,好比互聯(lián)網(wǎng)后端的三層架構(gòu)“接入-邏輯-存儲”就是分層頭腦的典范使用。

分層是為了斷絕,通太過層區(qū)分本能機(jī)能,拆解成績,層與層之間商定接口,屏蔽完成細(xì)節(jié)。

TCP/IP自下到上區(qū)分為鏈路層、網(wǎng)絡(luò)層、傳輸層、使用層。下屬向表層提供才能,表層使用下屬的才能提供更高的籠統(tǒng)

1. 鏈路層,也稱網(wǎng)絡(luò)接口層,包含利用體系的裝備驅(qū)動步驟和網(wǎng)卡,它們一同處理與傳輸前言(光纖等)的物理接口細(xì)節(jié)。

2. 網(wǎng)絡(luò)層,也就是IP層,賣力處理IP datagram在網(wǎng)絡(luò)中的傳輸,IP層傳輸?shù)氖荌P datagram,借助路由表,把IP datagram從網(wǎng)絡(luò)的一端傳輸?shù)搅硪欢耍喍灾?strong>IP完成包的路由傳輸,IP協(xié)媾和路由器事情在網(wǎng)絡(luò)層。

3. 傳輸層,提供端到端之間的通訊,包含提供面向毗連和高可靠性的TCP,以及無毗連不成靠的UDP。貌似TCP更好,但實(shí)踐不是如此,UDP由于不必要建連開支,以是更快,使用得也很廣,好比新一代互聯(lián)網(wǎng)協(xié)議HTTP3就從TCP轉(zhuǎn)向UDP,應(yīng)依據(jù)順應(yīng)場景選擇傳輸層協(xié)議。

4. 使用層,跟使用干系,不同使用處理不同成績,必要不同的使用層協(xié)議。



鏈路層處理數(shù)據(jù)在前言上的傳輸,以及主機(jī)與網(wǎng)卡、光纖等打交道的細(xì)節(jié)。由于與硬件干系,以是必要借助體系的驅(qū)動步驟,鏈路層協(xié)議就是界說這些細(xì)節(jié)的,好比怎樣把數(shù)據(jù)從網(wǎng)卡發(fā)送到光纖,接納什么格式編碼等,它處理的數(shù)據(jù)在前言上表現(xiàn)、活動的成績。

光有鏈路層功效一定是不夠的,網(wǎng)絡(luò)上有不計其數(shù)的機(jī)器,主機(jī)A與B通訊,你不克不及將數(shù)據(jù)發(fā)到主機(jī)C,以是模仿實(shí)際,要為主機(jī)分派網(wǎng)絡(luò)地點(diǎn),經(jīng)過IP地點(diǎn)去標(biāo)識網(wǎng)絡(luò)中的一臺主機(jī),發(fā)送一個數(shù)據(jù)包,必要準(zhǔn)確路由到目標(biāo)地,這就好比你從家到公司,要顛末哪些途徑,必要輿圖,而路由表就相似這張輿圖。IP處理的是數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸路由的成績。

有了網(wǎng)絡(luò)層的傳輸路由才能,還不夠,由于IP報在傳輸歷程中約莫丟包,好比正中履歷過的路由器緩沖區(qū)滿了便會丟包,如此不成靠,假如必要可靠傳輸的才能,便必要傳輸層基于IP層,提供更多的才能,TCP處理了可靠性成績。具體而言,假如丟包了,TCP層會賣力超時重傳,它經(jīng)過吸收確認(rèn)和重傳機(jī)制確保了可靠傳輸。別的,由于IP報都是獨(dú)立路由的,以是從主機(jī)A到主機(jī)B,一份數(shù)據(jù)被拆分紅x、y兩個IP報先后發(fā)送,這2個包約莫選擇不同的傳輸途徑,如此有約莫y包先于x包抵達(dá),但我們渴望在吸收端(主機(jī)B)規(guī)復(fù)這個數(shù)據(jù)的信息,但我們無法控制IP報的抵達(dá)排序,以是,我們必要在吸收端規(guī)復(fù)數(shù)據(jù),我只必要在x、y包里紀(jì)錄它屬于數(shù)據(jù)塊的哪個局部,然后重組這份數(shù)據(jù),這正是TCP做的,它會重新組裝IP報,從而確保排序性,遞交給使用層。

偶爾分并不必要確保可靠性溫和序性,這便是UDP能提供的,它只是簡便的把數(shù)據(jù)封裝成IP報,然后經(jīng)過IP層路由發(fā)送到目標(biāo)端。

再往上,便是使用層協(xié)議了,好比http,又好比游戲辦事器自界說協(xié)議,使用層協(xié)議通常基于TCP大概UDP做傳輸。

分層

什么是協(xié)議?懶得去翻協(xié)議的種種威望界說了,我以為協(xié)議就是商定,跟實(shí)際生存中協(xié)議這個詞涵義差不多。網(wǎng)絡(luò)協(xié)議就是通訊兩邊協(xié)同恪守的商定,更具體一點(diǎn),就是界說數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)母袷健⒍苏土鞒獭?/p>

由于網(wǎng)絡(luò)是分層模子,不同層有不同層的作用,以是為各層界說各層的端正,各層對應(yīng)的各層協(xié)議。

前方講了TCP/IP協(xié)議族包含很多協(xié)議,這些協(xié)議分屬不同的分層,承當(dāng)不同的作用。



  1. TCP和UDP是兩種主要的傳輸層協(xié)議。
  2. IP是網(wǎng)絡(luò)層的主要協(xié)議,TCP、UDP都必要使用IP協(xié)議舉行數(shù)據(jù)傳輸。
  3. ICMP是互聯(lián)網(wǎng)控制報文協(xié)議,是IP的從屬協(xié)議,IP層用它來與其他主機(jī)或路由器互換錯誤報文和其他緊張信息。好比一個Packet顛末某個路由器節(jié)點(diǎn)的時分,凌駕網(wǎng)絡(luò)對Packet的長度限定,而又不分片,則會給發(fā)送端發(fā)送一個ICMP包報告錯誤信息,屬于ICMP是用來幫助IP完成數(shù)據(jù)包傳輸?shù)摹?/li>
  4. IGMP是Internet組辦理協(xié)議,用來把一個包多播到多個主機(jī)。
  5. ARP(地點(diǎn)剖析協(xié)議)和RARP(逆地點(diǎn)剖析協(xié)議)是用來轉(zhuǎn)換IP層和鏈路層的地點(diǎn),IP層使用IP地點(diǎn),鏈路層使用Mac地點(diǎn)


使用層和傳輸層使用端到端(end-to-end)協(xié)議,網(wǎng)絡(luò)層提供的是逐跳(hop-by-hop)協(xié)議。

封裝

A給B經(jīng)過網(wǎng)絡(luò)傳送一塊數(shù)據(jù),可以假想僅僅是傳輸這塊原始數(shù)據(jù)是不夠的,由于網(wǎng)絡(luò)傳輸歷程中,網(wǎng)絡(luò)包到了某個路由器,必要轉(zhuǎn)發(fā),而轉(zhuǎn)發(fā)必需依托數(shù)據(jù)包的一些附加信息,好比目標(biāo)機(jī)器。

發(fā)送端在發(fā)送數(shù)據(jù)的時分,將原始數(shù)據(jù)依照協(xié)議格式加上一些控制信息,包裝成可在網(wǎng)絡(luò)上準(zhǔn)確傳輸數(shù)據(jù)包的歷程叫封裝。

TCP/IP協(xié)議族是層層封裝的,從使用層到鏈路層,每顛末一層都要添加一些分外信息(首、尾部)。



  1. 用戶數(shù)據(jù)顛末使用步驟加上使用步驟首部,轉(zhuǎn)給TCP層處理
  2. 顛末TCP層加上TCP首部,產(chǎn)生TCP段(segment)
  3. TCP segment顛末IP層再加上IP首部,產(chǎn)生IP數(shù)據(jù)包(datagram)
  4. IP datagram經(jīng)過鏈路層,經(jīng)以太網(wǎng)驅(qū)動步驟處理后,加上以太網(wǎng)首部+尾部,產(chǎn)生以太網(wǎng)幀(frame),以太網(wǎng)幀的長度在46~1500之間

改準(zhǔn)確的說,在IP和鏈路層傳輸?shù)臄?shù)據(jù)單位叫分組(Packet),分組既可以是一個IP datagram也可以是IP datagram的一個分片(fragment)。

UDP的封裝跟TCP略有不同,主要表如今顛末傳輸層(UDP)之后添加的是8字節(jié)UDP首部,產(chǎn)生UDP datagram。

封裝歷程中,顛末TCP/UDP層的時分,會把端標(biāo)語添加到TCP/UDP首部;顛末IP層的時分,會把協(xié)議典范(TCP or UDP or ICMP or IGMP)添加到IP首部;顛末鏈路層的時分,會把幀典范(IP or ARP or RARP)添加到以太網(wǎng)首部。這些信息將被用于吸收端的處理。

吸收端收到數(shù)據(jù)后,要實(shí)行跟發(fā)送端相反的解封利用,我們可以把發(fā)送端的數(shù)據(jù)封裝比如成沐浴后一層層穿衣服,而吸收端的利用,相似沐浴前一層層脫衣服,把首尾部剝離,獲取轉(zhuǎn)達(dá)的原始數(shù)據(jù)。

由于網(wǎng)絡(luò)上的主機(jī)有不同字節(jié)序,如今要經(jīng)過網(wǎng)絡(luò)傳輸,便必要商定一致的網(wǎng)絡(luò)字節(jié)序(大端序),接納小端序的主機(jī)在網(wǎng)絡(luò)傳輸數(shù)據(jù)的時分要轉(zhuǎn)為大端序。

地點(diǎn)

互聯(lián)網(wǎng)上每個接口都有一個唯一的網(wǎng)絡(luò)地點(diǎn),也叫IP地點(diǎn),IP地點(diǎn)有IPv4和IPv6兩個版本,IPv4是32位4字節(jié)的整數(shù),每個字節(jié)(8bit)的取值范圍是0~255,以是可以把4字節(jié)的IPv4用四個點(diǎn)分開的byte值表現(xiàn),好比140.252.13.88,每個十進(jìn)制數(shù)值對應(yīng)32位整數(shù)中的每個字節(jié),這種表現(xiàn)法叫點(diǎn)分十進(jìn)制表現(xiàn)法,很顯然,點(diǎn)分十進(jìn)制法和int32兩種表現(xiàn)法之間很容易互相轉(zhuǎn)換。

IPv4地點(diǎn)區(qū)分為ABCDE五類,32位地點(diǎn)表現(xiàn)的數(shù)值空間僅限,難以為互聯(lián)網(wǎng)上的一切聯(lián)網(wǎng)裝備分派獨(dú)立的IP地點(diǎn),以是便存在動態(tài)分派、共享、公網(wǎng)+內(nèi)網(wǎng)地點(diǎn)轉(zhuǎn)化(NAT)等成績,實(shí)質(zhì)上是為了處理IP地點(diǎn)不夠用的成績

IPv6使用128bit,2的128次方就十分大了,號稱可以為地球上每粒沙子分派一個ip地點(diǎn)。

IP數(shù)據(jù)報(網(wǎng)絡(luò)層)用IP地點(diǎn)、而以太網(wǎng)幀(鏈路層)則是用硬件(48位Mac)地點(diǎn),ARP和RARP用于IP地點(diǎn)和硬件地點(diǎn)之間做映射(轉(zhuǎn)換)。

端口

TCP/UDP接納16位端標(biāo)語來識別(區(qū)分)使用,好比主機(jī)A向主機(jī)B發(fā)送了一個IP報,主機(jī)B的內(nèi)核收到該IP報之后,應(yīng)該交給哪個使用步驟去向理呢?端標(biāo)語就是用來干這個的,內(nèi)核會維護(hù)端標(biāo)語到使用步驟之間的對應(yīng)干系。

比力常用的使用層協(xié)議有商定的端標(biāo)語,也就是著名端標(biāo)語,而1024~5000之間的端標(biāo)語是分派給TCP/IP暫且用的,而大于5000的另做他用。也就是說,你用TCP辦法去連網(wǎng)絡(luò)辦事器,當(dāng)?shù)貫樵搒ocket分派的端標(biāo)語會在1024~5000之間,這取決于利用體系的端口分派戰(zhàn)略。

域名體系

域名體系(DNS)提供主機(jī)名字和IP地點(diǎn)之間的轉(zhuǎn)換,好比www.baidu.com是一個域名,使用步驟可以經(jīng)過一個標(biāo)準(zhǔn)庫函數(shù)(gethostbyname)來取得給定名字主機(jī)的IP地點(diǎn),標(biāo)準(zhǔn)庫函數(shù)(gethostbyaddr)完成逆利用。

ip地點(diǎn)是一串?dāng)?shù)字,涵義不清、也不便利于影象,主機(jī)名涵義更明晰,www.baidu.com你就很容易記取,這也是為什么存在IP地點(diǎn)還必要主機(jī)名的緣故。

分用

吸收端吸收到以太網(wǎng)數(shù)據(jù)幀(Frame)之后,必要像剝洋蔥一樣,從協(xié)議棧由底向上升,即依照鏈路層->網(wǎng)絡(luò)層->傳輸層->使用層的排序,去掉各層協(xié)議添加的首尾部,將數(shù)據(jù)取出,交給最表層使用步驟,這個歷程叫Demultiplexing,尊從冊本的翻譯叫分用




回憶前方封裝的形貌,在傳輸層、網(wǎng)絡(luò)層、鏈路層,分散將端標(biāo)語存入TCP/IP首部,將協(xié)議典范存入IP首部,將幀典范存入以太網(wǎng)幀首部。以是在吸收端,將一層層拆掉首部,取出對應(yīng)信息,然后做分派,丟給不同模塊處理,上圖就是整個處理歷程。

小結(jié)

本文講了地點(diǎn)、域名、端口、TCP/IP分層模子、封裝、分用等看法。

你最好能記取TCP/IP鏈路層->網(wǎng)絡(luò)層->傳輸層->使用層的四層區(qū)分。

TCP segment、UDP datagram、IP datagram、IP fragment、以太網(wǎng)frame、以及IP層和鏈路層之間傳輸?shù)臄?shù)據(jù)單位packet,這些看法你最好分清晰,如此扳談的時分會顯得比力專業(yè)而不是很土。

數(shù)據(jù)封裝,多看幾遍你便能記取了。

TCP封裝格式:以太網(wǎng)首部(14)+IP首部(20)+TCP首部(20)+使用數(shù)據(jù)+以太網(wǎng)尾部(4)

UDP封裝格式:以太網(wǎng)首部(14)+IP首部(20)+UDP首部(8)+使用數(shù)據(jù)+以太網(wǎng)尾部(4)

使用層協(xié)議在使用層完成,而傳輸層、網(wǎng)絡(luò)層、鏈路層都是在內(nèi)核完成,以是想修正大概優(yōu)化底層協(xié)議很難,由于你幾乎動不了內(nèi)核,由于網(wǎng)絡(luò)上的多量裝備OS你沒法一并改正來,這就是所謂的網(wǎng)絡(luò)裝備僵化成績,HTTP3用UDP交換TCP,就是想在使用層本人去完成可靠傳輸?shù)取?/p>

每個以太網(wǎng)幀有長度限定(48~1500),網(wǎng)絡(luò)上每個裝備也有對包的長度限定,IP報大了就要分片,分片約莫產(chǎn)生在發(fā)送端,也有約莫產(chǎn)生在正中裝備,但應(yīng)該盡力制止分片,IP報會帶有信息讓分片后可以重組,MTU的看法可以了解一下。

ICMP和IGMP邏輯上屬于網(wǎng)絡(luò)層,由于他們是IP協(xié)議的從屬協(xié)議,但實(shí)踐上,ICMP和IGMP報文都被封裝為IP datagram傳輸,以是又可以把他們視為IP層之上的協(xié)議。

相反ARP和RARP用于IP地點(diǎn)和硬件MAC地點(diǎn)互相轉(zhuǎn)換,邏輯上屬于鏈路層,但實(shí)踐上arp和rarp報文跟IP datagram一樣,都被封裝成以太網(wǎng)Frame傳輸

吸收端收到以太網(wǎng)幀之后,會走分用流程,終極將原始數(shù)據(jù)交給使用步驟。

TCP/IP協(xié)議的使用步驟常常使用socket編程接口。

有很多跟網(wǎng)絡(luò)干系的東西,好比ping、ifconfig、netstat、arp、tcpdump、wireshark等。

成績

一年前,我對網(wǎng)絡(luò)編程這塊,頭腦里充溢疑問。

眾所周知,TCP建連三次握手和斷連四次握手,但如前所述,任何時分,從主機(jī)A都可以隨意發(fā)一個IP報到主機(jī)B,網(wǎng)絡(luò)主機(jī)之間是經(jīng)過IP層完成路由轉(zhuǎn)發(fā)的,兩點(diǎn)之間的每個IP報都是獨(dú)立路由的,既然如此,為什么還要建連?還要糜費(fèi)時間做A->B、B->A、A->B往返?直接把包發(fā)已往不就完了嗎?

假定經(jīng)過AB創(chuàng)建的3個IP報的作用是表現(xiàn)AB之間的網(wǎng)絡(luò)連通性?哪又有什么作用?由于網(wǎng)絡(luò)是隨時厘革的,如今連通又不代表下一刻連通。建連之后仿佛并不存在AB之間的真正毗連,只是兩頭OS層面維護(hù)的一個形態(tài)(數(shù)據(jù)目標(biāo))?是假造毗連?

建連畢竟是什么意思?客戶端發(fā)送一個IP報到辦事器去倡導(dǎo)毗連?那跟傳輸數(shù)據(jù)的平凡IP報又有什么區(qū)別?

雙工是什么意思?為什么socket關(guān)閉一半傳輸之后就不克不及發(fā)送數(shù)據(jù)了?網(wǎng)絡(luò)上IP報不是可以隨意傳輸嗎?這個限定是哪個場合添加的?

擁塞控制是什么?Nagle是什么?滑動窗口是什么?TCP為什么要保活?

socekt的編程接口和種種看法跟TCP/IP原理有怎樣的對應(yīng)干系?學(xué)完TCP/IP原理對了解socket編程有什么協(xié)助?

沒有窮究TCP/IP原理之前,我但是是有很多成績的,只是做使用步驟開發(fā),仿佛沒搞懂那些成績也還可以將就干,但畢竟是有點(diǎn)糊里懵懂,以為不太爽。

原本我想一篇文章講清晰TCP/IP的主要內(nèi)容,但是寫著寫著發(fā)覺,如此文章會十分長,以是我決定多寫幾篇,每篇都講清晰一個主題。

后續(xù)方案

  1. 協(xié)議格式
  2. TCP、UDP的區(qū)別,建連、擁塞控制,面向毗連和可靠傳輸畢竟是什么涵義?基于UDP編程怎樣完成可靠傳輸?
  3. 編程接口:socket TCP/UDP編程
  4. 互聯(lián)網(wǎng)使用層協(xié)議:http、http2、http3(quic)

版權(quán)聲明:本文來自互聯(lián)網(wǎng)整理發(fā)布,如有侵權(quán),聯(lián)系刪除

原文鏈接:http://www.freetextsend.comhttp://www.freetextsend.com/wangluozixun/53613.html


Copyright ? 2021-2022 All Rights Reserved 備案編號:閩ICP備2023009674號 網(wǎng)站地圖 聯(lián)系:dhh0407@outlook.com

主站蜘蛛池模板: 阿图什市| 余干县| 偃师市| 南昌市| 韩城市| 施甸县| 盘锦市| 娄底市| 闸北区| 横峰县| 南通市| 余干县| 崇文区| 富阳市| 沙湾县| 张家口市| 霍山县| 张家口市| 临安市| 邻水| 井冈山市| 伊宁市| SHOW| 临桂县| 楚雄市| 南丹县| 北票市| 永清县| 凉城县| 班玛县| 车致| 吉首市| 怀安县| 满城县| 定西市| 泸西县| 娱乐| 酉阳| 丹巴县| 大方县| 三江|