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提供端到端的流量控制,并计算和验证一个强制性的端到端校验和。

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/xcywt/p/8387276.html
Copyright © 2011-2022 走看看