五、传输层(三)TCP

news2024/10/6 12:26:04

目录

3.0   TCP特点补充

3.1  TCP报文段首部格式

3.2  TCP连接管理

3.2.1  三报文握手

3.2.2  四报文挥手

3.3  TCP的流量控制和可靠传输

3.4  TCP拥塞控制

3.4.1  接收窗口、拥塞窗口、发送窗口关系

3.4.2  慢开始和拥塞避免

3.4.3  快重传和快恢复


3.0   TCP特点补充

  • TCP提供一对一全双工可靠通信,允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存接收缓存,用来临时存放双向通信的数据。
  • TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。
  • UDP报文长度由发送方应用进程决定,TCP报文段的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。如果应用进程传送到TCP缓存的数据块太长,TCP就把它划分得短一些再传送;如果太短,TCP也可以等到积累足够多的字节后再构成报文段发送出去。
  • IP首部的协议字段:TCP=6,UDP=17。

3.1  TCP报文段首部格式

  • 源端口号和目的端口号各占2B。端口是传输层与应用层的SAP。传输层的复用和分用功能都要通过端口才能实现。
  • 序号:占4B,共2^32个序号。TCP连接传送的字节流中的每个字节都按顺序编号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
  • 确认号:占4B,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号=N,则表明到序号N-1为止的所有数据都已正确收到。(数据链路层的后退N帧协议的累积确认ACK是表明N及N之间的都已正确收到)
  • 数据偏移(即首部长度):占4bit,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,单位是4B。TCP首部的最大长度为60B。注意不是IP数据报分片用到的那个数据偏移,而是TCP首部长度。
  • 确认位ACK:仅当ACK=1时,确认号字段才有效;当ACK=0时,确认号字段无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
  • 同步位SYN:当SYN=1时,表明这是一个连接请求报文或连接接受报文。当SYN=1,ACK=0时表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用SYN=1,ACK=1
  • 终止位FIN(finish):当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。
  • 窗口:占2B.窗口值为接收方让发送方设置发送窗口的依据。例如,设确认号位701,窗口字段是1000.这表明发送此报文段的一方还有字节序号位701~1700共1000B的接收缓存空间。
  • 校验和:占2B.校验和字段校验的范围包括首部和数据这两部分。在计算校验和时,要在TCP报文段的前面加上12B的伪首部。
  • 填充:为了使整个首部长度是4B的整数倍而设置的字段。
  • 保留位:保留为今后使用,但目前应置为0。
  • 紧急位URG:当URG=1时,表明紧急指针字段有效。
  • 紧急指针:占2B。它指出在本报文段中紧急数据共有多少字节(紧急数据在报文段数据最前面)。
  • 推送位PSH(Push):接收方TCP收到PSH=1的报文段,就尽快地交付给接受应用进程,而不再等到整个缓存都填满了后再向上交付。
  • 复位位RST(Reast):当RST=1时,表明TCP连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  • 选项。长度可变。TCP最初只规定了一种选项,即最大报文段长度MSS。MSS是TCP报文段中的数据字段的最大长度。

注:报文段的序号是其数据部分第一个字节的编号 。

3.2  TCP连接管理

 注:胡科大高军老师对于以下部分的视频讲解堪称完美,个人笔记只记录一些要点供以后补充。 

3.2.1  三报文握手

  • SYN报文段(连接请求报文或连接接受报文)不能携带数据,但要消耗一个序号
  • 普通的TCP确认报文段可以携带数据,但如果不携带数据,则不消耗序号。如果该三报文握手的第三个报文段不携带数据,则TCP客户进程要发送的下一个数据报文段的序号仍为X+1。

3.2.2  四报文挥手

参与TCP连接的两个进程中的任何一个都能提出释放连接的请求。 

  • TCP规定终止标志位FIN等于1的TCP报文段即使不携带数据,也要消耗一个序号。
  • 终止等待1状态表明TCP客户不再发送数据,但TCP服务器可能还要发送数据。
  • 服务器进入关闭等待状态后,TCP连接处于半关闭状态,TCP客户不能再发送数据,但TCP服务器可能还要发送数据。

 

3.3  TCP的流量控制和可靠传输

数据链路层的可靠传输机制和传输层TCP的可靠传输机制有很多相同之处。如都使用窗口机制、确认、重传(超时或冗余ACK)。

因此TCP的可靠传输适合对比记忆,其不同点如下

  • TCP使用序号,序号建立在传送的字节流之上(即字节编号),而不是建立再报文段之上。TCP的窗口大小指明了有多少序号。而GBN和SR是给窗口编号
  • TCP默认使用累积确认,这于GBN相同。但GBN需要重传出错之后的所有帧,而TCP只重传出错的序号组成的报文段(失序的报文缓存起来)。此外,TCP中提供一个SACK选择确认选项,此时TCP与SR非常相似。TCP的差错恢复机制可视为GBN和SR协议的混合体。
  • TCP采取的是对报文段的确认机制,并不是每个字节都要发回确认,而是在发送一个报文段的字节后才发回一个确认。
  • 数据链路层的后退N帧协议的累积确认ACK是表明N及N之间的都已正确收到而TCP的确认N是N-1及N-1以前的已正确收到
  • TCP服务器通过累积确认报文段调整接收窗口的大小对发送方进行流量控制

即使接收窗口值为0,也必须接受零窗口探测报文段、确认报文段以及携带有紧急数据的报文段。 

  

3.4  TCP拥塞控制

在通信子网内,由于出现过量的数据包而引起网络性能下降的现象称为拥塞

在网络层实现拥塞控制的方法为显式反馈。目前网际控制报文协议(ICMP)最新规定已经不再使用源点抑制报文,即显式反馈。

在TCP中,拥塞控制主要是利用隐式反馈在传输层实现的

  • 流量控制是抑制发送端发送数据的速率,以便接收端来得及接收。
  • 拥塞控制是一个全局性的问题,涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素。单一地增加资源并不能解决拥塞问题。

拥塞控制的方法

  • 闭环控制指作为被控的输出量以一定方式返回到作为控制的输入端,并对输入端施加控制影响的一种控制关系。 是带有反馈信息的系统控制方式。
  • 开环控制是指无反馈信息的系统控制方式。

3.4.1  接收窗口、拥塞窗口、发送窗口关系

 

3.4.2  慢开始和拥塞避免

 

3.4.3  快重传和快恢复

1990的reno版本,来改进TCP的性能。 

 与快重传配合使用的是快恢复算法。

 

 

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

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

相关文章

Java项目:springboot超市订单管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该超市订单管理毕业设计基于jdk8版本开发,在部署时需要使用jdk8以上的版本。使用了目前流行的框架组合springbootmybatis的框架技术…

DispatcherServlet初始化过程源码分析 | SpringMVC源码分析

一、继承或实现关系 public class DispatcherServlet extends FrameworkServlet public abstract class FrameworkServlet extends HttpServletBean implements ApplicationContextAware public abstract class HttpServletBean extends HttpServlet implements Environment…

聊聊Go语言并发之道

写在前面 2007年,Go语言诞生于Google公司,2009年开源,2012年推出1.0版本,曾两次获得TIOBE年度语言。2012年起,全球大量的开源项目开始使用Go语言开发,目前Go语言已成为云计算领域事实上的标准语言&#xff…

深度学习常见概念字典(感知机、全连接层、激活函数、损失函数、反向传播、过拟合等)

这一章的所有内容均是为了进入深度学习具体的某某网络而准备的,简单但是非常有必要。 1. 神经网络(neural networks)的基本组成 1.1 神经元(neuron) 神经元(neuron) 是神经网络(n…

slf4j常用配置文件读取

slf4j常用配置文件读取 log4j2读取配置文件 日志现在一般都是使用slf4j作为接口、底层实现一般是用log4j2或者logback。 我们先看下log4j2是如何读取配置文件的。 implementation org.apache.logging.log4j:log4j-slf4j-impl:2.19.0如果使用gradle的话。上面的代码就会导入sl…

VS coda C++、python运行与Dbug配置

首先新建终端 一次性使用C方法 检查C编译器是否存在 which g可见位置存在于:/usr/bin/g 一次性命令格式: 使用json配置文件 运行C方法(推荐): 根据你查找的g的位置来决定 使用配置好的tasks.json(C的…

QT入门-UI-信号槽

目录 一、QWidget类(重点) 二、子组件(掌握) 三、样式表(熟悉) 一、什么是信号槽? 二、信号槽的连接方式 2.1 自带信号→自带槽 2.2 自带信号→自定义槽 2.3 自定义信号 三、传参方式 3.1 成员变…

C#语言实例源码系列-伪装文件

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

Redis分布式锁存在的问题

假设有这样一个场景,在一个购票软件上买一张票,但是此时剩余票数只有一张或几张,这个时候有几十个人都在同时使用这个软件购票。在不考虑任何影响下,正常的逻辑是首先判断当前是否还有剩余的票,如果有,那么…

Spring5.3.0源码下载

目录源码下载环境配置import into idea修改配置gradle-wapper.propertiesbuild.gradleSetting Gradlerefresh Gradle写一个小dome源码研究心得源码下载 Spring5.3.0 Download Address 我们只需要下载zip就行了, 如果忘记了这个地址,可以在Spring Offici…

网络技术——网络运维工程师必会的网络知识(3)(详细讲解)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.网络层协议与应用 1.网络层的功能 2.IP数据包格式 3.广播与…

100天精通Python(数据分析篇)——第70天:Pandas常用排序、排名方法(sort_index、sort_values、rank)

文章目录每篇前言一、按索引排序:sort_index()1. Series类型排序1)升序2)降序2. DataFrame类型排序1)按行索引排序2)按列索引排序二、按值排序:sort_values()1. Series类型排序1)升序2&#xff…

冻结集合:不可能增删frozenset()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 冻结集合:不可能增删 frozenset() 选择题 对于以下python代码表述错误的一项是? a{1,2} print("【显示】a",a) a.add(3) print("【执行】a.add(3)【显示】a"…

【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics)

这节的内容主要讲述机器人动力学的内容。相对于本书其他部分运动学内容相比,把动力学一下子合成了一章。看完以后有三个感受: 1.本章难度相对其他章节较大,因此需要反复去看,以求对重要内容的眼熟,不求全部记住&#…

Java window多环境配置

目录JDK版本下载配置内容描述创建JAVA_HOME在Path配置版本切换效果JDK版本下载 Java8 Download address 这个是Java8 的下载地址,下载是要登录的,自己花费一点时间去注册。如果想要下载其它版本的JDK,请看下面的图,然后你就可以看…

QT数据库-网络编程-打包

目录 一、讲解之前 二、数据库基本操作 三、模糊查询 二、编程之前 三、通信结构 一、设置应用图标(熟悉) 二、Debug和Release模式(掌握) 三、动态链接库(掌握) 四、打包(熟悉) 一、…

FastDDS(10)Transport Layer传输层

传输层在DDS实体之间提供通信服务,负责通过物理传输实际发送和接收消息。DDS层将此服务用于用户数据和发现流量通信。然而,DDS层本身是独立于传输的,它定义了一个传输API,可以运行在实现该API的任何传输插件上。这样,它就不局限于特定的传输,应用程序可以选择最适合其需求…

公众号开发(4) —— 使用Senparc.Weixin SDK进行模板消息推送

微信公众号支持推送模板消息给特定用户,只要获取到公众号用户的openid向微信提供的接口发送post请求即可向特定用户推送模板消息,以下记录简单记录使用Senparc.Weixin SDK进行模板消息推送的过程。 1 模板消息建立 在微信公众号测试账号中添加如下消息…

数据结构之排序【冒泡排序和快速排序之一的实现及分析】内含动态演示图

引言: 今天分享一下一点小事迹,自从从学校回到家里,我已经好久没睡上一个好觉了,因为真的冷,莫名被窝总是感觉很冷,然后穿着袜袜的脚也是冰凉,所以每次早晨要起床的时候总是感觉非常的冷&#…

shell基础使用

一、hello world 首先建立一个tmux vim test.sh //再创建一个test.sh文件 进入文件后,创建一个如下命令,指明bash为脚本解释器 #! /bin/bash //相当与c头文件echo "hello world"运行方式 1.作为可执行文件 acs9e0ebfcd82d7:~$ chmod x test.s…