本章作为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. 原生的强大DOM选择器querySelector - querySelector和querySelectorAll

    在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...

  2. github多人协同使用。

    点击 一:自己跟随别人的项目进行开发 1:首先登陆github,找到自己协同开发的项目. 例如:CrossMountain 的we-pay项目 ,点击  fork,该项目就在自己的账号下面了. 2:在 ...

  3. bootstrap modal插件弹出窗口如何限制最大高度,并且在内容过多时可以滚动显示

    .modal-body{ max-height:400px; overflow-y:auto; } 只有在modal-body类上限制高度才能起作用,其他地方的限制均不起作用

  4. [Leetcode] 336. Palindrome Pairs_Hard

    Given a list of unique words, find all pairs of distinct indices (i, j) in the given list, so that t ...

  5. iOS UI基础-3.0图片浏览器及plist使用

    需求: 1.显示当前图片序号/总图片数 2.显示图片 3.上一张图片.下一张图片转换 4.显示图片描述 下面用代码来实现 // // UYViewController.m // 3.0图片查看器 // ...

  6. 使用sys用户创建其他用户下的dblink

    因为dblink的创建和删除只能是它的所属用户来操作,所以我们无法直接使用sys用户创建其他用户下的dblink,当遇到有这样的需求时,可以先建立该用户下存储过程,再通过调用这个存储过程来间接实现. ...

  7. Leetcode: Binary Tree Level Order Transversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  8. mysql套接字文件

  9. JSP—内置对象

    JSP内置对象是Web容器创建的一组对象,不用声明,直接使用 out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page request 请求对象 类型 java ...

  10. python3 列表的常用方法

    Python3中常用的列表方法(method) 见:help(list) 方法 意义 L.index(v [, begin[, end]]) 返回对应元素的索引下标, begin为开始索引,end为结 ...