TCP/IP 传输层协议

  • 传输层定义了主机应用程序之间端到端的连通性。传输层中最为常见的两个协议分别是传输控制协议TCPTransmission Control Protocol)和用户数据包协议UDPUser Datagram Protocol)。

TCP协议

  • TCP是一种面向连接的传输层协议,可提供可靠的传输服务。 
  • TCP位于TCP/IP模型的传输层,它是一种面向连接的端到端协议。TCP作为传输控制协议,可以为主机提供可靠的数据传输。在本例中,两台主机在通信之前,需要TCP在它们之间建立可靠的传输通道。

TCP端口号

  •  端口号作用:用来区分不同的网络服务。
  • TCP允许一个主机同时运行多个应用进程。每台主机可以拥有多个应用端口,每对端口号、源和目标IP地址的组合唯一地标识了一个会话。端口分为知名端口和动态端口。有些网络服务会使用固定的端口,这类端口称为知名端口,端口号范围为0-1023。如FTPHTTPTelnetSNMP服务均使用知名端口。动态端口号范围从102465535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。

TCP头部

  •  TCP通常使用IP作为网络层协议,这时TCP数据段被封装在IP数据包内。
  • TCP数据段由TCP Header(头部)和TCP Data(数据)组成。TCP最多可以有60个字节的头部,如果没有Options字段,正常的长度是20字节。
  • TCP Header是由如上图标识的一些字段组成,这里列出几个常用字段。
  • 16位源端口号:源主机的应用程序使用的端口号。
  • 16位目的端口号:目的主机的应用程序使用的端口号。每个TCP头部都包含源和目的端的端口号,这两个值加上IP头部中的源IP地址和目的IP地址可以唯一确定一个TCP连接。
  • 32位序列号:用于标识从发送端发出的不同的TCP数据段的序号。数据段在网络中传输时,它们的顺序可能会发生变化;接收端依据此序列号,便可按照正确的顺序重组数据。
  • 32位确认序列号:用于标识接收端确认收到的数据段。确认序列号为成功收到的数据序列号加1
  • 4位头部长度:表示头部占32bit字的数目,它能表达的TCP头部最大长度为60字节。
  • 16位窗口大小:表示接收端期望通过单次确认而收到的数据的大小。由于该字段为16位,所以窗口大小的最大值为65535字节,该机制通常用来进行流量控制。
  • 16位校验和:校验整个TCP报文段,包括TCP头部和TCP数据。该值由发送端计算和记录并由接收端进行验证。

TCP建立连接的过程 

 

  •  TCP通过三次握手建立可靠连接。

  • TCP是一种可靠的,面向连接的全双工传输层协议。

  • TCP连接的建立是一个三次握手的过程。如图所示:

  • 主机A(通常也称为客户端)发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号(seq)为a

  • 服务器A回复标识了SYN+ACK的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1a+1),以此作为对主机ASYN报文的确认。

  • 主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1b+1),以此作为对服务器ASYN报文的确认。

TCP传输过程

  •  TCP的可靠传输还体现在TCP使用了确认技术来确保目的设备收到了从源设备发来的数据,并且是准确无误的。
  • 确认技术的工作原理如下:
  • 目的设备接收到源设备发送的数据段时,会向源端发送确认报文,源设备收到确认报文后,继续发送数据段,如此重复。
  • 如图所示,主机A向服务器A发送TCP数据段,为描述方便假定每个数据段的长度都是500个字节。当服务器A成功收到序列号是M+1499的字节以及之前的所有字节时,会以序列号M+1499+1=M+1500进行确认。另外,由于数据段N+3传输失败,所以服务器A未能收到序列号为M+1500的字节,因此服务器A还会再次以序列号M+1500进行确认。

TCP流量控制 

 

  •  TCP滑动窗口技术通过动态改变窗口大小来实现对端到端设备之间的数据传输进行流量控制。
  • 如图所示,主机A和服务器A之间通过滑动窗口来实现流量控制。为方便理解,此例中只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口进行流量控制。
  • 主机A向服务器发送4个长度为1024字节的数据段,其中主机的窗口大小为4096个字节。服务器A收到第3个数据段后,缓存区满,第4个数据段被丢弃。服务器以ACK 3073响应,窗口大小调整为3072,表明服务器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。

TCP关闭连接 

  • 主机在关闭连接之前,要确认收到来自对方的ACK 
  • TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。
  • TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手
  • 如图所示:
  • 主机A想终止连接,于是发送一个标识了FINACK的数据段,序列号为a,确认序列号为b
  • 服务器A回应一个标识了ACK的数据段,序列号为b,确认序号为a+1,作为对主机AFIN报文的确认
  • 服务器A想终止连接,于是向主机A发送一个标识了FINACK的数据段,序列号为b,确认序列号为a+1
  • 主机A回应一个标识了ACK的数据段,序列号为a+1,确认序号为b+1,作为对服务器AFIN报文的确认。
  • 以上四次交互便完成了两个方向连接的关闭。

UDP协议

  •  ​​​​​​​UDP是一种面向无连接的传输层协议,传输可靠性没有保证。
  • 当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时,可以用UDP协议来替代TCP协议在传输层控制数据的转发。UDP将数据从源端发送到目的端时,无需事先建立连接。UDP采用了简单、易操作的机制在应用程序间传输数据,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接收到重复数据的情况。

UDP头部

  •  UDP头部仅占8字节,传输数据时没有确认机制。
  • UDP报文分为UDP报文头和UDP数据区域两部分。报头由源端口、目的端口、报文长度以及校验和组成。UDP适合于实时数据传输,如语音和视频通信。相比于TCPUDP的传输效率更高、开销更小,但是无法保障数据传输的可靠性。UDP头部的标识如下:
  • 16位源端口号:源主机的应用程序使用的端口号。
  • 16位目的端口号:目的主机的应用程序使用的端口号。
  • 16UDP长度:是指UDP头部和UDP数据的字节长度。因为UDP头部长度为8字节,所以该字段的最小值为8
  • 16UDP校验和:该字段提供了与TCP校验字段同样的功能;该字段是可选的。

UDP传输过程

  •  ​​​​​​​使用UDP传输数据时,由应用程序根据需要提供报文到达确认、排序、流量控制等功能。
  • 主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的网络路径到达主机B。这样的情况下,先发送的数据包不一定先到达主机B。因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认、排序和流量控制等功能。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。

  • UDP不提供重传机制,占用资源小,处理效率高。
  • 一些时延敏感的流量,如语音、视频等,通常使用UDP作为传输层协议。
  • UDP适合传输对时延敏感的流量,如语音和视频。
  • 在使用TCP协议传输数据时,如果一个数据段丢失或者接收端对某个数据段没有确认,发送端会重新发送该数据段。
  • TCP重新发送数据会带来传输延迟和重复数据,降低了用户的体验。对于时延敏感的应用,少量的数据丢失一般可以被忽略,这时使用UDP传输将能够提升用户的体验。

本章总结

问:TCP头部中的确认标识位有什么作用?

答:TCP报文头中的ACK标志位用于目的端对已收到数据的确认。目的端成功收到序列号为x的字节及之前的所有字节后,会以序列号x+1进行确认。

问:TCP头部中有哪些标识位参与TCP三次握手?

答:在TCP的三次握手过程中,要使用SYNACK标志位来请求建立连接和确认建立连接。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

esp32-s3解决使用蓝牙ble一键配网时,蓝牙ble内存使用的内部空间,空间不足时可采用外部PSRAM

idf.py menuconfig进入到esp32配置界面,配置NimBLE使用外部PSRAM内存即可

pip 离线安装:利用pypi网站进行模块 库的离线安装

离线安装是一种很好的方法,在网络不佳、库版本不明确、复杂库本地编译安装报错时,通过whl文件的下载安装,可以很高效的解决问题。 pypi的网站:https://pypi.org/ 这个网站包含各种你 pip install xxx 的库,离线安装可…

我做了一个在手机灵动岛锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率...的软件

我做了一个在手机灵动岛&锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率…的软件 Island Widgets 的作用: 提醒您 : 准时下班每天运动陪伴家人保持体重放下手机每日待办当前网速手机使用强度实时热搜现在天气… 初…

Python库学习(十三):爬虫框架Scrapy

微信搜索【猿码记】查看更多文章... 1.介绍 Scrapy是一个用于爬取网站数据的Python框架。它提供了一套强大而灵活的工具,使开发者能够轻松地创建和管理爬虫,从而从网站中提取所需的信息。框架要求Python的版本 3.8 Github Star:49.6k: https://github.c…

【Linux】Linux线程概念和线程控制

文章目录 一、Linux线程概念1.什么是线程2.线程的优缺点3.线程异常4.线程用途5.Linux进程VS线程 二、线程控制1.线程创建2.线程终止3.线程等待4.线程分离 一、Linux线程概念 1.什么是线程 线程是进程内的一个执行流。 我们知道,一个进程会有对应的PCB,…

GEE-Sentinel-2月度时间序列数据合成并导出

系列文章目录 第一章:时间序列数据合成 文章目录 系列文章目录前言时间序列数据合成总结 前言 利用每个月可获取植被指数数据取均值,合成月度平均植被指数,然后将12个月中的数据合成一个12波段的时间数据合成数据。 时间序列数据合成 代码…

ROS2 学习09--ros 中的通信接口的定义以及如何创建自定义msg、srv和action文件

在ROS系统中,无论话题还是服务,或者我们后续将要学习的动作,都会用到一个重要的概念——通信接口。 通信并不是一个人自言自语,而是两个甚至更多个人,你来我往的交流,交流的内容是什么呢?为了让…

数值分析(只为应付考试)

概述 研一时为应付高等工程数学考试整理的有关数值分析部分的内容,目的是为了应付考试。 误差 误差限与有效数字的联系 对于有 n n n 位有效数字的 x x x 的近似值 x ∗ x^* x∗, 其科学计数法表示形式 x ∗ a 1 . a 2 . . . a n 1 0 m ( a 1 ≠ 0 ) x^* …

Python开发GUI常用库PyQt6和PySide6介绍之二:设计师(Designer)

Python开发GUI常用库PyQt6和PySide6介绍之二:设计师(Designer) PySide6和PyQt6都有自己的设计师(Designer),用于可视化地设计和布局GUI应用程序的界面。这些设计师提供了丰富的工具和功能,使开…

文件名生成excel清单,怎么操作?这里有简单办法

文件名生成excel清单,怎么操作?为了整理文件名称,有时候需要将所有的文件名称整理好并且生成excel清单,大家可能还不能理解是什么意思,其实就是将所有文件的名称整理到excel表格里,形成一个清单。这个操作很…

【ECharts】雷达图

let chart echarts.init(this.$refs.radar_chart); let option {title: {text: 关键过程指标,},grid: {left: 0,},legend: {data: [个人, 小组, 团队],bottom: 0,itemWidth: 6,itemHeight: 6,},radar: {// shape: circle,indicator: [{ name: 成交额, max: 30000 },{ name: 成…

yum install net-tools 命令报错,无法安装成功

编辑网卡文件 插入数据,输入: i 保存编辑:输入 Esc 然后:wq

数据结构学习 leetcode64最小路径和

动态规划 题目: 建议看这里,有这道题详细的解析。我觉得写的挺好。 这是我在学动态规划的时候,动手做的一道题。 虽然我在学动态规划,但是我之前学了dps,所以我就想先用dps试着做,结果发现不行&#xf…

使用Gitee中的CI/CD来完成代码的自动部署与发布(使用内网穿透把本地电脑当作服务器使用)

📚目录 📚简介:⚙️ 所需工具:💨内网穿透配置💭工具介绍✨命令安装🎊配置Cpolar🕳️关闭防火墙🥛防火墙端口放行规则(关闭防火墙可以忽略)🍬小章总…

打造明厨亮灶工程,需要哪些AI视频智能算法助力?

旭帆科技AI智能监控可以通过摄像头、传感器和数据处理等技术手段,实时监测厨房人员着装、行为与烟火等,对厨房实时监控进行分析与记录,从而实现明厨亮灶场景的搭建,保障食品安全和服务质量。 1、烟火识别 对于后厨来说&#xff0…

字符串函数的模拟实现(部分字符串函数)

strlen函数模拟 size_t my_strlen(const char* arr) {int count 0;while(*arr){arr;count;}return count;} int main() { printf( " %zd", my_strlen("adsshadsa"));}//模拟实现strlen函数 strcpy函数模拟 char* my_strcpy(char* arr1, const char* ar…

在Windows上使用 Python

本文档旨在概述在 Microsoft Windows 上使用 Python 时应了解的特定于 Windows 的行为。 与大多数UNIX系统和服务不同,Windows系统没有预安装Python。多年来CPython 团队已经编译了每一个 发行版 的Windows安装程序(MSI 包),已便…

C++——C++11(2)

我在我的C异常博客中曾提到,对于异常的处理经常会导致内存泄漏问题, 一种解决方法是异常的重新抛出,还有一种就是RAII,那么RAII的思想体现 在C中就是智能指针,所以接下来我将简单的介绍,什么是RAII&#xf…

计算机网络 网络层下 | IPv6 路由选择协议,P多播,虚拟专用网络VPN,MPLS多协议标签

文章目录 5 IPv65.1 组成5.2 IPv6地址5.3 从IPv4向IPv6过渡5.3.1 双协议栈5.3.2 隧道技术 6 因特网的路由选择协议6.1 内部网关协议RIP6.2 内部网关协议 OSPF基本特点 6.3 外部网关协议 BGP6.3.1 路由选择 6.4 路由器组成6.4.1 基本了解6.4.2 结构 7 IP多播7.1 硬件多播7.2 IP多…

Inscribe:应用非定向资产交易协议 布局巨大铭文赛道

随着比特币出现了一定的回调,铭文市场也出现了50%以上的跌幅,但是从市场的长期发展来看,铭文市场空间巨大,仍然是未来千亿级的蓝海市场,那么这样的回调阶段正式各类优质项目深度BUILD 扩展自己产品生态提升竞争力的关键…