TCP提供的服务和首部详解

TCP提供的服务和首部详解

TCP是一个面向连接的、可靠的字节流传输协议。

  • 面向连接:两个TCP应用在传输数据前必须建立连接。就像打电话一样。也就是在一个连接中传输的数据是有关系状态的,比如需要确定传输的对端正处在等待发送或接收的状态上
  • 可靠:主要是指数据在传输过程中不会被损坏或者丢失或乱序,保证数据可以正确到达。
  • 字节流:数据以字节流的形式传递给接收者的,没有固有的”报文”或”报文边界”的概念。即读取TCP数据就像从串行端口读取数据一样–无法预先得知在一次指定的读调用中会返回多少字节

TCP实现可靠性的一些手段:

  • 分段:应用数据会被分割成TCP认为最适合发送的数据块
  • 重传:当TCP发送一个段后,启动一个定时器,开始等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。
  • 确认:TCP收到发自TCP连接一端的数据,会发送一个确认。(这个确认不是立刻发,而是稍微推迟几分之一秒(目的是为了减少发送的ACK数量))
  • 校验和:TCP首部和数据部都有校验和,用来检测数据是否正确传输,如果校验和出错则直接丢弃该报文段并再次请求该报文
  • 有序:TCP会对收到的的数据进行重新排序,将收到的数据按照正确顺序传递给应用层
  • 去重:IP数据包可能会重复,TCP接收端将丢弃重复数据
  • 流量控制:接收端和发送端都有对应的缓冲空间,只发送接收端能容纳的数据量大小。防止较快主机使较慢主机缓冲区溢出
  • 拥塞控制:用于应对复杂的网络环境,通过拥塞控制实现

TCP的数据标识:

TCP的每个段都包含源端和目的端的端口号,用于确认收发应用进程。同时包含源端和目的端的IP号,用于标识主机。

<客户IP,客户port,服务器IP,服务器port>

TCP在IP数据报中的封装:

|   IP首部   |    TCP首部   |        TCP数据        |
	20字节		20字节		

TCP的头部解析:
在这里插入图片描述

  • 源和目的端口号用来标识发送和接收的应用
  • 序列号:用来标识从TCP发端向TCP接收端发送的数据字节流,它表示的是这个报文段的第一个数据字节
  • 确认序号:包含发送确认的一端所期望收到的下一个序号。确认序列号应当是上次成功接收到的数据字节序号+1,ACK标志为1时确认序列字段有效
  • ACK:该位为 1 时,表示 确认应答的字段为有效
  • RST:该位为 1时,表示 TCP 连接中出现异常必须强制断开连接
  • SYN:该位为 1 时,表示是要建立连接,进行初始化序列号,在其 序列号的字段进行序列号初始值的设定
  • FIN:该位为 1 时,表示发送方不再进行数据发送,要断开连接
  • URG:紧急指针有效
  • 窗口大小:实现流量控制的关键,发送方根据收到的窗口大小的值调整自己的发送速率
  • 校验和:由发送端填充,接收端对tcp报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏
    和:由发送端填充,接收端对tcp报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏

猜你喜欢

转载自blog.csdn.net/dingdingdodo/article/details/107210467