zoukankan      html  css  js  c++  java
  • TCP/IP详解 卷1 第十七章 TCP:传输控制协议

    17.2 TCP的服务

    TCP提供了一种面向连接的、可靠的字节流服务。两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接。

    TCP通过下列方式来提供可靠性:

    1)  应用数据被分割成TCP认为最合适发送的数据块

    2)  当TCP发送一个段后,它会启动一个定时器,等待目的端确认。如果不能及时收到确认,将重发这个报文段。

    3)  TCP收到数据后,它会发送一个确认。这个确认不是立即发送的,通常会推迟几分之一秒

    4)  TCP将保持它首部和数据的校验和。(这是一个端到端的校验和,如果收到段的检验有错误,TCP将丢弃这个报文也不进行确认,这就会导致超时重传)

    5)  TCP报文段作为IP数据报来传输,IP数据报的到达可能会失序。tcp段也就有可能会失序。所以TCP将对收到的数据进行重新排序,以正确的顺序将数据传给应用层。

    6)  IP数据报会重复,TCP的接收端必须丢弃重复的数据

    7)  TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出

    另外、TCP对字节流的内容不作任何解释。对字节流的解释由TCP 连接双发的应用层解释。

    17.3 TCP的首部

    TCP数据被封装在一个IP数据报中,如下:

     

    下面是TCP首部的数据格式,如果不及任选字段,它通常是20个字节:

     

    源端口和目的端口:用于寻找发端和收端应用进程。(再加上IP首部中源端目的端IP地址就可以唯一确定一个TCP连接)

    序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。

    确认序号:包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1.(只在ACK标志为1 时确认号才有效)

    首部长度:首部中32bit字的数目。4位,最多就是15*4 = 60bit。没有任选字段时,正常长度是20字节。

    6个标志比特:它们中的多个可以同时被设置为1,这里先简单说明:URG(紧急指针)、ACK(确认序号有效)、PSH(接收方应该尽快将这个报文交给应用层)、RST(重建连接)、SYN(发起连接)、FIN(发送端完成发送任务)。

    16位的窗口大小:用于TCP的流量控制,窗口大小为字节数,起始于确认序号字段指明的值。

    16位的校验和:校验和覆盖了整个的TCP报文段:TCP首部和TCP数据。这是一个强制性字段,一定是由发端计算,收端验证

    16位的紧急指针:只有在URG标志为1时才有效。这是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号

    选项:最常见的可选字段是最长报文大小MSS。每个连接方通常都在通信的第一个报文段(连接时设置SYN的那个段)中指明这个选项,它表示本端所能接收的最大长度的报文段。

    17.4 小结

    TCP将用户数据打包成报文段:它发送数据后启动一个定时器;

    另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复的数据

    tcp提供端到端的流量控制,并计算和验证一个强制性的端到端校验和。

  • 相关阅读:
    智能资产构建去中心化的资产管理系统
    以太坊—开放的智能合约完整解决方案
    去中心化的域名系统Namecoin
    bootstrap-内联文本元素-小号文本
    MySQL重新初始化安装数据库
    MySQL重新初始化安装数据库
    MySQL重新初始化安装数据库
    MySQL重新初始化安装数据库
    PHP模拟登录并获取数据
    PHP模拟登录并获取数据
  • 原文地址:https://www.cnblogs.com/xcywt/p/8387276.html
Copyright © 2011-2022 走看看