本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式。
TCP 最重要的特性:reliable.

17.1 引言

本章介绍的是 TCP为应用层提供的服务。

17.2 TCP的服务

TCP 提供一种 面向连接的,可靠的字节流服务。面向连接 意味着两个使用的TCP应用(eg. client-server)在彼此交换数据之前必须先建立一个TCP连接。
在一个 TCP 连接中,仅有两方进行彼此通信。

TCP 提供以下方式来提供可靠性:

(1) 由上一层发送的应用数据 被分割成 TCP 认为最合适发送的数据块。注意与UDP区别:UDP 甚至连 数据分片 都不放在心上。由 TCP 传递给 IP层的信息单位称作 段 或者 报文段(segment),因此,TCP 分割数据 的这一过程又称作:TCP分段。

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

(3) 当 TCP 收到来自连接另外一端的数据,它将发送一个确认(ACK),这个确认会推迟一点点时间发送。

(4) TCP 将保持它首部的 检验和,这是一个 端到端 的检验和,必须由 发送端计算,接收端验证 来实现。如果收到的检验和有差错,TCP 将丢弃这个报文,并发送不确认的应答,希望重新发送此报文段。

(5) TCP 报文段 选择 IP报文段 来传输,而 IP报文段 有可能在传输的过程中 失序,那么 TCP 会对接收的报文 利用序列号 进行重新排序,将正确的顺序交给应用层。

(6) TCP 提供流量控制 - 窗口机制。防止较快主机使得较慢主机的缓冲区溢出。

字节流服务

字节流服务:两个应用程序 提供TCP连接 交换 8 bit字节构成的字节流。TCP 不在字节中插入记录标识码。
一端将字节流放到 TCP连接 上,同样的字节流将出现在 TCP连接 的另外一端。
TCP 对字节流的内容 不做任何解释。字节流的内容可以是 ASCLL码 或者其他数据。对字节流的解释 交给 TCP连接双方的应用 解释。

17.3 TCP的首部

每个TCP段都包含 目的端口号和源端口号,用于寻找 发端和接收端应用程序。这两个值加上 IP数据报首部中的 源IP地址和目的端IP地址 唯一确定一个 TCP连接。

  • 有时,一个IP地址和一个端口号 也称为一个 插口(socket)。插口对(socket pair) 包含 目的端IP地址,源端IP地址,目的端端口号,源端端口号。插口对可以唯一确定每个TCP连接的双方。

序号用于标识从 TCP发送端 发往 TCP接收端 的数据字节流,表示在这个报文段的第一个数据字节。如果将字节流看做在两个应用程序之间的单向流动,则TCP用序号对每一个字节进行计数。序号是 32bit 的无序号数,序号到达 2^32-1 之后 又从0开始。

当建立一个新的连接的时候,SYN 标志变成1。序号字段包含 这个主机选择的 该连接的初始序号:ISN。该主机要发送数据的 第一个字节序号 为这个 ISN 加1(SYN标志消耗了一个序号)。

确认序号 包含 发送确认端 所期望收到的下一个序号。因此,确认序号 应该是上次成功接收到的数据字节的 序号+1。只有ACK标志为1时,确认序号字段才有用。

发送ACK 无需任何代价。

TCP为应用层提供:全双工服务。这意味着 数据能在两个方向上 独立的进行传输。因此在连接的每一端 都必须保持每个方向上的传输数据序号。

TCP 可以表述为 一个没有选择 确认或者否认 的滑动窗口协议。

  • 缺少选择确认 是因为 TCP 首部中的确认序号 表示发送方已成功收到数据,但是不能确认序号所指的字节。

在 TCP首部 中有6个标志比特。

  • URG 紧急指针有效
  • ACK 确认序号有效
  • PSH 接收方应该尽快把这个报文段交给应用层
  • PST 重新建立连接
  • SYN 同步序号 用来发起一个连接
  • FIN 发送端完成发送任务

TCP 流量控制 是通过连接的每一端通过声明的 窗口大小 来提供。窗口大小是字节数,起始于确认序号字段指明的值(接收端希望接收的字节)。

检验和 覆盖了TCP的首部和数据。

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

最常见的可选字段 是最长报文大小(MSS)。

TCP报文 的 数据部分 是可选的。

2016/8/8

【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议的更多相关文章

  1. TCP/IP详解 卷一(第十七章 TCP:传输控制协议)

    与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...

  2. TCP/IP详解 卷1 第十七章 TCP:传输控制协议

    17.2 TCP的服务 TCP提供了一种面向连接的.可靠的字节流服务.两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接. TCP通过下列方式来提供可靠性: 1)  应用数据被分割成TCP ...

  3. TCP/IP详解 卷一(第三章 IP:网际协议)

    IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...

  4. TCP/IP详解 卷一(第十三章 IGMP:Internet组管理协议)

    本章将介绍用于支持主机和路由器进行多播的Internet组管理协议(IGMP) 它让一个物理网络上的所有系统知道主机当前所在的多播组.多播路由器需要这些信息以便知道多播数据报应该向那些接口转发. 跟I ...

  5. TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)

    UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示

  6. TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)

    ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...

  7. TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

    建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...

  8. TCP/IP详解 卷1 第二十一章 TCP的超时与重传

    21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  10. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

随机推荐

  1. 关于找不到类org/apache/commons/lang/xwork/StringUtils的问题

    在替换最新版的 struts2包的解决过程中.遇到 找不到这两个包org/apache/commons/lang/xwork/StringUtils.org/apache/commons/lang/x ...

  2. SRM 619

    easy:  假设每堆石头不全为1,那么每次我们总能取一堆石头分给另外两堆,堆数-1.而且新的局面肯定有一堆的个数大于1. 于是,假设每堆石头数都为1 -> lose.否则的话推断堆数奇偶就可以 ...

  3. Spark Streaming性能优化: 如何在生产环境下应对流数据峰值巨变

    1.为什么引入Backpressure 默认情况下,Spark Streaming通过Receiver以生产者生产数据的速率接收数据,计算过程中会出现batch processing time > ...

  4. Kylin安装部署

    一.安装准备 1.操作系统 Centos 7.x 2.时间问题 集群内所有节点时间一定要同步. NTP.Chrony 3.用户 创建hadoop组和hadoop用户,并做ssh免密码登录 4.Hado ...

  5. [py][mx]django分页第三方模块django-pure-pagination

    前台的这些数据都是从后台取来的 分页模块django-pure-pagination - 一款基于django pagination封装的更好用的分页模块 https://github.com/jam ...

  6. HDU1010:Tempter of the Bone(dfs+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010   //题目链接 http://ycool.com/post/ymsvd2s//一个很好理解剪枝思想的博客 ...

  7. PAT 1020 Tree Traversals[二叉树遍历]

    1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...

  8. 修改class文件

    http://yucaifu1989.iteye.com/blog/1850500 http://blog.csdn.net/hexin373/article/details/6669813 使用ja ...

  9. http 之 HTTP_X_FORWARDED_FOR

    原文   http://www.imququ.com/post/x-forwarded-for-header-in-http.html 主题 HTTP Nginx 我一直认为,对于从事 Web 前端开 ...

  10. vue项目打包后css背景图路径不对的问题

    问题描述: 自己在自学vue做项目的过程中,遇到一个有关背景图片路径的问题,就是css代码中背景图片是根据相对路径来写的,如下图: 当使用npm run dev命令本地访问的时候,背景图片是正常显示的 ...