s6-4 TCP 数据段
传输控制协议
TCP (Transmission Control Protocol) 是专门为了在不可靠的互联网络上提供可靠的端到端字节流而设计的
TCP必须动态地适应不同的拓扑、带宽、延迟、分组大小和其它的参数,并且当有错误的时候,能够足够健壮
传输控制协议
支持TCP的机器都有一个 TCP 实体,或者是用户进程或者是操作系统内核,都可以管理TCP流和跟IP层的接口
发:封装
TCP实体接收本地进程的用户数据流,将其分割成不超过64kB的分片(实践中,通常分割成1460字节,以通过以太网传输)
收:解封装
当包含TCP数据段的报文到达某台机器的时候,被提交给传输实体,传输实体将其重构出原始的字节流
TCP 协议
TCP连接上的每个字节都有它自己独有的32位序列号
收发双方的TCP实体以数据段的形式交换数据
一个数据段包括20字节的头部(不包括可选项)和数据域(0
或更多字节)
TCP 数据段的大小
TCP软件决定数据段的大小,有两个因素限制了数据段的长度:
TCP数据段必须适合IP的65515的载荷限制
每个TCP数据段必须适合于下层网络的 MTU (如,1500 字节
– 以太网载荷大小)
TCP使用的基本协议具有动态窗口大小的滑动窗口协议
(sliding window protocol)
TCP 数据段(TPDU)格式
TCP 数据段头
1.源端口 和 目的端口 字段标明了一个连接的两个端点
用来跟踪同一时间内通过网络的不同会话。一般每个端口对应一个应用程序
2.序列号 – 字节号 (32 位)
初始序列号ISNs(initial sequence numbers ):随机产生的
SYN:携带了ISNs 和SYN 控制位的数据段
3.确认号 – 期望接收的字节号 (32位)
4.TCP 段头长度 – TCP段头长度,
单位32位(4字节)
5.保留域/字段
6.
当紧急指针使用的时候,URG 被置为1。紧急指针是一个对于当前序列号的字节偏移量,标明紧急数据从哪里开始
- 当URG=1时,表明有紧急数据,必须首先处理
- 紧急指针配合使用
- 方收到这样的数据后,马上处理,处理完后恢复正常操作
- 使win=0,也可以发送这样的紧急数据段
- ACK 可设为 1/0
1 表示确认号有效
0 标明确认号无效 - PSH 表示这是带有PUSH标志的数据
接收方收到这样的数据,应该立刻送到上层,而不需要缓存它 - RST 被用来重置一个已经混乱的连接
- SYN 用在连接建立的过程
SYN=1 ,ACK=0 连接请求
当 SYN=1 ,ACK=1 连接接受 - FIN 被用来释放连接,它表示发送方已经没有数据要传输了,但是可以继续接收数据
7.
TCP中的流控(Flow control)使用一个可变长的滑动窗口来完成的
Window size – 告诉对方可以发送的数据字节数(从确认字节号开始(决定于接收方)
8.
Checksum –提供额外的可靠性
校验的范围包括头部、数据和概念性的伪头部
9.
选项域提供了一种增加基本头没有包含内容的方法
- 选项实例1
最重要的选项是允许每台主机指定他愿意接收的最大TCP净荷长度
使用大的数据段比使用小的数据段更高效
在连接建立阶段,每方可以在选项中宣布他的最大TCP净荷长度,并查看对方的给出的最大值;选择双方中宣布小的那个使用
缺省的值为 536 bytes,所有互联网主机默认为可以接受 536 +
20 = 556 bytes的数据段 - 选项实例2
对于高带宽、高延迟或两者兼备的线路,64kB窗口可能是一个问题
窗口尺度(Window scale)选项允许收发双方协商一个窗口尺度因子, 这个因子允许双方把窗口尺寸域向左移动至14位
因此窗口数可多达 2 30 字节,很多TCP都支持这个选项 - 选项实例3
RFC 1106中描述的另一个选项,现在广泛实现了,即使用选择性重传( selective repeat ),而不是回退n帧协议( go back n )
TCP是一个复杂的传输层协议,负责将TCP
数据段可靠地送达目的端。
TCP段格式
源端口、目的端口
序列号
确认号(ack控制位置位才有效)
六个控制位
窗口尺寸(流控)
s6-4 TCP 数据段的更多相关文章
- TCP数据段格式+UDP数据段格式详解
TCP 报文格式 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP 报文段的报头有 10 个必需的字段和 ...
- 详解TCP和UDP数据段的首部格式
TCP数据段的首部格式: 源端口号(16) 目的端口号(16) 序列号(32) 确认应答号(32) 数据偏移(4) 保留(6) 代码位(6) 窗口(16) 校验和(16) 紧急指针 选项(长度可变) ...
- TCP报文段首部详解
TCP虽然是面向字节流的,但是tcp传送的数据单元却是报文段,一个报文段分为首部和数据两部分,几乎TCP所有功能都从首部来体现,下面我们来详细的剖析下它的首部. (1):源端口与目标端口:分别写入源端 ...
- TCP报文格式和三次握手——三次握手三个tcp包(header+data),此外,TCP 报文段中的数据部分是可选的,在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。
from:https://blog.csdn.net/mary19920410/article/details/58030147 TCP报文是TCP层传输的数据单元,也叫报文段. 1.端口号:用来标识 ...
- 一个TCP报文段的数据部分最多为多少个字节,为什么
IP数据报的最大长度=2^16-1=65535(字节)TCP报文段的数据部分=IP数据报的最大长度-IP数据报的首部-TCP报文段的首部=65535-20-20=65495(字节) 一个tcp报文段的 ...
- 计算机网络(8)-----TCP报文段的首部格式
TCP报文段的首部格式 概述 TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节. 源端口和目标端口 各占2个字节,分别写入源端口号和目的端口号. 序列号 占4个字节,表示本报 ...
- 网络TCp数据的传输设计(黏包处理)
//1.该片为引用别人的文章:http://www.cnblogs.com/alon/archive/2009/04/16/1437599.html 解决TCP网络传输"粘包"问题 ...
- [转] TCP数据包重组实现分析
PS: 这个实现对于某些特定情况未必是最佳实现,可以用数组来代替队列来实现 参照TCP/IP详解第二卷24~29章,详细论述了TCP协议的实现,大概总结一下TCP如何向应用层保证数据包的正确性.可靠性 ...
- TCP数据包结构
源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程.目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应用进程.这两个值加上 IP 报头中的源主机 I ...
随机推荐
- iOS10以下版本不支持swiper
解决办法,降低swiper4*版本引用低版本如3.4.2可以兼容iOS8,
- CSS 布局术语
这一节的知识非常重要,它关系到能否做出漂亮的网站.下面的概念.术语需要好好理解. 构建块:CSS采用盒子模型来处理每个HTML元素.盒子可以是一个“块级”盒子,也可以是一个“内联”盒子. 包含元素:包 ...
- 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计
在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据 ...
- gson 入门使用
参考文章:https://www.cnblogs.com/majay/p/6336918.html Java 对象与 Json 之间的互相转换,用的比较多大是 Jackson 与 Gson 第一步:添 ...
- eclipse中的web项目部署路径
elipse添加了server之后,如果不对tomcat的部署路径做更改,则eclipse默认对工程的部署在 eclipse-workspace\.metadata.plugins\org.eclip ...
- 关于Linux 文件权限的思考
Linux文件系统每个文件分为inode和block,inode中包含一些基本信息(文件名,类型,长度,修改时间,权限等待),并且指向包含文件真实内容的block,而目录是文件的一种,其block的内 ...
- SQL数据库索引理解与应用【转贴--收藏】
SQL数据库中索引分为聚集索引(CLUSTERED)和非聚集索引(NONCLUSTERED)两种. 聚集索引确定表中数据的物理顺序,它就类似与电话簿,按照姓氏排列数据.由于聚集索引规定数据表中的物理顺 ...
- 【redis 学习系列】安装-配置-卸载Redis
一.安装 wget http://download.redis.io/releases/redis-3.0.7.tar.gz tar -zxf redis-.tar.gz ln -s redis- r ...
- 【CSS】Sticky Footer 布局
什么是 Sticky Footer 布局? Sticky Footer 布局是一种将 footer 吸附在底部的CSS布局. footer 可以是任意的元素,该布局会形成一种当内容不足,footer ...
- vue-cli 2.x脚手架build目录中的webpack.base.conf.js配置文件
此文章用来解释vue-cli脚手架build目录中的webpack.base.conf.js配置文件,适用于vue-cli 2.x版本 此配置文件是vue开发环境的wepack相关配置文件,主要用来处 ...