共计 2031 个字符,预计需要花费 6 分钟才能阅读完成。
TCP(Transmission Control Protocol)传输控制协议
IP 是无连贯的,疏忽网络上存在的一些问题,TCP 提供牢靠的面向连贯的通信,负责管制连贯的建设、断开、放弃等管理工作
- 首部格局
- 连贯
1 首部格局
没有示意包长度和数据长度的字段,可由 IP 层获知 TCP 的包长度,由 TCP 包长度可计算数据的长度
序列号 : 发送数据的地位
,每发送一次,就 累加
一次该数据 字节数
的大小
- 在
建设连贯
时由计算机生成的随机数
作为其初始值
,通过SYN 包传递
给接收端主机 - 将每转发过来的字节数累加到初始值上示意数据的地位
- 在建设连贯和断开连接时发送的 SYN 包和 FIN 包
不携带数据
,但也会作为一个字节数减少
对应的序列号
确认应答号 : 下一次
应该收到的 序列号
- 指已收到确认应答号前一位为止的数据
发送端收到
这个确认应答当前能够确认
在这个序号以前的数据都曾经被失常接管
了
数据偏移 :相似于 IPv4 数据报中的 首部长度
,单位为 4 字节,无可选项式值为5
,示意20 字节
保留:为当前扩大时应用,个别设置为 0
管制位
:8 位,从左至右:CWR、ECE、URG、ACK
、PSH、RST、SYN
、FIN
- CWR:告诉对方已将
拥塞窗口放大
ECE:告诉对方这边
网络有拥塞
CWR 与 ECE 都用于 IP 首部的 ECN 字段
- URG:示意包中有须要
紧急解决
的数据 ACK
:确认应答的字段变为无效除了最后建设连贯时的 SYN 包之外,该位必须设置为 1
- PSH:将收到的数据
立刻
传给下层利用协定 - RST:TCP
连贯
中呈现异样
,必须强制断开连接
SYN
:用于建设连贯SYN 为 1 时示意心愿建设连贯,并在其序列号的字段进行
序列号初始值设定
FIN
:为 1 时示意今后不再有数据发送,心愿断开连接
通信单方能够相互
替换 FIN 地位为 1 的 TCP 段
申请断开连接
单方又对对方的 FIN 包进行确认应答
当前就能够断开连接
主机在接管到 FIN 为 1 的 TCP 段后不会马上回复
一个 FIN 包,等缓冲区
所有数据都因胜利发送
而主动删除后再发
窗口大小:告诉从雷同 TCP 首部的确认应答号所指地位开始可能接管的数据大小
TCP 不容许发送超过窗口大小的数据,窗口为 0 时,能够发送窗口探测,理解最新窗口大小
校验和 :应用TCP 伪首部
进行校验和计算,确认收到的数据是正确的
- TCP 伪首部:32 位源 IP 地址 32 位指标 IP 地址 填充 协定号 TCP 包长度
- 首先
置 0
,以 16 位进行1 的补码和计算
,再将它们总和的 1 的补码和放入校验和字段 - 校验和字段保留着除本字段以外其余局部的和的补码值
- 因而在计算校验和字段在内的所有字段的 16 位和之后失去
16 位全为 1
,阐明收到的数据是正确的
紧急指针 :本报文段中紧急数据的指针
从数据局部的首位
到紧急指针
所批示的地位为止,这个区间为 紧急数据
选项 :用于进步 TCP 的 传输性能
,最大 40 字节
- 在建设连贯时决定最大段长度
- 窗口扩充
- 高速通信中对序列号的治理
- 抉择确认应答
2 连贯
- 连贯可靠性
- 建设与断开
2.1 连贯可靠性
通过 序列号 与确认应答 进步可靠性
在 TCP 中,当发送端的数据达到接管主机时,接收端主机会返回一个已收到音讯的告诉,该音讯成为 确认应答
(ACK)
肯定工夫内没有等到确认应答 :发送端能够认为数据曾经失落,进行 重发
即便产生丢包,任然可能保证数据可能达到对端,实现牢靠传输
返回数据失落:这样也会导致发送端没有收到确认应答,进行从新发送
确认应答提早达到 :会导致发送端屡次申请而后收到 反复的数据包
须要一种机制,能辨认曾经接收数据,又可能判断是否须要接管 – 通过序列号实现
序列号 + 确认应答:接收端查问接收数据 TCP 首部中的序列号和数据长度,将本人下一步应该接管的序列号作为确认应答返送回去
TCP 通过序列号和确认应答号实现牢靠传输
重发的工夫距离以往返工夫与偏差值的和为基准,是一直变换的,多次重发无确认应答会断开连接
2.2 建设连贯与断开
TCP 建设连贯须要 3 次
往返音讯,断开连接须要 4 次
往返音讯
也称为 TCP 的 3 次握手与 4 次握手
建设连贯
- 客户端 -> 服务端:发送
SYN
包申请建设连贯 - 客户端 <- 服务端:针对 SYN 确认应答
ACK
,并发送SYN
包申请连贯 客户端 -> 服务端:针对 SYN 确认应答
ACK
在建设连贯的过程中能够确认发送数据包的单位 – 正好是 IP 中不会被分片解决的最大数据长度
建设连贯后 TCP 以段为单位,每发一个段进行一次确认应答的解决,这样会导致网络性能降落
应用缓冲区实现 窗口
:确认应答不再以每个分段,而是更大的单位进行确认, 不必期待确认
可持续发送
- 窗口大小:无需期待确认应答而能够持续发送数据的最大值
缓冲区:长期保留收发数据的场合
之前是发
一个等一个
,当初是发一串等一串
重发管制
数据段失落 :接收端发送其余报文段时,会接管该报文
间断雷同的确认应答
当超过 3 次反复应答时,确认报文段失落,从新发送该报文段
断开连接
- 客户端 -> 服务端:发送
FIN
包申请断开连接 客户端 <- 服务端:针对 FIN 的确认应答
ACK
期待缓存区数据发送结束
- 客户端 <- 服务端:发送
FIN
包申请断开连接 - 客户端 -> 服务端:针对 FIN 的确认应答
ACK
一个连贯的建设与断开,失常过程至多须要来发送 7 个包能力实现