重學TCP協議(1) TCP/IP 網絡分層以及TCP協議概述

1. TCP/IP 網絡分層

TCP/IP協議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構成互聯網基礎的網絡協議,是Internet的核心協議,通過20多年的發展已日漸成熟,并被廣泛應用于局域網和廣域網中,目前已成為事實上的國際標準。TCP/IP協議簇是一組不同層次上的多個協議的組合,通常被認為是一個四層協議系統,與OSI的七層模型相對應。

image.png
image.png
協議的分層從上往下依次是

  • Ethernet II:網絡接口層以太網幀頭部信息
  • Internet Protocol Version 4:互聯網層 IP 包頭部信息
  • Transmission Control Protocol:傳輸層的數據段頭部信息,此處是 TCP 協議
  • Hypertext Transfer Protocol:應用層 HTTP 的信息

image.png

1.1 應用層(Application Layer)

應用層負責處理特定的應用程序細節。

應用層的本質是規定了應用程序之間如何相互傳遞報文,很多應用層協議都是由 RFC 文檔定義,應用層協議有

  • 域名解析協議 DNS
  • 收發郵件 SMTP 和 POP3 協議
  • 時鐘同步協議 NTP
  • 網絡文件共享協議 NFS
    以HTTP為例
  • 報文的類型,是請求報文還是響應報文
  • 報文的語法,報文分為幾段,各段是什么含義、用什么分隔,每個部分的每個字段什么什么含義
  • 進程應該以什么樣的時序發送報文和處理響應報文

1.2 傳輸層(Transport Layer)

運輸層主要為兩臺主機上的應用程序提供端到端的通信。

傳輸層的作用是為兩臺主機之間的「應用進程」提供端到端的邏輯通信,相隔幾千公里的兩臺主機的進程就好像在直接通信一樣。
在 TCP / IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。

1.3 網絡互連層(Internet Layer)

處理分組在網絡中的活動,例如分組的選路。

網絡互連層提供了主機到主機的通信,將傳輸層產生的的數據包封裝成分組數據包發送到目標主機,并提供路由選擇的能力。

網絡互連層協議包括 IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(In ternet組管理協議)。

IP 協議是網絡層的主要協議,TCP 和 UDP 都是用 IP 協議作為網絡層協議。這一層的主要作用是給包加上源地址和目標地址,將數據包傳送到目標地址。

IP 協議是一個無連接的協議,也不具備重發機制,這也是 TCP 協議復雜的原因之一就是基于了這樣一個「不靠譜」的協議。

1.4 網絡訪問層(Network Access Layer)

通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細節。

網絡訪問層也有說法叫做網絡接口層,以太網、Wifi、藍牙工作在這一層,網絡訪問層提供了主機連接到物理網絡需要的硬件和相關的協議。

2. TCP協議概述

TCP 是一個可靠的(reliable)面向連接的(connection-oriented)基于字節流(byte-stream)全雙工的(full-duplex) 協議。

2.1 面向連接的(connection-oriented)

面向連接意味著兩個使用 TCP的應用(通常是一個客戶和一個服務器)在彼此交換數據
之前必須先建立一個 TCP連接
。這一過程與打電話很相似,先撥號振鈴,等待對方摘機說
“喂”,然后才說明是誰。

建立連接的過程是通過「三次握手」來完成的,顧名思義,通過三次數據交換建立一個連接。 通過三次握手協商好雙方后續通信的起始序列號、窗口縮放大小等信息。

2.2 可靠的(reliable)

IP 是一種無連接、不可靠的協議:它盡最大可能將數據報從發送者傳輸給接收者,但并不保證包到達的順序會與它們被傳輸的順序一致,也不保證包是否重復,甚至都不保證包是否會達到接收者。

TCP 的可靠性主要依靠

  • 應用數據被分割成TCP認為最適合發送的數據塊。這和 UDP完全不同,應用程序產生的數據報長度將保持不變。由 TCPTCP傳遞給I P的信息單位稱為報文段或段( segment)
  • 當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
  • 當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒
  • TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯, TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時并重發)。
  • 既然TCP報文段作為IP數據報來傳輸,而 IP數據報的到達可能會失序,因此 TCP報文段的到達也可能會失序。如果必要, TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
  • 既然IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。
  • TCP還能提供流量控制。 TCP連接的每一方都有固定大小的緩沖空間。 TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。

2.3 基于字節流(byte-stream)

TCP 是一種字節流(byte-stream)協議,流的含義是沒有固定的報文邊界。每次TCP報文發送的字節數都不是固定的,取決于路徑最大傳輸單元 MTU、發送窗口大小、擁塞窗口大小。

兩個應用程序通過T C P連接交換8 bit字節構成的字節流。T C P不在字節流中插入記錄標識
符。我們將這稱為字節流服務( byte stream service)。如果一方的應用程序先傳 1 0字節,又傳
2 0字節,再傳5 0字節,連接的另一方將無法了解發方每次發送了多少字節。收方可以分 4次接
收這8 0個字節,每次接收 2 0字節。一端將字節流放到 T C P連接上,同樣的字節流將出現在
T C P連接的另一端。

2.4 全雙工的(full-duplex)

在 TCP 中發送端和接收端可以是客戶端/服務端,也可以是服務器/客戶端,通信的雙方在任意時刻既可以是接收數據也可以是發送數據,每個方向的數據流都獨立管理序列號、滑動窗口大小、MSS 等信息。

參考資料

《深入理解 TCP 協議:從原理到實戰》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391338.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391338.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391338.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分節符縮寫p_p值的縮寫是什么?

分節符縮寫pp是概率嗎? (Is p for probability?) Technically, p-value stands for probability value, but since all of statistics is all about dealing with probabilistic decision-making, that’s probably the least useful name we could give it.從技術…

Spring-----AOP-----事務

xml文件中&#xff1a; 手動處理事務&#xff1a; 設置數據源 <bean id"dataSource" class"com.mchange.v2.c3p0.ComboPooledDataSource"> <property name"driverClass" value"com.mysql.jdbc.Driver"></property…

[測試題]打地鼠

Description 小明聽說打地鼠是一件很好玩的游戲&#xff0c;于是他也開始打地鼠。地鼠只有一只&#xff0c;而且一共有N個洞&#xff0c;編號為1到N排成一排&#xff0c;兩邊是墻壁&#xff0c;小明當然不可能百分百打到&#xff0c;因為他不知道地鼠在哪個洞。小明只能在白天打…

在PHP服務器上使用JavaScript進行緩慢的Loris攻擊[及其預防措施!]

Forget the post for a minute, lets begin with what this title is about! This is a web security-based article which will get into the basics about how HTTP works. Well also look at a simple attack which exploits the way the HTTP protocol works.暫時忘掉這個帖…

三星為什么要賣芯片?手機干不過華為小米,半導體好掙錢!

據外媒DigiTimes報道&#xff0c;三星有意向其他手機廠商出售自家的Exynos芯片以擴大市場份額。知情人士透露&#xff0c;三星出售自家芯片旨在提高硅晶圓工廠的利用率&#xff0c;同時提高它們在全球手機處理器市場的份額&#xff0c;尤其是中端市場。 三星為什么要賣芯片&…

重學TCP協議(2) TCP 報文首部

1. TCP 報文首部 1.1 源端口和目標端口 每個TCP段都包含源端和目的端的端口號&#xff0c;用于尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接 端口號分類 熟知端口號&#xff08;well-known port&#xff09;已登記的端口&am…

linux:vim中全選復制

全選&#xff08;高亮顯示&#xff09;&#xff1a;按esc后&#xff0c;然后ggvG或者ggVG 全部復制&#xff1a;按esc后&#xff0c;然后ggyG 全部刪除&#xff1a;按esc后&#xff0c;然后dG 解析&#xff1a; gg&#xff1a;是讓光標移到首行&#xff0c;在vim才有效&#xf…

機器學習 預測模型_使用機器學習模型預測心力衰竭的生存時間-第一部分

機器學習 預測模型數據科學 &#xff0c; 機器學習 (Data Science, Machine Learning) 前言 (Preface) Cardiovascular diseases are diseases of the heart and blood vessels and they typically include heart attacks, strokes, and heart failures [1]. According to the …

程序2:word count

本程序改變自&#xff1a;http://blog.csdn.net/zhixi1050/article/details/72718638 語言&#xff1a;C 編譯環境&#xff1a;visual studio 2015 運行環境&#xff1a;Win10 做出修改的地方&#xff1a;在原碼基礎上修改了記錄行數的功能&#xff0c;刪去了不完整行數的記錄&…

重學TCP協議(3) 端口號及MTU、MSS

1. 端口相關的命令 1.1 查看端口是否打開 使用 nc 和 telnet 這兩個命令可以非常方便的查看到對方端口是否打開或者網絡是否可達。如果對端端口沒有打開&#xff0c;使用 telnet 和 nc 命令會出現 “Connection refused” 錯誤 1.2 查看監聽端口的進程 使用 netstat sudo …

Diffie Hellman密鑰交換

In short, the Diffie Hellman is a widely used technique for securely sending a symmetric encryption key to another party. Before proceeding, let’s discuss why we’d want to use something like the Diffie Hellman in the first place. When transmitting data o…

高效能程序猿的修煉

下載地址&#xff1a;http://download.csdn.net/detail/xiaole0313/8931785 高效能程序猿的修煉 《高效能程序猿的修煉是人民郵電出版社出版的圖書。本書是coding horror博客中精華文章的集合。全書分為12章。涉及邁入職業門檻、高效能編程、應聘和招聘、團隊協作、高效工作環境…

Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean

Spring和Hibernate整合的時候我們經常會有如下的配置代碼 1&#xff0c;非JPA支持的配置 <!-- 配置 Hibernate 的 SessionFactory 實例: 通過 Spring 提供的 LocalSessionFactoryBean 進行配置 --> <!-- FacotryBean 配置的時候返回的不是本身而是返回的FactoryBean 的…

如何通過建造餐廳來了解Scala差異

I understand that type variance is not fundamental to writing Scala code. Its been more or less a year since Ive been using Scala for my day-to-day job, and honestly, Ive never had to worry much about it. 我了解類型差異并不是編寫Scala代碼的基礎。 自從我在日…

linux的/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow

1./etc/passwd 存儲用戶信息 [rootoldboy ~]# head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 一行記錄對應著一個用戶&#xff0c;每行記錄被冒號:分隔為7個字段&#xff0c;這7個字段的具體含…

組織在召喚:如何免費獲取一個js.org的二級域名

之前我是使用wangduanduan.github.io作為我的博客地址&#xff0c;后來覺得麻煩&#xff0c;有把博客關了。最近有想去折騰折騰。先看效果&#xff1a;wdd.js.org 如果你不了解js.org可以看看我的這篇文章:一個值得所有前端開發者關注的網站js.org 前提 已經有了github pages的…

linkedin爬蟲_您應該在LinkedIn上關注的8個人

linkedin爬蟲Finding great mentors are hard to come by these days. With so much information and so many opinions flooding the internet, finding an authority in a specific field can be quite tough.這些天很難找到優秀的導師。 互聯網上充斥著如此眾多的信息和眾多…

重學TCP協議(4) 三次握手

1. 三次握手 請求端&#xff08;通常稱為客戶&#xff09;發送一個 S Y N段指明客戶打算連接的服務器的端口&#xff0c;以及初始序號。這個S Y N段為報文段1。服務器發回包含服務器的初始序號的 S Y N報文段&#xff08;報文段2&#xff09;作為應答。同時&#xff0c;將確認序…

[設計模式]State模式

《Java與模式》 又稱狀態對象模式。狀態模式是對象的行為模式。GOF95 一個對象的行為取決于一個或者多個動態變化的屬性&#xff0c;這樣的屬性叫做狀態。這樣的對象叫做有狀態的對象&#xff08;stateful&#xff09;。 狀態模式把一個所研究的對象的行為包裝在不同的狀態對象…

java溫故筆記(二)java的數組HashMap、ConcurrentHashMap、ArrayList、LinkedList

為什么80%的碼農都做不了架構師&#xff1f;>>> HashMap 摘要 HashMap是Java程序員使用頻率最高的用于映射(鍵值對)處理的數據類型。隨著JDK&#xff08;Java Developmet Kit&#xff09;版本的更新&#xff0c;JDK1.8對HashMap底層的實現進行了優化&#xff0c;例…