本章作为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. SQL SERVER分区详解(1-5)

    转自: (五)SQL Server分区自动化案例     (四)SQL Server分区管理     (三)索引分区知识详解     (二)SQL Server分区创建过程     (一)SQL Se ...

  2. 划分LUN

    划分LUN http://mp.weixin.qq.com/s?__biz=MzAwNzU3NzQ0MA==&mid=209842199&idx=1&sn=7d77fdf7a8 ...

  3. HTML5-CSS3-JavaScript(4)

    CSS3中 变形与动画相关属性 CSS3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的功能.CSS3的变形功能可以对HTML组件执行位移.旋转. ...

  4. [py][mx]xadmin注册切换主题功能和网站名称修改

    注册主题 这里将基础的设置放到users模块 users/adminx.py from xadmin import views class BaseSetting(object): enable_th ...

  5. scrapy 爬网站 显示 Filtered offsite request to 错误

    爬取zol 网站图片,无法抓取. 在 setting.py 文件中 设置 日志 记录等级 LOG_LEVEL= 'DEBUG' LOG_FILE ='log.txt' 查看日志 发现报 2015-11 ...

  6. POJ:1182 食物链(带权并查集)

    http://poj.org/problem?id=1182 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1 ...

  7. [LeetCode] 67. Add Binary_Easy tag: String

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  8. jmeter Bean Shell的使用(一)

    未经作者允许,禁止转载!!! Jmeter有哪些Bean Shell 定时器: BeanShell Timer 前置处理器:BeanShell PreProcessor 采样器: BeanShell ...

  9. Listener—监听器

    什么是监听器? 监听器是Web应用程序事件模型的一部分 监听器的作用? 1:Web应用中某些状态发生改变的时候会产生相应的事件: a)servletContext.HttpSession.Servle ...

  10. 1:4 UI标签和通用标签

          UI标签:负责用户界面输出的标签. 非标单:例如错误信息提示的标签 fielderror,actionerror,actionmessagr:系统错误消息的自动显示           通 ...