第17章 TCP:传输控制协议


17.1    引言

 

本章将介绍 TCP为应用层提供的服务,以及 TCP首部中的各个字段。随后的几章我们在了 解TCP的工作过程中将对这些字段作详细介绍。

对TCP 的介绍将由本章开始,并一直包括随后的  7 章。第 18章描述如何建立和终止一个 TCP连接,第 19和第 20章将了解正常的数据传输过程,包括交互使用(远程登录)和批量数 据传送(文件传输)。第 21章提供 TCP超时及重传的技术细节,第 22和第 23章将介绍两种其他 的定时器。最后,第 24章概述 TCP新的特性以及 TCP的性能。

17.2   TCP的服务

 

尽管TCP和UDP都使用相同的网络层( IP),TCP却向应用层提供与 UDP完全不同的服务。

TCP提供一种面向连接的、可靠的字节流服务。

面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TC P 连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在第 18章我们将看到一个TCP连接是如何建立的,以及当一方通信结束后如何断开连接。

在一个 TCP连接中,仅有两方进行彼此通信。在第 12章介绍的广播和多播不能用于 TCP。

TCP通过下列方式来提供可靠性:

•应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的 数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)(参见 图1-7)。在18.4节我们将看到TCP如何确定报文段的长度。

• 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。在第21章我们将了解TCP协议中自适应的超时 及重传策略。

•当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒,这将在19.3节讨论。

• TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输 过程中的任何变化。如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到 此报文段(希望发端超时并重发)。

•既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此 TCP报文段 的到达也可能会失序。如果必要, TCP将对收到的数据进行重新排序,将收到的数据以 正确的顺序交给应用层。

• 既然IP数据报会发生重复, TCP的接收端必须丢弃重复的数据。

• TCP 还能提供流量控制。 TCP连接的每一方都有固定大小的缓冲空间。 TCP的接收端只


17章   TCP:传输控制协议     171

下载

 

允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲

区溢出。

两个应用程序通过 TCP连接交换 8 bit 字节构成的字节流。TCP不在字节流中插入记录标识 符。我们将这称为字节流服务(bytestream service)。如果一方的应用程序先传10字节,又传

20字节,再传 50字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4次接 收这 8 0 个字节,每次接收 20 字节。一端将字节流放到TC P 连接上,同样的字节流将出现在 TCP连接的另一端。

另外, TCP对字节流的内容不作任何解释。 TCP不知道传输的数据字节流是二进制数据, 还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层 解释。

这种对字节流的处理方式与 Unix操作系统对文件的处理方式很相似。Unix的内核 对一个应用读或写的内容不作任何解释,而是交给应用程序处理。对Unix的内核来说, 它无法区分一个二进制文件与一个文本文件。

 

17.3   TCP的首部

 

TCP数据被封装在一个 IP数据报中,如图 17-1所示。

 

IP数据报

 

TCP报文段

 

 


IP首部


TCP首部                          TCP数据


 

20字节                    20字节

 

图17-1   TCP数据在IP数据报中的封装

图17-2显示TCP首部的数据格式。如果不计任选字段,它通常是 20个字节。

 

 

16位源端口号                                       16位目的端口号

 

32位序号

 


 

 

4位首部 长度


 

保留(6位)


32位确认序号

 

16位窗口大小


 


16位检验和


16位紧急指针


 

选项

 

 

数据

 

 

图17-2   TCP包首部


172   TCP/IP详解,卷1:协议

下载

 

每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加

上IP首部中的源端 IP地址和目的端 IP地址唯一确定一个 TCP连接。

有时,一个IP地址和一个端口号也称为一个插口(socket)。这个术语出现在最早的TCP 规范(RFC793)中,后来它也作为表示伯克利版的编程接口(参见1.15节)。插口对( socket pair)(包含客户 IP地址、客户端口号、服务器 IP地址和服务器端口号的四元组 )可唯一确定互 联网络中每个TCP连接的双方。

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

当建立一个新的连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN(InitialSequence Number)。该主机要发送数据的第一个字节序号为这个 ISN加1,因为SYN标志消耗了一个序号(将在下章详细介绍如何建立和终止连接,届时我们将看到 FIN标志 也要占用一个序号)。

既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。 因此,确认序号应当是上次已成功收到数据字节序号加  1。只有ACK标志(下面介绍)为1时 确认序号字段才有效。

发送ACK无需任何代价,因为32bit 的确认序号字段和 ACK标志一样,总是TCP首部的一 部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置,  ACK 标志也总是被设 置为1。

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

TCP可以表述为一个没有选择确认或否认的滑动窗口协议(滑动窗口协议用于数据传输将在20.3节介绍)。我们说TCP缺少选择确认是因为TCP首部中的确认序号表示发方已成功收到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。例如,如果 1~1024字节已经成功收到,下一报文段中包含序号从 2049~3072的字节,收端并不 能确认这个新的报文段。它所能做的就是发回一个确认序号为 1025的ACK。它也无法对一个 报文段进行否认。例如,如果收到包含1025~2048字节的报文段,但它的检验和错,TCP接 收端所能做的就是发回一个确认序号为 1025的ACK。在 21.7节我们将看到重复的确认如何帮 助确定分组已经丢失。

首部长度给出首部中32 bit 字的数目。需要这个值是因为任选字段的长度是可变的。这个字段占4 bit ,因此 TCP最多有60字节的首部。然而,没有任选字段,正常的长度是 20字节。

在TCP首部中有6个标志比特。它们中的多个可同时被设置为  1。我们在这儿简单介绍它 们的用法,在随后的章节中有更详细的介绍。

URG              紧急指针( urgent pointer)有效(见 20.8节)。

ACK              确认序号有效。

PSH               接收方应该尽快将这个报文段交给应用层。

RST               重建连接。

SYN               同步序号用来发起一个连接。这个标志和下一个标志将在第 18章介绍。

FIN                发端完成发送任务。


17章   TCP:传输控制协议     173

下载

 

TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始

于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个  16 bit 字段, 因而窗口大小最大为 65535字节。在 24.4节我们将看到新的窗口刻度选项,它允许这个值按比例变化以提供更大的窗口。

检验和覆盖了整个的TCP报文段: TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。TCP检验和的计算和UDP检验和的计算相似,使用 如11.3节所述的一个伪首部。

只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。我们将在20.8节介绍它。

最常见的可选字段是最长报文大小,又称为 MSS (Maximum Segment Size) 。每个连接方 通常都在通信的第一个报文段(为建立连接而设置 SYN标志的那个段)中指明这个选项。它指明本端所能接收的最大长度的报文段。我们将在18.4节更详细地介绍MSS选项,TCP的其他 选项中的一些将在第 24章中介绍。

从图17-2中我们注意到TCP报文段中的数据部分是可选的。我们将在 18章中看到在一个连 接建立和一个连接终止时,双方交换的报文段仅有  TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何 数据的报文段。

17.4   小结

 

TCP提供了一种可靠的面向连接的字节流运输层服务。我们简单地介绍了 TCP首部中的各 个字段,并在随后的几章里详细讨论它们。

TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据;  TCP 提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。

许多流行的应用程序如 Telnet、Rlogin、FTP和SMTP都使用 TCP。

习题

 

17.1  我们已经介绍了以下几种分组格式: IP、ICMP、IGMP、UDP和TCP。每一种格式的首 部中均包含一个检验和。对每种分组,说明检验和包括 IP数据报中的哪些部分,以及该 检验和是强制的还是可选的。

17.2  为什么我们已经讨论的所有Internet协议(IP,ICMP, IGMP, UDP, TCP)收到有检验和错 的分组都仅作丢弃处理?

17.3 TCP提供了一种字节流服务,而收发双方都不保持记录的边界。应用程序如何提供它们 自己的记录标识?

17.4   为什么在 TCP首部的开始便是源和目的的端口号?

17.5   为什么 TCP首部有一个首部长度字段而 UDP首部(图 11-2)中却没有?

TCP/IP详解--第十七章相关推荐

  1. TCP/IP详解--第五章

    第5章 RARP:逆地址解析协议 5.1   引言   具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取  I P地址.但是无盘机, 如X终端或无盘工作站,则需要采用其他方法来获得 IP地址. ...

  2. TCP/IP详解--第三章

    第3章 IP:网际协议 3.1    引言 IP是TCP/IP协议族中最为核心的协议.所有的 TCP.UDP.ICMP及IGMP数据都以 IP数据 报格式传输(见图 1-4).许多刚开始接触 TCP/ ...

  3. TCP/IP详解--第十一章

     第11章 UDP:用户数据报协议 11.1  引言   UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个  UDP .   数据报,并组装成一份待发送的  I P 数据报 ...

  4. TCP/IP详解--第七章

    第7章 Ping程序 7.1   引言   "ping"这个名字源于声纳定位操作.Ping程序由MikeMuuss 编写,目的是为了测试另一 台主机是否可达.该程序发送一份 IC ...

  5. TCP/IP详解--第四章

    第4章 ARP:地址解析协议 4.1   引言 本章我们要讨论的问题是只对 TCP/IP协议簇有意义的 IP 地址.数据链路如以太网或令牌 环网都有自己的寻址机制(常常为 48 bit 地址),这是使 ...

  6. TCP/IP详解笔记----第一章:概述

    第一章 概述 这一章主要介绍了TCP/IP的概貌.包括分层.网络地址.客户-服务器模型.常见知名应用层服务端口号等等.需要重点掌握和了解的是以下知识点. 1.TCP/IP的重要作用: 很多不同厂商生产 ...

  7. TCP/IP详解第一卷第一章重点摘要

    一.协议族 一系列相关协议的集合称为协议族 指定一个协议族中的各种协议之间的相互关系并划分需要完成的任务设计,称为协议族的体系结构或参考模型 二.TCP/IP TCP/IP是一个开放的系统,协议族定义 ...

  8. TCP/IP详解 第七章 防火墙和网络地址转换(1)

    一.引言 1.Internet和协议发展初期,仅用于大学和科研机构.处于没人攻击状态. 2.20世纪80.90年代,成功的攻击成了家常便饭.为了解决这个问题,引入了防火墙. Ø 了解防火墙 l 用一种 ...

  9. TCP/IP详解--第六章

    第6章 ICMP:Internet控制报文协议 6.1   引言   I C M P 经常被认为是 I P 层的一个组成部分.它传递差错报文以及其他需要注意的信息. ICMP报文通常被 IP 层或更高 ...

最新文章

  1. intent传递有没有大小限制,是多少?
  2. ML之FE:对pandas的dataframe中的类别型字段进行数字编码化(类别型特征数值化)并导出映射表daiding
  3. 基于Spark的Als算法+自迭代+Spark2.0新写法
  4. OAuth2.0 授权的工作原理
  5. 随机效应估算与固定效应估算_一般混合线性模型固定效应、随机效应与另一随机向量的联合估计...
  6. 【进阶2-3期】JavaScript深入之闭包面试题解
  7. MacBook搭建go语言开发环境
  8. android n 支持机型,Android N无缝更新功能不适于现有机型
  9. 静能沉淀浮躁,过滤浅薄,调节精神。 静能解读生命的安宁,拥有了然于心的平静。...
  10. 强化学习:2 马尔科夫决策过程
  11. 结组开发项目(TD学生助手)
  12. python自动答题助手_头脑王者python答题助手
  13. 几何图形计算器的设计与实现----课程设计任务书
  14. matlab排队系统仿真,MM1排队系统仿真matlab实验报告
  15. Centos 7/8 root密码重置
  16. 路由器刷OpenWRT实现动态dns
  17. Youtube下载神器YT
  18. 【关于听任大佬的讲话的深刻感悟】
  19. XSS及CSRF攻击防御
  20. Tomcat配置与调优

热门文章

  1. SCCM 2012系列4 配置SCCM2012 Endpoint Protection上
  2. 数据结构-算法: 分配排序(基数分配排序法)
  3. Swift 4.2正式发布
  4. Win7 VS2013环境编译Squirrel 3.0.7
  5. BZOJ 2197 [Usaco2011 Mar]Tree Decoration
  6. 去掉windows console application的dos显示
  7. 在Linux 下配置PHP 支援GD
  8. 【开源】Winform甘特日程控件GanttPlanner V1.0发布
  9. 书多嚼不烂,看书的方法
  10. Java软件架构师所要需的东西