TCP数据段

  • Post author:
  • Post category:其他



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

  • 专门为了在不可靠的互联网络上提供可靠的端到端字节流而设计
  • TCP必须动态地适应不同的拓扑、带宽、延迟、分组大小和其它的参数,并且当有错误的时候,能够足够健壮

支持TCP的机器都有一个

TCP实体

,或者是用户进程或者是操作系统内核,都可以管理TCP流和跟IP层的接口

发方:封装→TCP实体接收本地进程的用户数据流,将其分割成不超过64kB的分片(实践中,通常分割成1460字节,以通过以太网传输)

收方:解封装→当包含TCP数据段的报文到达某台机器的时候,被提交给传输实体,传输实体将其重构出原始的字节流

  • TCP连接上的每个字节都有它自己独有的32位序列号
  • 收发双方的TCP实体以数据段的形式交换数据
  • 一个数据段包括20字节的头部(不包括可选项)和数据域(0或更多字节)




TCP数据段

TCP软件决定数据段的大小,有两个因素限制了数据段的长度:

  • TCP数据段必须适合IP的65515的载荷限制
  • 每个TCP数据段必须适合于下层网络的最大传输单元MTU(例如以太网载荷大小1500字节)
  • TCP使用的基本协议具有动态窗口大小的滑动窗口协议(sliding window protocol)

数据段格式



  1. 源端口(Source port)和目的端口(Destination port)

    :标明了一个连接的两个端点,用来跟踪同一时间内通过网络的不同会话,一般每个端口对应一个应用程序

  2. 序列号(Sequence number)

    :表示一个字节的编号,可以说每一个字节都有一个序列号,其中有一个非常特殊的序列号叫

    初始序列号(简称ISNs)




    它是随机产生的

  3. 确认号(Acknowledgement number)

    :期望接收的对方发过来的字节编号,在TCP里为了保证数据的可靠传递,采用了肯定确认机制、累计确认技术,这个时候就要用到确认号(例如确认号是500,就表示收到了发方发出的499、498等序列号的字节,下一次发方就可以从序列号为500的字节发数据过来)

  4. TCP段头长度(TCP header length)

    :4字节,含义跟IP的段头长度一样

  5. 保留字段


    (图片中灰色部分)

    :如其名,不过现在也逐步启用,例如用来做一些拥塞控制等等

  6. URG~FIN

    :6个控制比特(每个都用1bit表示)

  7. 窗口尺寸(Window size)

    :告诉对方可以发送的数据字节数(从确认字节号开始连续发送的字节总数),窗口尺寸的大小取决于接收方

  8. 校验和(Checksum)

    :和UDP中一样

  9. 紧急指针(Urgent pointer)

    :和URG控制位配合使用 指明了紧急数据


控制比特URG-FIN

  • URG:当紧急指针使用的时候,URG被置为1,而紧急指针是一个对于当前序列号的字节偏移量,标明紧急数据从哪里开始
  • ACK:1表示确认号有效,0表示确认号无效
  • PSH:表示这是带有PUSH标志的数据,接收方收到这样的数据,应该立刻送到上层,而不需要缓存它
  • RST:被用来重置一个已经混乱的连接
  • SYN:用在连接建立的过程里面,通常SYN和ACK一起指示了连接建立的某个环节
  • FIN:被用来释放连接,表示发送方已经没有数据要传输,但是可以继续接收数据



版权声明:本文为Jaihk662原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。