传输控制协议

 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 数据段相关推荐

  1. 详解TCP和UDP数据段的首部格式

    TCP数据段的首部格式: 源端口号(16) 目的端口号(16) 序列号(32) 确认应答号(32) 数据偏移(4) 保留(6) 代码位(6) 窗口(16) 校验和(16) 紧急指针 选项(长度可变) ...

  2. 数据段、数据报、数据包、帧的区别与联系

    帧与数据包 首先不容易理解的是数据包和帧. 数据包,就是从最上层,一层一层封装,直到网络层的,最后借由数据链路层发送出去的数据单元. 帧,是数据链路层的传输单元. 这么一看,数据包和帧好像没什么不一样 ...

  3. TCP报文格式和三次握手——三次握手三个tcp包(header+data),此外,TCP 报文段中的数据部分是可选的,在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。...

    from:https://blog.csdn.net/mary19920410/article/details/58030147 TCP报文是TCP层传输的数据单元,也叫报文段. 1.端口号:用来标识 ...

  4. TCP报文段的数据长度是如何计算得到的

    TCP/IP结构分析 应用层把数据传给运输层,也就是给TCP协议.来自应用层的数据会被分割为MSS的大小,放到如下图的数据部分. TCP报文段发送给网络层,也就是给IP协议.需要在TCP报文段的外面再 ...

  5. TCP协议的特点和TCP报文段格式

    参考:https://www.bilibili.com/video/BV19E411D78Q?p=62 传送数据之前必须建立连接,数据传送结束后要释放连接.不提供广播或多播服务.由于TCP要提 供可靠 ...

  6. 串口发送tcp数据 源端口号_三分钟基础知识:用动画给面试官解释 TCP 三次握手过程...

    作者 |  小鹿 来源 |  小鹿动画学编程 写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐. 对于这部分掌握以及 TC ...

  7. 【计算机网络】传输层 : TCP 协议 ( TCP 协议特点 | TCP 报文段首部格式 | TCP 报文段控制位 )

    文章目录 一.TCP 协议 特点 二.TCP 报文段首部格式 三.TCP 报文段首部 666 控制位 一.TCP 协议 特点 TCP 协议 特点 : ① 面向连接 : TCP 协议的连接是 " ...

  8. linux 内核 发送数据,linux 内核tcp数据发送的实现

    在分析之前先来看下SO_RCVTIMEO和SO_SNDTIMEO套接口吧,前面分析代码时没太注意这两个.这里算是个补充. SO_RCVTIMEO和SO_SNDTIMEO套接口选项可以给套接口的读和写, ...

  9. TCP报文段首部格式详解

    TCP首部格式 格式字段详解 源端口.目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要 ...

最新文章

  1. 个推数据统计产品(个数)iOS集成实践
  2. CSS3学习手记(1) 选择器
  3. python线性回归模型预处理_线性回归-2 数据预处理与模型验证评估
  4. git 获取远程分支到本地_如何将git本地仓库上传到远程仓库?
  5. java泛型 算法_非常具体的Java泛型问题 – 如何返回传递给方法的相同类型?
  6. Tautology(poj3295)(DFS)
  7. TortoiseGit 客户端安装及使用
  8. 什么样的项目经历会让面试官眼前一亮
  9. 二叉树经典题之二叉树最近公共祖先(LeetCode)
  10. 【ElasticSearch】es Elasticsearch压测实战 II esrally 进阶实战 笔记
  11. 推荐一款在线工具-程序员的工具箱
  12. Java——aaa是文件夹,里面有bbb.txt,ccc.txt,ddd.txt这些文件,有eee这样的文件夹,eee中有fff.txt和ggg.txt,打印出层级来
  13. Xposed小白入门,动态修改IMEI实例代码
  14. 【文件管理】-如何规范文件及文件夹命名
  15. Threejs实现模拟管道液体流动
  16. 大数据面前,统计学的价值在哪里
  17. 二维码图片生成 hutool
  18. java小游戏-飞翔的小鸟
  19. 西门子HMI使用全局区域指针画面号实现画面跳转
  20. 嫦娥五号返回器携带月壤成功着陆地球!一文读懂你关心的六大问题

热门文章

  1. python qcut_Python之Pandas库学习(三):数据处理
  2. python应用于期货_Python期货量化交易基础教程(17)
  3. bootstrap 栅栏剧中_Bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法...
  4. 计算机操作鉴定所需设备,计算机操作员职业技能鉴定标准(高级)
  5. 计算机网络-基本概念(7)【网络层】-多协议标记交换MPLS
  6. 【Python面试】 说说Python模块主要分哪三类?
  7. python加载函数包_Python wrapt包_程序模块 - PyPI - Python中文网
  8. python中横向制表符_Python-“缩进中的制表符和空格使用不一致”
  9. initializing mysql database:_安装MySQL 出现initializing database安装失败解决办法
  10. 2019年暑假慈溪集训(更新ing)