本章作为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. Mirror--如何在主库上增加文件

    由于各种原因,如磁盘不空不足,需要对主库增加数据库文件到其他磁盘上,而镜像服务器上没有对应盘符,很多人会选择删除镜像,重新完备还原来搭建镜像,这种方式耗时耗力. 在做此类操作时,需要对主服务器和镜像服 ...

  2. 003-redis-命令-key操作,字符串操作

    Redis 键(key) Redis 键命令用于管理 redis 的键. 序号 命令及描述 1 DEL key该命令用于在 key 存在时删除 key. 2 DUMP key 序列化给定 key ,并 ...

  3. visual studio code 的必装推荐插件plugin, vscode, vsc

    An Old Hope Theme     (theme, 推荐,且推荐它的 classic theme,安装后在颜色选项里选择,该插件的定制见文末) Cobalt2     (theme) Drac ...

  4. context、config

    Tomcat启动时已经创建了context,并使用它读取了web.xml中的参数,后台可以从context里获取参数 后台获取参数代码: ServletContext context = getSer ...

  5. Http请求中Content-Type和Accept讲解以及在Spring MVC中的应用

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在 ...

  6. discuz完善用户资料任务不能完成的解决方法

    再来吐槽下discuz. 虽然很很很不想用discuz,但是,,,,..便利性以及各种原因,还得使用. 问题:discuz-运营-任务-完善资料,,,,,,变更部分后无法完成任务. 解决方式如下 原因 ...

  7. Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(三)——H2,MyBatis集成

    1.配置h2,连接池,MyBatis Maven依赖: <!-- spring与数据库访问集成(非Hibernate) --> <dependency> <groupId ...

  8. linux常用命令:at 命令

    在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. 通过'添加任务计划'的一步步引导,则可建立一 ...

  9. java接口对接——调用别人接口推送数据

    实际开发中经常会遇到要和其他平台或系统对接的情况,实际操作就是互相调用别人的接口获取或者推送数据, 当我们调用别人接口推送数据时,需要对方给一个接口地址以及接口的规范文档,规范中要包括接口的明确入参及 ...

  10. 如何写出一个让人很难发现的bug?

    程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含bug. 那么如何写出一个让(坑)人(王)很(之)难(王)发现的bug呢? - 1 -新手开发+ ...