TCP 协议 の 简介

2017-04-09  本文已影响59人  LilacZiyun

TCP 协议简介

TCP 是一种 ** 面向连接 ** 的 ** 全双工 ** 的 ** 面向字节流 ** 的 ** 可靠数据传输 ** 的传输层协议。在一个TCP连接中,仅有两方进行彼此通信,广播和多播不能用于TCP。两个应用程序通过TCP连接交换 8 bit 字节构成的字节流。TCP不在字节流中插入记录标识符,将这称为字节流服务(byte stream service)。TCP对字节流的内容不作任何解释,TCP不知道传输的字节流数据的具体含义,对字节流的解释由TCP连接双方的应用层解释。

TCP 数据包封装在 IP 数据包中传输。TCP首部的数据格式,如果不计任选字段的话,通常是20个字节。TCP连接的端点为套接字(Socket)或插口。
** 套接字 = IP 地址:端口号,每一条TCP连接唯一地被通信两端的两个套接字所确定。 **

TCP 特点解读

  1. TCP是一个 ** 面向连接 ** 的传输层协议:基于TCP的应用层协议在传输数据前需要先建立TCP连接,在数据传输完成后需要断开TCP连接。
  2. TCP只能提供 ** 一对一服务 ** :TCP连接只能提供两方通信功能,广播和多播不能用于TCP。
  3. TCP提供 ** 可靠的数据交付 ** :通过TCP传输的数据,能够不丢失、不重复、无差错、按需到达接收方。
  4. TCP提供 ** 全双工通信 ** :TCP允许通信双方在同一个TCP 连接上同时收发数据。TCP连接的收发双方均设有数据缓存区,用于临时存放双方通信的数据。
  5. TCP是一个 ** 面向字节流 ** 的协议:虽然应用程序交付给TCP的数据是一次一个数据块,但TCP只会将这些数据块看作是一连串无结构的字节流序列。虽然TCP是面向字节流的协议,TCP传输的数据单元却是报文段。

TCP 内部机制

** 分割 ** : 应用数据被分割成 TCP 认为最适合发送的数据块,称为 TCP 报文段传递给 IP层。
** 序号 ** : TCP 连接中传送的数据流中的每一个字节都会编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
** 确认 ** : TCP 首部的确认号是期望收到对方的下一个报文段数据的第一个字节的序号。当数据发送出去之后, 发送方缓存区会继续存储那些已经发送但未收到确认的报文段,以便在需要的时候重传。TCP 默认使用累计确认,即 TCP 只确认数据流中至第一个丢失字节为止的字节。
** 重传 ** : 有两种事件会导致 TCP 对报文段进行重传:超时和冗余 ACK。

  1. ** 超时 ** : TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到期但还没有收到确认,就要重传这一报文段。
  2. ** 冗余 ACK ** (冗余确认): 冗余 ACK 就是再次确认某个报文段的 ACK,而发送方先前已经收到过该报文段的确认; TCP 规定当发送方收到对同一个报文段的 3 个冗余 ACK 时,就可以认为跟在这个被确认报文段之后的报文段已经丢失。
    ** 校验 ** : TCP 将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到端的校验和有差错,TCP 将丢弃这个报文段并且不确认(导致对方超时重传);
    ** 重排 ** : TCP 承载于 IP 数据报来传输,而 IP 数据报的到达可能会失序,因此 TCP 报文段的到达也可能会失序,TCP 将对收到的数据进行重新排序。
    ** 去重机制 ** : 因为 TCP 具有重传机制,所以收到的数据报会发生重复,TCP 的接收端会丢弃重复的数据。
    ** 流量控制 ** : TCP 提供流量控制,TCP 连接的每一方都有一定大小的缓冲空间。
    ** 拥塞控制 ** :TCP 提供拥塞控制,防止过多的数据注入到网络中,使网络中的路由器或链路不致过载。

TCP 报文结构

TCP报文结构

图片来源于谢希仁老师的计算机网络。

** 主要字段解读:**

** 参考:** 谢希仁老师的 《计算机网络》(第6版)

上一篇下一篇

猜你喜欢

热点阅读