TCP协议

1 TCP协议基本概念(RFCs-793, 1122, 1323, 2018, 2581)

1.1 TCP协议的特点

  • 点对点
    • 一个发送方,一个接收方
  • 可靠的、按序的字节流
    • 可靠的:多种确保可靠性的机制
    • 字节流服务:8bit(1Byte)为最小单位构成的字节流
  • 流水线机制
    • TCP拥塞控制和流量控制机制
    • 设置窗口尺寸
  • 发送方/接收方缓存
  • 全双工(full-duplex)
    • 同一连接中能够传输双向数据流
  • 面向连接
    • 通信双方在发送数据之前必须建立连接
    • 连接状态只在连接的两端中维护,在沿途节点中并不维护状态
    • TCP连接包括:两台主机上的缓存、连接状态变量、socket等
  • 流量控制机制

这里写图片描述

1.2 套接字地址

  • TCP使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将TCP连接的端点称为插口(socket),或套接字、套接口。
  • 插口和端口、IP地址的关系是:
    这里写图片描述

1.3 TCP发送缓存、接收缓存及报文段简要示意图

这里写图片描述

这里写图片描述

这里写图片描述

  • TCP发送进程以字节流的形式传递数据,而接收进程也把数据作为字节流来接收,类似于假想的管道。UDP发送进程发送的数据报文都是独立的,因此UDP协议不是面向流的协议。
  • 缓存:数据流向的每一个方向上都有发送缓存和接收缓存两种缓存。
  • 在传输层向IP层发送数据时,要以分组为单位,而不是按字节流来发送,TCP协议把若干字节构成一个分组,我们可以把这样的分组称为报文段(segment),这种报文段不一定都一样长,可以几个字节,也可以是几千个字节。

1.4 字节号和序号

字节号

  • 以字节为单位
  • 字节号的定义范围为0~(2^32-1)
  • 编号机制:随机
  • 举例:假如随机号是1057,而要发送6000个字节,那么字节编号范围为1057~7056。

序号

  • 以字节为基础,TCP给每一个报文段指派一个序号
  • 每个报文段的序号就是在这个报文段中第一个字节数据的序号
  • 举例:比如TCP要传输6000个字节的文件,第一个字节的编号是10001,如果数据用5个报文段来发送,前4个报文段各携带1000字节的数据,最后一个报文段携带2000字节的数据。则各报文段序号如下:
    • 报文段1->序号:10001(字节号范围:10001~11000)
    • 报文段1->序号:11001(字节号范围:11001~12000)
    • 报文段1->序号:12001(字节号范围:12001~13000)
    • 报文段1->序号:13001(字节号范围:13001~14000)
    • 报文段1->序号:14001(字节号范围:14001~16000)

1.5 接收方如何处理乱序到达的Segment?

TCP规范中没有规定,由TCP的实现者做出决策。

2 TCP协议报文段格式

这里写图片描述

这里写图片描述

源端口和目的端口

  • 源端口和目的端口各占2字节
  • 端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现
  • 源端口一般为动态端口

序号字段

  • 序号字段占4字节
  • TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一字节的序号
  • 序列号指的是segment中第一个字节的编号,而不是segment的编号
  • 建立TCP连接时,双方随机选择序列号

确认号字段

  • 确认号占4字节
  • 是期望收到对方的下一个报文段的数据的第一个字节的序号
  • 累计确认:该序列号之前的所有字节均已被正确接收到

首部长度

  • 首部长度占4bit
  • 它指出TCP首部共有多少个4字节,首部长度可以在20~60字节之间。因此这个字段的值可以在5(5X4=20)至15(15X4=60)之间

保留字段

  • 保留字段占6bit
  • 保留为今后使用,但目前应置为0

紧急比特URG

  • 紧急比特URG占1bit
  • 当URG=1时,表明紧急指针字段有效
  • 它高速系统此报文段中有紧急数据,应当尽快传送(相当于高优先级的数据)

确认比特ACK

  • 确认比特ACK占1bit
  • 只有当ACK为1时确认号字段才有效。当ACK=0时,确认号无效

推送比特PSH(Push)

  • 推送比特PSH占1比特
  • 接收TCP收到推送比特置1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付

复位比特RST(Reset)

  • 复位比特RST占1比特
  • 当RST=1时,表明TCP连接中出现严重差错(如拒绝连接请求、异常中止连接、中止空闲连接等),必须释放连接,然后再重新建立运输连接

同步比特SYN

  • 同步比特SYN占1比特
  • 同步比特SYN置1,就表示这是一个连接请求或连接接收报文

终止比特FIN(Final)

  • 终止比特FIN占1比特
  • 用来释放一个连接。当FIN=1时,表明此报文段地发送端地数据已经发送完毕,并要求释放运输连接

窗口字段

  • 窗口字段占2个字节
  • 窗口字段用来控制对方发送地数据量,单位为字节
  • TCP连接地一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限

校验和

  • 校验和占2字节
  • 校验和字段检验的范围包括首部和数据这两部分
  • 在计算校验和时,要在TCP报文段的前面加上12字节的伪首部(IP地址)

紧急指针字段

  • 紧急指针字段占16bit
  • 紧急指针字段指出在本报中的紧急数据的最后一个字节的序号

选项

  • 选项字段长度可变,但不超过40个字节
  • TCP只规定了一种选项,即最大报文段长度:MSS(Maximum Segment Size)。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”
  • MSS是TCP报文段中的数据字段的最大长度
  • 数据字段加上TCP首部才等于整个的TCP报文段

填充

  • 填充字段是为了使整个首部的长度是4字节的整数倍

TCP报文抓包举例

这里写图片描述

3 TCP三次握手和四次释放过程

用三次握手建立TCP连接

这里写图片描述

TCP连接释放的过程

这里写图片描述

在第二次释放后,从 A 到 B 的连接就释放了,连接处于半关闭状态。相当于 A 向 B 说:“我已经没有数据要发送了。但你如果还发送数据,我仍接收。”

在第四次释放后,整个连接已经全部释放。

这里写图片描述

4 TCP确认机制

这里写图片描述

5 TCP窗口机制

这里写图片描述

修改记录


时间动作
2017.6.5首次上传

参考资料


深博 — 深博IT大讲堂 — 网络技术基础

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值