主頁 > 軟體設計 > 計算機網路之運輸層

計算機網路之運輸層

2021-09-24 09:22:58 軟體設計

匯總:Android小白成長之路_知識體系匯總【持續更新中…】

目錄

  • 運輸層概述
  • 用戶資料報協議UDP
  • 傳輸控制協議TCP
  • 可靠傳輸原理
    • 停止等待協議
    • 連續ARQ協議
  • TCP報文段的首部格式
  • TCP的運輸連接管理

運輸層概述

  • 運輸層向上面的應用層提供通信服務,從運輸層的角度看,通信的端點是行程而不是主機

  • 運輸層的兩個主要協議:

    • TCP:傳輸控制協議,提供可靠的、面向連接的運輸服務
    • UDP:用戶資料報協議,提供高效的、無連接的運輸服務
  • 行程在運輸層通過復用傳送到網路層,網路層通過分用發送給各個應用行程

  • 軟體埠:應用層的各種協議行程與運輸物體進行層間互動的一種地址

  • 埠號:TCP/IP的運輸層用一個16位埠號來標識一個埠,埠號只有本地意義,是為了標志本計算機應用層中的各個行程和運輸層互動時的層間介面

  • 服務端使用的埠號:

    • 熟知埠號(系統埠號):數值為0~1023,一般用于TCP/IP最重要的一些應用程式,讓所有用戶都知道,常見的有以下這些

      應用程式FTPTELNETSMTPDNSTFTPHTTPSNMPSNMP(trap)HTTPS
      熟知埠號212325536980161162443
    • 登記埠號:數值為1024~49151,為沒有熟知埠號的應用程式使用,這類埠號必須在IANA按照規定的手續登記,以防重復

  • 客戶端使用的埠號:數值為49152~65535,由于這類埠號僅在客戶端行程運行時才動態選擇,因此又叫做短暫埠號

用戶資料報協議UDP

  • UDP只在IP的資料報服務上增加了很少的功能,例如復用、分用功能和差錯檢測功能

  • UDP的主要特點:

    • 無連接:發送資料前不需要建立連接,因此減少了開銷和發送資料之間的時延
    • 使用盡最大努力交付:不保證可靠交付,因此主機不需要維持復雜的連接狀態表
    • 面向報文:UDP對應用層交下來的報文,不合并也不拆分,而是保留報文的邊界,添加首部后就交付給IP層,UDP一次交付一個完整的報文,因此應用程式應該選擇合適長度的報文,使得IP層的效率達到最佳
    • 沒有擁塞控制:因此網路出現擁塞也不會使源主機的發送速率降低,但會造成資料丟失
    • 支持一對一、一對多、多對一和多對多的互動通信
    • UDP的首部開銷小
  • UDP的首部格式:UDP的首部欄位很簡單,只有8個位元組,由四個欄位組成
    在這里插入圖片描述

    • 源埠:源埠號,需要對方回復時選用,不需要時可全0
    • 目的埠:目的埠號,在終點交付報文時必須使用
    • 長度:UDP用戶資料報的長度,最小值為8,即只有首部
    • 檢驗和:檢測UDP用戶資料報在傳輸中是否有錯,錯則丟棄
    • 偽首部:用于計算校驗和,并不是真正的首部

傳輸控制協議TCP

  • TCP的主要特點:

    • 面向連接:使用TCP協議之前必須先建立連接,并且在使用結束后需要釋放已建立的連接
    • 點對點:每一條TCP連接只能有兩個端點,也就是只能一對一通信
    • 提供可靠交付服務:通過TCP連接傳送的資料,無差錯、不丟失、不重復,并且按序到底
    • 全雙工通信:TCP允許通信雙方在任何時候都能互相發送資料,TCP連接的兩端都設有發送快取和接收快取,用來臨時存放雙向通信的資料
    • 面向位元組流:TCP中的流指的是流入到行程或從行程流出的位元組序列在這里插入圖片描述
  • 套接字:每一條TCP連接都有兩個端點,這兩個端點就叫做套接字
    套 接 字 s o c k e t = ( I P 地 址 : 端 口 號 ) 套接字socket = (IP地址:埠號) socket=(IP:)

可靠傳輸原理

停止等待協議

在這里插入圖片描述

  • 停止等待:每發送完一個分組就停止發送,等待對方的確認,收到確認后再發送下一個分組

  • 超時重傳:在傳輸程序中出現差錯,B丟棄了報文,A在一段時間內沒收到確認,就重傳前面的分組

    • A在發送完一個分組后,必須暫時保留已發送的分組的副本,收到確認后才清除該副本
    • 分組和確認分組必須進行編號,以便于分組的收到確認
    • 超時計時器設定的重傳時間應當比資料在分組傳輸的平均往返時間更長一些
  • 確認丟失:假設B發送的確認丟失了,A沒收到確認,重傳了分組,B再次收到該分組,這時應采取兩個行動在這里插入圖片描述

    • 丟棄這個重復的分組
    • 向A發送確認,告知已收到分組
  • 確認遲到:傳輸程序沒差錯,但B對分組的確認遲到了,A重傳了分組后收到確認,然后再次收到確認,A收到后丟棄第二次確認,B收到重復的分組也丟棄,并重傳確認分組

  • 上述可靠傳輸協議常稱為自動重傳請求ARQ

連續ARQ協議

在這里插入圖片描述

  • 發送視窗:位于發送視窗內的分組可以連續發送出去,不需要等待對方確認,這樣就可以提高信道利用率,分組發送是按照分組序號從小到大發送的
  • 連續ARQ協議:發送方沒收到一個確認,就把發送視窗向前滑動一個分組的位置,接收方一般是累積確認的,不會對每一個收到的分組逐個確認,而是收到多個分組后,對最后一個分組發送確認,表示逐個分組為止的所有分組都已經正確收到
  • Go-back-N:如果發送了前5個分組,而后面3個分組丟失了,接收方只能對前2個分組發出確認,發送方無法知道后三個分組的下落,只能把后三個分組重傳一次,這就叫回退N,表示需要再退回來重傳已發送的N個分組

TCP報文段的首部格式

在這里插入圖片描述

  • 源埠和目的埠:分別寫入源埠號和目的埠號,用來實作分用功能
  • 序號:TCP面向位元組流,每一個位元組都按順序編號,超過最大序號時從0開始重新編號,序號欄位的值指的是本報文段所發送的資料的第一個位元組的序號,例如本次序號是101,而攜帶的資料共有100位元組,那么下一個報文段的序號就從201開始
  • 確認號:期望收到對方下一個報文段的第一個資料位元組的序號,也就是上面舉例子中下一個報文段的序號
  • 資料偏移:指出TCP報文段的資料起始處舉例TCP報文段的起始處有多遠,實際上就是首部長度
  • 保留:保留為今后使用,目前應置為0
  • 緊急URG:當值為1時,表明緊急指標有效,告訴系統該報文段有緊急資料,應盡快傳送,相當于高優先級資料,不按照原來的排隊順序來傳送,例如發送終端命令,需要盡快結束
  • 確認ACK:TCP規定,在建立連接后所有傳送的報文段都必須把ACK置為1
  • 推送PSH:接收方收到PSH=1的報文段,不再等到快取填滿后再向上交付,而是盡快地將資料交付到應用行程
  • 復位RST:當RST=1時,表明TCP連接中出現嚴重差錯,如主機崩潰或其他原因,必須釋放連接,然后再重新建立運輸連接
  • 同步SYN:用來同步序號,當SYN=1ACK=0時,表明這是一個連接請求報文段,對方若同意連接,則應在回應的報文段中使用SYN=1ACK=1,因此SYN置1表示這是一個連接請求或連接接受報文
  • 終止FIN:用來釋放一個連接,當FIN=1時,表明此報文段的發送方的資料已全部發送完畢,并要求釋放運輸連接
  • 視窗:指發送本報文段的一方的接收視窗值,而不是發送視窗,視窗值告訴對方,從本報文段首部中的確認號算起,接收方目前允許對方發送的資料量,之所以有這個限制,是因為接收方的資料快取空間有限,視窗值作為接收方讓發送方設定其發送視窗的依據
  • 檢驗和:檢驗和欄位檢驗的范圍包括首部和資料這兩部分,和UDP一樣,也要加上偽首部
  • 緊急指標:僅在URG=1時才有意義,指出本報文段中的緊急資料的位元組數,緊急資料之后是普通資料
  • 選項:長度可變,例如最大報文長度MSS(資料段的最大長度)、視窗擴大選項、時間戳選項、選擇確認選項等

TCP的運輸連接管理

  • TCP的連接三個階段:連接建立、資料傳送和連接釋放

  • 連接建立:三次握手程序,A需要知道B正常收發資料,B也需要知道A正常收發資料,所以需要三次握手

    在這里插入圖片描述

    • A向B發送連接請求報文段,此時SYN=1,并且選擇一個初始序號seq=x
    • B收到連接請求報文段后,向A發送確認,此時SYN=1,并且ACK=1,自己選擇一個初始序號為y,確認號為x+1
    • A收到B的確認后,也向B發送確認,此時ACK=1,初始序號為x+1,確認號為y+1,至此,連接建立
  • 連接釋放:四次揮手,雙方都需要知道對方已經發送完資料了才結束連接,因此需要互相確認結束

    在這里插入圖片描述

    • A發送終止控制,此時FIN=1,序號為前面已發送的資料最后一個位元組的序號加1,假設為u,A等待B確認
    • B收到釋放報文段后發出確認,確認號為u+1,序號為自己前面已發送的資料最后一個位元組的序號加1,假設為v,B開始進入等待,此時A到B這個方向的連接已釋放,TCP處于半關閉狀態,即A已經沒有資料要發送了,但B若發送資料,A仍要接收,A收到B的確認后,開始等待B發出連接釋放報文段
    • 若B沒有資料需要發送給A了,B發出FIN=1的報文段,假設B目前序號為w,B還必須重復上次已發送過的確認號ack=u+1,這時B開始等待A的確認
      即A已經沒有資料要發送了,但B若發送資料,A仍要接收,A收到B的確認后,開始等待B發出連接釋放報文段
    • 若B沒有資料需要發送給A了,B發出FIN=1的報文段,假設B目前序號為w,B還必須重復上次已發送過的確認號ack=u+1,這時B開始等待A的確認
    • A收到B的連接釋放報文段后,對B發出確認,把ACK置1確認號ack=w+1,而自己的序號是seq=u+1,然后進入到時間等待狀態,等待最后的釋放,B收到確認后也開始等待最后的釋放,這個釋放時間通過時間等待計時器來設定

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/302476.html

標籤:其他

上一篇:HTTP與TCP的關系

下一篇:2021 => 手把手教你NFS部署(實用)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more