TCP/IP第四层协议TCP(一)

toc

TCP协议

TCP提供了一种面向连接的、可靠的字节流服务。
需要通过TCP通信的双方必须建立一条TCP连接,并且仅支持建立连接的双方一对一的进行通信,广播与多播并不能用于TCP
TCP是面向字节流的协议,应用程序的数据被分割成TCP认为最合适的大小的发送数据块

可靠性的保证

TCP的可靠性由下面的七种方式保证

  1. 序列号
    由于TCP报文段以IP数据报来传输的
    • 可能出现乱序问题,通过对数据包排序,接收端能正确处理好乱序问题。
    • 可能出现重复数据,通过序列号可以使接收端丢弃重复的数据,能避免重复数据
    • 可能丢失数据,通过序列号可以知道是哪个数据包在传输的过程中丢失了。
  2. 校验和
    TCP提供覆盖首部和数据部分的校验和
  3. 超时重传
    当发送端发出一个报文段后,会启动一个定时器(重传定时器),等待接收端对这个报文段的确认,如果在超时时间内不能收到确认,则重传该报文段
  4. 确认应答(ack)
    当TCP接收端收到发送端的报文段后,它会发送一个确认。但这个确认通常不是立即发送的,而是会有一个延迟,并且当三次重传同一ACK时,就执行快速恢复
  5. 连接管理
    收发双方通过三次握手、四次挥手来建立、断开一个连接,并且各自有一个状态机来维护这一个连接。
  6. 流量控制
    接受端有一个固定大小的缓冲区,TCP根据接收端的处理能力来决定发送端发送的速度,以防止发送端发送过快导致的接收端缓冲区溢出
  7. 拥塞控制
    通过发送端对网络情况的探查,控制发送端发送的数量,防止过多的数据发送到网络中导致网络过载而丢包。

协议格式



TCP包首部通常是20字节,选项部分最多不超过40字节(和IP首部一样):

  • 16位源端口号:发送进程端口号
  • 16位目标端口号:接收进程端口号
    • 每个TCP首部都包含源端口号与目标端口号,用于对应发送进程与接收进程,这两个端口号再加上IP首部中的源IP地址与目标IP地址可以唯一的确定一条连接,并可以唯一确定一条TCP连接的双方。
    • 一个端口号和一个IP地址被称为一个插口(socke)或插口对(socke pair)
  • 32位序号:序号用来标识从TCP发送端向TCP收接收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32bit的无符号数,序号到达2^32-1后又从0开始。
    • SYN标志会消耗一个序号,FIN标志也会消耗一个序号。
  • 32位确认序号:确认序号应当是上次已成功收到数据(成功接收并且校验和正确)字节序号加1。只有ACK标志为1时确认序号字段才有效。
    • 发送ACK无需任何代价,因为32bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
    • TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
  • 4位首部长度:首部长度指的是首部占32bit字的数目,包括任何选项。它是一个4比特字段,当4个比特全为1时,即1111(十进制为15)时,首部长度可达最长的60个字节。
  • 6个比特标志位:
URG
紧急指针(urgentpointer)有效
ACK
确认序号有效
PSH
接收方应该尽快将这个报文段交给应用层,而不是等待判断是否有额外的数据到达
RST
重建连接
SYN
同步序号,用来发起一个连接
FIN
发端完成发送任务
  • 16位窗口大小:可能是通告窗口或是拥塞窗口,由该TCP是接收端或发送端来决定。窗口最大为65535字节。
  • 16位校验和:同时覆盖TCP首部和数据的校验和,由发端计算和存储,并由收端进行验证。
  • 16位紧急指针:只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
  • 可选项:最常见的可选字段是最长报文大小,又称为MSS(MaximumSegmentSize)。每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项。它指明本端所能接收的最大长度的报文段。
  • 数据部分:TCP报文段中的数据部分是可选的。
    • 在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。
    • 如果一方没有数据要发送,使用没有任何数据的首部来确认收到的数据。
    • 在处理超时的许多情况中,也会发送不带任何数据的报文段。




原创不易,转载请注明出处,谢谢
原文地址:https://www.cnblogs.com/Keeping-Fit/p/13994512.html