TCP/IP详解 卷1:协议 学习笔记 第十七章 TCP:传输控制协议

2023-11-01

TCP提供一种面向连接的、可靠的字节流服务。

面向连接意味着两个使用TCP的应用(通常是一个客户一个服务器)在彼此交换数据前必须先建立一个TCP连接。

在一个TCP连接中,仅有两方进行彼此通信,广播和多播不能用于TCP。

TCP提供可靠性的方法:
1.数据被分割成TCP认为最适合发送的数据块。这和UDP不同,应用程序产生的UDP数据报长度将保持不变。由TCP传递给IP的信息单位是报文段或段。
2.TCP发出一个段后,它启动一个定时器,等待目的端接收这个报文段,如果不能及时收到一个确认,将重发这个报文段。
3.当TCP收到发自TCP连接另一端的数据,它将发送一个确认,这个确认不是立即发送,而是要推迟几分之一s。
4.TCP维护它首部和数据的校验和,这是一个端到端的检验和,如果收到的段的检验和有差错,TCP将丢弃这个报文段,且不确认收到此报文段(希望发送端超时重发)。
5.TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序,TCP会对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
6.IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
7.TCP还能提供流量控制,TCP连接的每一方都有固定大小的缓冲空间,TCP接收端只允许另一端发送缓冲区能接纳的数据,这将防止发送快的主机致使接收端的缓冲区溢出。

两个应用可通过TCP交换8bit的字节构成的字节流,TCP不在字节流中插入记录标识符,将其称为字节流服务。如果发送方先传10字节、又传20字节、再传50字节,连接的另一方将无法了解发送方每次发送了多少字节,收方可分4次接收这80字节,每次接收20字节。

TCP对字节流内容不做任何解释,对其解释的工作交给应用层。这类似UNIX对文件的操作方式,UNIX内核对一个应用读或写不做任何解释,而是交给应用处理,UNIX内核不能区分一个二进制文件与一个文本文件。

在这里插入图片描述
在这里插入图片描述
TCP首部在不计算选项字段时,是20字节。

TCP段中的源端和目的端端口号用来寻找发端和收端的应用,这两个值加上IP首部中的源端IP和目的端IP唯一确定一个TCP连接。

一个IP地址和一个端口号也称为一个插口(socket)。一组插口对(socket pair)可唯一确定TCP连接的双方。

序号字段用来标识从TCP发端发送的数据字节流,它表示这个报文段中的第一个数据字节的标号。序号是32bit无符号数,序号到达232-1后又从0开始。

建立一个新的连接时,SYN标志变1,序号字段包含由主机选择的初始序号(ISN,Initial Sequence Number)。建立连接后,该主机要发送的第一个字节序号是这个ISN+1,因为SYN标志消耗了一个序号。

每个传输的字节都被计数,确认序号字段包含发送确认的一端所期望的下一个序号,因此,确认序号应当是上次已成功收到的最后一个数据字节的序号加1,只有当ACK标志为1时,确认序号字段才有效。

发送ACK无需任何代价,因为它是TCP首部的一部分,一旦连接建立,ACK字段总是被设置为1。

TCP为应用层提供全双工服务,数据能在两个方向独立地传输,因此,连接的每一端都必须保持两个方向上的传输数据序号。

TCP可以表述为一个没有选择确认或否认的滑动窗口协议。TCP缺少选择确认是由于如果收端只收到了1~1024字节的报文段和2049~3072字节的报文段,此时,收端只能发送一个确认序号为1025的ACK。

首部长度字段最大值为15(4bit),以32bit为单位,因此TCP首部最多有60字节。

TCP首部中的6个标志比特:
1.URG。紧急指针有效。
2.ACK。确认序号有效。
3.PSH。接收方应尽快将这个报文段交给应用层。
4.RST。重建连接。
5.SYN。同步序号,用来发起一个连接。
6.FIN。发端完成发送任务。

TCP流量控制通过连接的两端声明的窗口大小来实现,窗口大小为字节数,是一个16bit字段,因此窗口大小为65535字节,存在一个窗口比例,使得窗口最大值按比例变化以提供更大的窗口。

检验和字段覆盖了整个TCP报文段,包括TCP首部和TCP数据。这是一个强制性字段,它的计算和UDP检验和的计算相似。

当URG为1时,紧急指针才有效,紧急指针是一个正的偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。

常见的可选字段是最长报文大小,又称MSS(Maximum Segment Size)。每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明此选项,它指明本端能接收的最大长度的报文段。

TCP报文段中的数据部分是可选的,在连接建立和终止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,也会用没有任何数据的首部来确认收到的数据。处理超时的很多情况中,也会发送不带数据的报文段。

Telnet(远程登录服务)、Rlogin、FTP、SMTP(简单邮件传输协议)都是用TCP。

除了UDP的首部检验和,其他的检验和都是必需的。

IP的校验和只包含首部,而ICMP、IGMP、UDP、TCP的首部校验和包括各自的首部和数据。

所有Internet协议中,校验和出错的分组都只做丢弃处理,这是由于它们的源IP、源端口、协议字段可能被破坏了。

TCP提供字节流的服务,收发双方都不保持记录的边界,很多应用使用一个回车和换行来标记每个应用记录的结束,这是NVT ASCII采用的编码;另一种技术是在每个记录前加上一个记录的字节计数。

TCP首部开始就是源和目的端口号,这是由于ICMP必须至少返回引起差错的IP数据报中IP首部之后的前8个字节,必须需要端口号以确定发送此IP数据报的程序。

UDP没有首部长度字段,因为UDP没有可选的选项字段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP/IP详解 卷1:协议 学习笔记 第十七章 TCP:传输控制协议 的相关文章

随机推荐

  • 【MySQL】varchar转int类型的方法

    MySQL varchar转int类型的方法 CAST函数的使用 1 问题描述 获取一个表user中age的最大值 由于历史原因 age是varchar类型的 2 问题解决 方案一 select max cast sex as UNSIGN
  • Blender辅助工具集:M3插件

    1 MACHIN3tools M3 插件 一个辅助工具集 MACHIN3tools An Addon to Streamline Blender 3 3 and beyond by machin3 io https github com m
  • Spring(DI)

    DI Dependency Injection 即依赖注入 对象之间的依赖由容器在运行期决定 即容器动态的将某个依赖注入到对象自重 基于XML配置注入依赖 有参构造函数注入依赖 bean类实现有参构造函数 public class Stud
  • 开始在CSDN上安家了哈!

    2014年计划完成50 原创blog 这是我的目标
  • vue项目打包部署到tomcat(详细)

    hash路由模式打包部署到tomcat 1 修改config index js文件下的assetsPublicPath为 2 修改router文件夹下index js添加 base 文件夹名称 例如 yuncheng 可以自己随意设置 3
  • 未找到 van-toast 节点,请确认 selector 及 context 是否正确

    1 json文件引入 van toast vant weapp toast index 2 js文件引入 import Toast from vant weapp toast toast 3 wxml写入
  • 微信小程序蓝牙BLE开发实战——遇到问题及踩坑(三)

    微信小程序蓝牙BLE开发实战 三 对于我这种小白 遇到问题是常见的哈 这里记录下 避免日后再踩坑 文章目录 微信小程序蓝牙BLE开发实战 三 1 iPhone6及6plus无法搜索到设备 解决方案 2 IOS无法获取 mac 地址 如何连接
  • 分布式任务调度平台xxl-job

    一 java的集中式任务调度 while true Thread sleep 轮询 线程休眠的方式实现定时任务 java util Timer java util TimerTask Timer是一种定时器工具 用于使用后台线程计划执行指定
  • 数字IC设计流程学习笔记

    一 规格定制 IC的规格定制包括物理指标 性能指标和功能指标 物理指标 封装 工艺 芯片面积 性能指标 功耗 速度 功能指标 接口 芯片功能 二 系统设计 系统设计是确定IC的算法模型和系统架构等 并通过一些高级语言 matlab等对算法模
  • 【tensorflow基础】读取mnist数据

    转载于 MNIST手写数字数据集读取方法 TensorFlow的封装让使用MNIST数据集变得更加方便 MNIST数据集是NIST数据集的一个子集 它包含了60000张图片作为训练数据 10000张图片作为测试数据 在MNIST数据集中的每
  • spring-security

    文章目录 csrf remember me 密码存储 权限继承 应 要求添加的代码 白名单相关说明 csrf A网站登录 B网站 使用 Copyright C
  • 传染病模型(4)——SIRS模型和SIER模型及matlab具体程序

    前言 常见的传染病模型按照具体的传染病的特点可分为 SI SIS SIR SIRS SEIR 模型 其中 S E I R 的现实含义如下 S Susceptible 易感者 指缺乏免疫能力健康人 与感染者接触后容易受到感染 E Expose
  • 一文了解亚马逊云科技适用于 Amazon Lightsail 的托管数据库

    Amazon Lightsail 是亚马逊云科技提供的一种易上手使用 月度价格经济实惠 并包括了计算实例 容器 存储 数据库的虚拟专用服务器 在创建时可以进行业务蓝图选择 可选择包含多种操作系统 Linux Windows 等 或操作系统加
  • C++中定义常量的几种方式

    概述 在程序运行过程中 始终不发生改变的量 称之为常量 在 C 语言中常量是个固定值 也就是说常量值在定义后不能进行修改 define 宏常量 define 是 C 语言中定义常量的方式 在 C 中也可以使用 define 的使用 defi
  • RocketMQ安装与启动

    分享知识 传递快乐 官网 https rocketmq apache org 1 准备环境 系统 Centos7 jdk 1 8 2 环境部署 解压 rocketmq 并进入 rocketmq 下的 bin 目录 调整启动内存 vim bi
  • C++ 函数模板

    函数模板是通用的函数描述 它们使用泛型来定义函数 其中的泛型可用具体的类型替换 通过将类型作为参数传递给模板 可使编译器生成该类型的函数 由于模板允许以泛型 而不是具体类型 的方式编写程序 因此有时候也被称为通用编程 在标准C 98添加关键
  • ubuntu14.04安装wireshakes

    网络攻防 这课要做一个嗅探器的大作业 想在linux是实现 于是先在ubuntu上下一个wiresharks看看它的一些功能和 废话少说 直接上安装过程与期间遇到的问题 安装编译工具 sudo apt get install build e
  • Spring Gateway集成 Nacos注册中心不能够发现服务的问题解决

    一 问题描述 我们现在是在用Nacos替换Eureka 原来Eureka和Spring gateway运行正常 可以通过Spring gateway调用注册到Eureka中的服务 当前Spring cloud的版本是Hoxton SR8 N
  • 顺序表基本操作

    文章目录 1 顺序表插入元素 2 顺序表删除元素 3 顺序表查找元素 4 顺序表更改元素 1 顺序表插入元素 向顺序表中插入数据元素 根据插入位置的不同 可分为以下 3 种情况 插入到顺序表的表头 在表的中间位置插入元素 尾随顺序表中已有元
  • TCP/IP详解 卷1:协议 学习笔记 第十七章 TCP:传输控制协议

    TCP提供一种面向连接的 可靠的字节流服务 面向连接意味着两个使用TCP的应用 通常是一个客户一个服务器 在彼此交换数据前必须先建立一个TCP连接 在一个TCP连接中 仅有两方进行彼此通信 广播和多播不能用于TCP TCP提供可靠性的方法