TCP(Transmission Control Protocol)传输控制协议

IP是无连贯的,疏忽网络上存在的一些问题,TCP提供牢靠的面向连贯的通信,负责管制连贯的建设、断开、放弃等管理工作

  1. 首部格局
  2. 连贯

1 首部格局


没有示意包长度和数据长度的字段,可由IP层获知TCP的包长度,由TCP包长度可计算数据的长度
序列号发送数据的地位,每发送一次,就累加一次该数据字节数的大小

  • 建设连贯时由计算机生成的随机数作为其初始值,通过SYN包传递给接收端主机
  • 将每转发过来的字节数累加到初始值上示意数据的地位
  • 在建设连贯和断开连接时发送的SYN包和FIN包不携带数据,但也会作为一个字节数减少对应的序列号

确认应答号下一次应该收到的序列号

  • 指已收到确认应答号前一位为止的数据
  • 发送端收到这个确认应答当前能够确认在这个序号以前的数据都曾经被失常接管

数据偏移:相似于IPv4数据报中的首部长度,单位为4字节,无可选项式值为5,示意20字节

保留:为当前扩大时应用,个别设置为0

管制位:8位,从左至右:CWR、ECE、URG、ACK、PSH、RST、SYNFIN

  • 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 连贯

  1. 连贯可靠性
  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个包能力实现