TCP傳輸層詳解(計算機網絡復習)

介紹:TCP/IP包含了一系列的協議,也叫TCP/IP協議族,簡稱TCP/IP。該協議族提供了點對點的連接機制,并將傳輸數據幀的封裝、尋址、傳輸、路由以及接收方式都予以標準化

TCP/IP的分層模型

在講TCP/IP協議之前,首先介紹一下七層ISO模型:

七層框架通信協議
應用層

http、smtp、snmp、ftp、telent、sip、ssh、nfs等

表示層xdr、asn.1、smb、afp、ncp等
會話層ASAP、ssh、rpc、netbios、asp、winsock、bsd socket等
傳輸層tcp、udp、tls、rtp、sctp、spx、atp、IL等
網絡層ip、icmp、igmp、ipx、bgp、ospe、rip等
數據鏈路層以太網、HDLC、令牌環、幀中繼、ISDN等
物理層銅纜、網纜、光纜、無線電等

TCP/IP協議是互聯網最基本的協議,在一定程度上參考了七層ISO模型,有些復雜,所以在TCP/IP協議中的七層被簡化為四個層次。

1、TCP\IP協議的應用層

應用層包含所有和應用程序協同工作并利用基礎網絡交換應用程序的業務數據的協議。一些特定的程序被認為運行在這個層上,該層協議所提供的服務能直接支持用戶應用。應用層協議包含HTTP(萬維網服務)、ftp(文件傳輸)、smtp(電子郵箱)、ssh(安全遠程登錄)、dns(域名解析)等諸多協議。

2、TCP/IP協議的傳輸層

(1)傳輸層的協議解決了端與端連接提供傳輸服務。

(2)這種傳輸服務分為可靠和不可靠的,其中TCP就是可靠傳輸、udp是不可靠傳輸。

(3)為端與端連接提供流量控制、差錯控制、服務質量等管理服務。

傳輸層主要有兩個性質不同的協議:tcp(控制傳輸協議)和UDP(用戶數據協議)。

TCP那邊有一個接受數據的緩存區,通過這個緩存可以解決以下兩個問題:

  1. 流量控制:接收端可以通過控制緩存區的大小來控制發送端的發送速率,從而避免發送端發送過快導致接收端無法處理的情況。
  2. 確認機制:接收端可以將已經接收到的數據存放在緩存區中,等待后續的數據到達,當接收到后續的數據時,可以通過確認機制通知發送端已經接收到了哪些數據,從而保證數據的可靠傳輸。

而UDP是一個無連接的數據報協議,它沒有緩存區,實現不了TCP上面的功能,UDP的主要目的是盡力傳遞,其不需要搞這些復雜的操作,所以其傳輸效率是最高的。

3、TCP/IP協議的網絡層

TCP/IP協議網絡層的作用是在復雜的網絡環境中為要發送的數據報找到一個合適的路徑進行傳輸。簡單來說,網絡層負責將數據傳輸到目的地址,目的地址可以是多個網絡通過路由器連接而成的某一地址。路由轉發應該也是由該層完成。網絡協議的代表包括ICMP、IP、IGMP等。

4、TCP/IP協議的鏈路層

鏈路層有時也被稱為數據鏈路層或網絡接口層,用來處理連接網絡的硬件部分。該層既包括操作系統硬件的設備驅動、NIC(網卡)、光纖等物理可見部分,也包括連接器等一切傳輸媒介。在這一層中,數據的傳輸單位為bit(比特)。其主要協議有ARP、RARP等。

HTTP報文傳輸原理

利用TCP/IP進行網絡通信時,數據包會按照分層順序與對方進行通信。發送端從應用層往下走,接收端從鏈路層往上走。從客戶端到服務端的數據,每一幀的傳輸順序都為應用層->傳輸層->網絡層->鏈路層->鏈路層->網絡層->傳輸層->應用層。

接下來為大家介紹一下數據封裝和分用。

數據通過互聯網傳輸時不可能是光禿禿的不加標識(數據會亂),所以在發送數據時需要加上特定的標識(數據封裝),在使用數據時候在去掉特定標識(數據分用)。

1、TCP報文格式

源端口號:

(1)源端口號表示報文的發送端口,占16位。源端口號和源ip地址組合起來,可以標識報文的發送地址。

(2)目的端口號表示報文的接收端口,占16位。目的端口號和目的IP地址相結合,可以標識報文的接收地址

(3)序號,TCP傳輸過程中,在發送端出的字節流中,傳輸報文中的數據部分的每一個字節都有它的編號。序號占32位,發起方發送數據時,都需要標記序號。

序號的語義與syn控制標志(Control bits)的值有關。根據控制標志中的SYN來表示不同的序號含義:

當syn=1時,為連接建立階段

當syn=0時,為數據傳輸正式開始時,第一個報文的序號為isn+1,后面的報文序號為前一個報文的SN值+TCP報文的凈荷字節數(不包含TCP頭)。如果發送端發送的一個TCP幀的凈荷為12B,序號為5 ,則發送端接著發送下一個數據包時,序號的值應該為5+12=17。

在數據傳輸中,tcp通過序號來對上層提供有序的數據流。

(4)確認序號標識了報文接收端期望接收的字節序列。如果設置了ACK控制位,確認序號的值表示下一個準備接收的包的序號碼。舉個例子

(5)頭部長度,該字段占4位,用來表示tcp報文的首部長度。

(6)保留字段,暫時沒什么用。

(7)控制標志占6位,具體的標志位為URG、ACK、psh、rst、syn、fin

(8)窗口,長度為16位,共兩個字節,用來進行流量控制的。

(9)校驗和長度位16位,共兩個字節,對整個tcp報文段,即tcp頭部和tcp數據進行校驗和計算,接收端用于對收到的數據包進行驗證。

(10)緊急指針,長度16位,共兩個字節,是一個偏移量,和sn序號值相加表示緊急數據最后一個字節的序號。

以上10項內容是TCP報文首部必需字段,也叫固有字段,長度為20字節。接下來就是可選項和填充部分。

2、TCP的三次握手

TCP連接建立時,雙方需要經過三次握手;斷開連接時,雙方需要經過四次揮手。

通常情況下,建立連接的雙方由一端監聽來自請求方的TCP連接,當服務端監聽開始時,必須準備好接受外來的連接,在java中該操作通過創建一個ServerSocket服務監聽套接字實例來完成。此操作會調用操作系統(如linux)c代碼的三個函數socket()、bind()、listen()來完成

服務端偽代碼如下:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServer {public static void main(String[] args) {try {ServerSocket socket=new ServerSocket(8080);while (true){Socket socket1=socket.accept();//開啟線程進行連接的IO操作ServerThread thread=new ServerThread();thread.start();}} catch (IOException e) {throw new RuntimeException(e);}}
}

客戶端偽代碼如下:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class SocketClient {public static void main(String[] args) {try {Socket socket =new Socket("localhost",8080);//寫入給監聽方的輸出流。OutputStream os=socket.getOutputStream();//讀取監聽方的輸入流InputStream inputStream=socket.getInputStream();} catch (UnknownHostException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}

(1)第一次握手:Client進入SYN_SENT狀態,發送一個SYN幀來主動打開傳輸通道,該幀被設置為1

(2)第二次握手:Server在收到SYN幀之后,會進入SYN_RCVD狀態,同時返回SYN+ACK幀給client。

(3)第三次握手:Client在收到Server的第二次握手SYN+ACK確認幀之后,首先將自己的狀態從SYN_SEND變成ESTABLISHED,表示自己的放向的連接通道已經建立成功。

3、TCP的四次揮手

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

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

相關文章

力扣貪心題解 跳躍游戲

55. 跳躍游戲 - 力扣(LeetCode) 給你一個非負整數數組 nums ,你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標,如果可以,返回 true &#xff1b…

信息系統開發方法

企業信息系統對于企業信息化的重要意義是不言而喻的。從實際運行的效果來看,有些信息系統運行得很成功,取得了巨大的經濟效益和社會效益;但也有些信息系統效果并不顯著,甚至還有個別信息系統開始時還能正常運行,可時間…

廣州數字孿生賦能工業制造,加速推進制造業數字化轉型

廣州數字孿生賦能工業制造,加速推進制造業數字化轉型。數字孿生系統基于歷史數據、實時數據,采用人工智能、大數據分析等新一代信息技術對物理實體的組成、特征、功能和性能進行數字化定義和建模。通過構建在信息世界對物理實體的等價映射,對…

Axure官方軟件安裝、漢化保姆級教程(帶官方資源下載)

1.下載漢化包 百度云鏈接:https://pan.baidu.com/s/1lluobjjBZvitASMt8e0A_w?pwdjqxn 提取碼: jqxn 2.解壓壓縮包 3.安裝Axure 進行安裝 點擊next 打勾,然后next, 默認是c盤,修改成自己的文件夾(不要什么都放c盤里…

RestTemplate硬編碼的使用

RestTemplate是由Spring框架提供的一個可用于應用中調用rest服務的類它簡化了與http服務的通信方式,統一了RESTFul的標準,封裝了http連接,我們只需要傳入url及其返回值類型即可。相較于之前常用的HttpClient,RestTemplate是一種更…

API測試基礎之http協議

http簡介: http(超文本傳輸協議)是一個簡單的請求-響應協議,它通常運行在TCP(傳輸控制協議)之上。它指定了客戶端可能發送給服務器什么樣的消息以及得到什么樣的響應。請求和響應消息的頭以ASCII碼形式給出…

遠程控制如何賦能智能制造?貝銳向日葵制造業場景案例解析

隨著數字化轉型在制造業的不斷深入,企業在產線端也逐漸投入更多智能化設備,數字化、智能化設備其中一個比較顯著的優勢就是可以依托互聯網實現遠程運維和調試,大大提升產線設備的穩定性和工作效率;而遠程調試運維一個重要的實現方…

人工智能原理復習--搜索策略(一)

文章目錄 上一篇搜索概述一般圖搜索盲目搜索下一篇 上一篇 人工智能原理復習–確定性推理 搜索概述 問題求解分為兩大類:知識貧乏系統(依靠搜索技術解決)、知識豐富系統(依靠推理技術) 兩大類搜索技術: …

海思3516DV500下的目標識別算法運行評估,包含yolov7,yolov8

目前在3516DV500下,自己訓練的模型的評估實測結果。根據實際模型會有些許差異。 涉及到技術細節的部分因為商業用途,有部分省略。如需相關技術服務項目合作可私信聯系。 我司推出的目標識別跟蹤模塊,支持熱紅外、可見光主流多光譜視頻輸入與目…

WeiPHP 微信開發平臺 SQL注入漏洞復現

0x01 產品簡介 weiphp 是一個開源,高效,簡潔的微信開發平臺,基于 oneThink 內容管理框架實現。 0x02 漏洞概述 weiphp 微信開發平臺 _send_by_group、 wp_where、 get_package_template等接口處存在 SQL 注入漏洞,攻擊者利用此漏洞可獲取數據庫中的信息(例如,管理員后臺…

三數組最小距離:2020年408算法題

算法思想 算法實現 #define INT_MAX 0x7fffffff //c語言int類型最大值 //計算絕對值 int abs(int a){if(a<0) return -a;else return a; } //判斷a是否為3個數中最小值 bool isMin(int a,int b,int c){if(a<b&&a<c) return true;return false; }//主函數 in…

RepidJson中Writer類、FilewriteStream類、 PrettyWriter類的區別

rapidjson是一個C的JSON解析庫&#xff0c;可以用于解析和序列化JSON數據。 Writer是rapidjson中一種基本的輸出流&#xff0c;用于將JSON數據輸出到字符串或文件中。 FileWriteStream是一個Writer的子類&#xff0c;它專門用于將JSON數據輸出到文件中。相比于普通的Writer&a…

平臺工程文化:軟件開發的創新路徑和協作之道

在快速發展的軟件開發領域&#xff0c;具有前瞻性思維的企業組織正在擁抱平臺工程文化的變革力量。這種創新方法強調創建共享平臺、工具和實踐&#xff0c;使開發人員能夠更快、更高效地交付高質量的軟件。在本文中&#xff0c;我們將深入探討平臺工程文化的核心原則和深遠的好…

C語言期末考試復習PTA數據類型及表達式-分支結構程序-循環結構-數組經典選擇題

目錄 第一章&#xff1a;C語言數據類型和表達式 第一題&#xff1a; 第二題&#xff1a; 第三題&#xff1a; 第四題&#xff1a; 第五題&#xff1a; 第六題&#xff1a; 第七題&#xff1a; 第八題&#xff1a; 第九題&#xff1a; 第二章&#xff1a;分支結構程序…

打包 抖音直播云游戲

抖音直播云游戲 oaid資源中的bcpkix-jdk15to18-1.68.jar與抖音云游戲的資源沖突。 其實資源名稱是一樣的&#xff0c;拷貝時資源名稱有變化。 為解決此問題&#xff0c;需要規范化文件的資源名稱&#xff0c;將.置為_ Error: Command failed: cmd /c echo off && Chc…

NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserv

問題 在IDEA運行HBASE腳本時出現如下報錯&#xff1a; org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 i…

Java多線程并發(二)

四種線程池 Java 里面線程池的頂級接口是 Executor&#xff0c;但是嚴格意義上講 Executor 并不是一個線程池&#xff0c;而只是一個執行線程的工具。真正的線程池接口是 ExecutorService。 newCachedThreadPool 創建一個可根據需要創建新線程的線程池&#xff0c;但是在以前…

深入了解數據庫鎖:類型、應用和最佳實踐

目錄 1. 引言 2. 數據庫鎖的基本概念 2.1 悲觀鎖和樂觀鎖 2.2 排他鎖和共享鎖 3. 悲觀鎖的應用場景 3.1 長事務和大事務 3.2 并發修改 3.3 數據庫死鎖 4. 悲觀鎖的最佳實踐 4.1 精細控制鎖的粒度 4.2 避免死鎖 4.3 考慮樂觀鎖 5. 案例分析 5.1 銀行系統的轉賬操作…

【GEE筆記】隨機森林特征重要性計算并排序

隨機森林是一種基于多個決策樹的集成學習方法&#xff0c;可以用于分類和回歸問題。在gee中可以使用ee.Classifier.smileRandomForest()函數來創建一個隨機森林分類器&#xff0c;并用它來對影像進行分類。 隨機森林分類器有一個重要的屬性&#xff0c;就是可以計算每個特征&a…

人工智能虛擬化環境

人工智能虛擬化環境通過模擬、管理和優化計算資源、數據資源和軟件環境&#xff0c;可以為人工智能算法和應用提供更加高效、靈活和可靠的運行平臺。本文將探討人工智能虛擬化環境的概念、技術和應用&#xff0c;并展望其在人工智能領域的未來發展。 首先&#xff0c;人工智能…