摘要:協議地址解析協議,根據地址獲取地址。確認表示確認號字段有效,確認號無效。終止表示發送數據已發送完畢,要求釋放連接。
TCP/IP協議蔟分為4層結構,分別是應用層、傳輸層、網絡層和數據鏈路層,每一層都由特定的協議與對方進行通信,在進行數據通信時,發送端的數據從應用層往數據鏈路層方向流動,接收端的數據從數據鏈路層往應用層流動。
數據鏈路層數據鏈路層的主要工作是對電信號進行分組并形成具有特定意義的數據幀,然后以廣播的形式通過物流介質發送給接受方,數據鏈路層處理數據的協議是以太網協議,它將傳輸的數據分組封裝成數據幀,每個數據幀由首部、數據和尾部三部分組成,首部包含目標MAC地址、源MAC地址和類型,尾部為數據幀校驗序列,用于確定數據包在傳輸過程中是否損壞。數據傳輸采用廣播形式,把數據包發送給該子網內的所有主機,子網內每臺主機接收到這個包以后,都會讀取首部里的目標MAC地址,然后和自己的MAC地址進行比對,如果相同則進行下一步處理,如果不同,則丟棄這個包。
網絡層對于上面的過程,有幾個細節值得我們思考:
發送者如何知道接受者的MAC地址?
發送者如何知道接受者和自己同屬一個子網?
如果接受者和自己不在同一個子網,數據包如何發送給對方?
網絡層有如下幾個協議:
IP協議:MAC地址只與廠商有關,與所處的網絡無關,所以無法通過MAC地址來判斷兩臺主機是否屬于同一個子網,因此,網絡層引入IP協議,制定了一套新地址,用于區分兩臺主機是否同屬于一個網絡,這套地址就是網絡地址-IP地址。
ARP協議:地址解析協議,根據IP地址獲取MAC地址。ARP首先發起一個請求數據包,數據包的首部包含了目標主機的IP地址,數據包在鏈路層被封裝成數據幀并在子網內廣播,每一臺主機都會接受到這個數據包,并取出目標IP地址,并與自己的IP地址進行比較,如果相同就返回自己的MAC地址,ARP接收返回消息,以此確定目標機的MAC地址,與此同時,ARP還會將返回的MAC地址與對應的IP地址存入本機ARP緩存并保留一段時間。
路由協議:通過ARP協議的工作原理可以發現,ARP的MAC尋址還是局限在同一個子網中,因此網絡層引入路由協議,首先通過IP協議判斷兩臺主機是否在同一個子網中,如果在,通過ARP協議查詢對應的MAC地址,然后以廣播形式向該子網內的主機發送數據包,如果不在,以太網會將數據包轉發給本子網的網關進行路由,網關是子網與子網間的橋梁,經過網關的多次轉發,最終將數據包轉發到目標IP所在的子網,然后再通過ARP協議獲取MAC地址。完成這個路由協議的設備就是路由器。
在網絡層被包裝的數據包就叫IP數據包,IP數據包由首部和數據兩部分組成,首部包含目標IP地址和源IP地址,網絡層的主要工作是定義網絡地址,區分網段,子網內MAC尋址,對不同子網的數據進行路由。
傳輸層鏈路層定義了MAC地址,網絡層定義了IP地址,有了這兩個地址,數據就能從一個主機發送到另一個主機,但是數據實際上是從一個主機上的某個應用程序發出,當數據包被接收后,也無法確定哪個應用程序要接收這個數據包。
因此傳輸層引入UDP協議來解決這個問題,UDP定義了端口號,同一個主機的每一個應用程序都需要指定唯一的端口號,并且在傳輸數據時在數據上加上端口信息,UDP定義的數據包叫做UDP數據包。UDP數據包由首部和數據兩部分組成,首部包括源端口和目標端口。
UDP協議比較簡單,實現容易,但是沒有確認機制,可靠性較差,為了解決這個問題,TCP協議就被引入,TCP協議是一種面向連接的、可靠地、基于字節流的通信協議。TCP協議每發出一個數據包都要求確認,如果數據包丟失,收不到確認信息,發送發就必須重發這個數據包。
TCP協議TCP為了保證傳輸的可靠性,在正式收發數據前,必須和對方建立可靠的連接。由此才有TCP的三次握手機制。下面是TCP三次握手過程中使用到的幾個名詞:
序列號seq:是TCP報文段的第一個字節的數據編號,其中第一個TCP報文段的第一個字節編號由本地隨機產生。
確認號ack:期待收到對方下一個報文段的序列號,因此確認號為序列號+1。
確認ACK:ACK=1表示確認號字段有效,ACK=0確認號無效。
同步SYN:SYN這個標志在TCP建立連接時才會被置為1,握手完成被置為0。
終止FIN:FIN=1表示發送數據已發送完畢,要求釋放連接。
主機A向主機B請求建立TCP連接,其TCP的三次握手過程如下:
主機A向主機B發送TCP連接請求數據包,SYN=1,seq=x。
主機B向主機A發送連接確認數據包,SYN=1,ACK=1,seq=y,ack=x+1。
主機A向主機B發送再次確認數據包,ACK=1,seq=x+1,ack=y+1。
主機A主機B的TCP鏈接斷開,其TCP的四次揮手過程如下:
由于TCP連接時雙全工的(即數據可以在兩個方向上同時傳遞),所以進行關閉時每個方向都要多帶帶進行關閉,這個單方向的關閉就叫半關閉,當一方完成它的數據發送任務,就發送一個FIN來向另一方通告將要終止這個方向的連接。
A確認發送完數據后,想要關閉連接,發送FIN給B。
B收到A發送的FIN,發送ACK回復。
但這時B可能還在發送數據,所以沒有想要關閉連接的意思,所以FIN和ACK不是同時發送的,等B數據發送完畢后,才會發送ACK=1,FIN=1。
A收到B發來的FIN,回復ACK=1,A等待2MSL以后,沒有收到B傳來的任何消息,知道B已經收到自己的確認消息ACK,A就關閉鏈接。
在A發送最后的ACK回復時,該ACK可能丟失,B如果沒有收到ACK,將不斷重復發送FIN片段,所以A不能立即關閉,它必須確認B接收到該ACK并關閉后,在2MSL內沒有收到FIN,才會進行關閉。MSL指一個報文段在網絡中的最大存活時間。
傳輸層的主要工作內容是定義端口,標識應用程序身份,實現端口到端口的通信,TCP協議保證數據傳輸的可靠性。
應用層理論上來講,有了以上三層協議的支持,數據已經可以從一個主機的應用程序傳輸到另一臺主機的應用程序上了,但是傳輸過來的數據是字節流,不能被程序識別,因此應用層定義了各種各樣的協議來規范數據格式,常見的有http、ftp等。應用層的主要工作就是定義數據格式并按照對應的格式解讀數據。
TCP/IP協議蔟鏈路層:對數據進行分組,定義數據幀,確認主機的物理地址,傳輸數據。
網絡層:定義IP地址,確認主機所在的網絡位置,并通過IP進行MAC尋址,對外網數據包進行路由轉發。
傳輸層:定義端口號,確認主機上應用程序的身份,并將數據包交給對應的應用程序。
應用層:定義數據格式,并按照對應的格式解讀數據。
當輸入一個網址并按下回車鍵的時候,首先,應用層協議對該請求包做了格式定義,緊接著傳輸層協議加上了雙發的端口號,確認雙發通信的應用程序,然后網絡層的IP協議加上了雙方的IP地址,確認雙發的網絡位置,最后鏈路層協議加上雙發的MAC地址,確認雙發的物理位置,同時將數據進行分組,形成數據幀,采用廣播方式,通過傳輸介質發送給對方主機,而對于不同子網,該數據包首先會轉發給網關路由器,經過多次轉發后,最終被發送到目標主機,目標主機接收到數據包后,采用對應的協議,對幀數據進行組裝,然后一層一層的協議進行解析,最終被應用層的協議解析。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61938.html
摘要:如地址端口號組成了所謂的,是網絡上運行的程序之間雙向通信鏈路的終結點,是和的基礎套接字網絡上具有唯一標識的地址和端口組合在一起才能構成唯一能識別的標識符套接字。 更多物聯網高并發編程知識請移步:https://www.yuque.com/shizhiy... Java Socket編程之常識網絡基礎知識 網絡基礎知識(參考計算機網絡)? 《TCP/IP協議棧及OSI參考模型詳解》? ...
摘要:該狀態會持續最大段生存期,指報文段在網絡中生存的時間,超時會被拋棄時間,若該時間段內沒有的重發請求的話,就進入狀態。 引言 網絡協議是每個前端工程師都必須要掌握的知識,TCP/IP 中有兩個具有代表性的傳輸層協議,分別是 TCP 和 UDP,本文將介紹下這兩者以及它們之間的區別。 想閱讀更多優質文章請猛戳GitHub博客 一、TCP/IP網絡模型 計算機與網絡設備要相互通信,雙方就必須...
閱讀 1410·2021-11-25 09:43
閱讀 2268·2021-09-27 13:36
閱讀 1121·2021-09-04 16:40
閱讀 1962·2019-08-30 11:12
閱讀 3314·2019-08-29 14:14
閱讀 570·2019-08-28 17:56
閱讀 1328·2019-08-26 13:50
閱讀 1251·2019-08-26 13:29