当前课程知识点:计算机网络 >  第五章 运输层 >  5.2 TCP报文段首部格式 >  TCP报文段首部格式

返回《计算机网络》慕课在线视频课程列表

TCP报文段首部格式在线视频

下一节:可靠传输工作原理

返回《计算机网络》慕课在线视频列表

TCP报文段首部格式课程教案、知识点、字幕

今天讲解TCP报文段首部格式

第一部分内容

TCP虽然是面向字节流的

但TCP传送的数据单元却是报文段

一个TCP报文段分为首部和数据两部分

而TCP的全部功能

体现在它首部中的各字段的作用

因此

需要详细了解一下

TCP首部各字段的作用

下面讨论一下TCP报文段首部格式

TCP报文段首部

一个TCP报文段

分为首部和数据两部分

而TCP的全部功能都体现在它

首部中各字段的作用

TCP报文段首部的前20个字节是固定的

后面有4n个字节

是根据需要而增加的选项

n是整数倍

因此TCP首部的最小长度是20字节

1.源端口和目的端口

源端口和目的端口字段

各占2个字节

端口是运输层与应用层的服务接口

运输层的复用和分用功能

都要通过端口号才能实现

2.序号

(1)占4个字节

序号范围是0到2^32 - 1

共2^32个序号

序号增加到2^32-1后

下一个序号就又要回到0了

TCP是面向字节流的

在一个TCP连接中

传送的字节流中的

每一个字节都按顺序编号

整个要传送的字节流的

起始序号必须在连接建立时设置好

(2)首部中的序号字段

这个则是指

本报文段所发送的数据的

第一个字节的序号

例如

一报文段的序号是501

而待接收的数据共有100字节

这就表明

本报文段的数据的

第一个字节的序号是501

最后一个字节的序号是600

显然

下一个报文段的序号应该从601开始

即下一个报文段的序号字段值应为601

这个字段的序号也叫“报文段序号”

3.确认号

占4个字节

是期望收到对方下一个报文段的

第一个数据字节的序号

例如

B正确收到了A

发送过来的一个报文段

其序号的字段值是501

而数据长度是200个字节

即序号是从501到700

这表明B正确收到了A发送到的

序号700为止的数据

因此

B期望收到A的下一个数据序号是701

于是B在发送给A的确认报文段中

把确认号置为701

要注意的是

现在确认号不是501

也不是700

而是701

总之如果确认号为 N

则表明到序号N-1为止的

所有数据都已经正确收到

4. 数据偏移

这个占4位

它指出TCP报文段的

数据起始处

距离TCP报文段的起始处有多远

这个字段实际上是指出

TCP报文段的首部长度

由于首部中还有长度不确定的选项字段

因此数据偏移字段是必要的

但应该注意

数据偏移字段的单位是32位字

即以4字节的字为计算单位

由于4位二进制

最大能表示的数是15

因此数据偏移的最大值是60字节

这也是TCP首部的最大字节

也就是说

选项长度不能超过40个字节

5. 保留字段

这个字段占6位

保留为今后使用

但目前应置为0

接着下面有6个控制位

用来说明本报文段的性质

第六个字段

紧急URG字段

当URG等于1时

表明紧急指针字段有效

它告诉系统此报文段中有紧急数据

应尽快发送

也就是相当于高优先级别的数据

而不要按原来的排队顺序来传送

例如

如果已经发送了很长的一个程序

要在远地的主机上运行

但后来发现了一些问题

需要取消该程序的运行

因此用户会从键盘发出中断命令

如果此时不使用紧急数据

那么这两个字符将存储在

接收TCP的缓存末尾

只有在所有的数据被处理完毕后

这两个字符才被交付接收方的应用进程

这样做就浪费了很多时间

当UDP置为1时

发送应用进程

就告诉发送方的TCP

我这有紧急数据要传送

于是发送方TCP

就把紧急数据插入到

本报文段数据的最前面

而在紧急数据后面的数据

仍然是普通数据

这时要与首部中紧急字段指针配合使用

7. 确认ACK位

仅当ACK等于1时

确认字段才有效

当ACK等于0时

我们认为确认号是无效的

TCP规定

在连接建立后

所有的传送的报文段

都必须把ACK置为1

8. 推送PSH位

当两个应用进程进行交互式的通信时

有时在一端的应用进程

希望在键入一个命令后

立刻就能收到对方的响应

在这种情况下

TCP就可以使用推送操作

这时发送方TCP把PSH置为1

并立即创建一个报文段发送出去

而接收方TCP

收到PSH等于1的报文的时候

就尽快地交付接收应用进程

而不再等到整个缓存区

都填满了后再向上交付

9. 复位RST位

当RST等于1时

表明TCP连接中出现了严重错误

如果由于主机崩溃或其他原因造成

此时我们必须释放连接

然后再重新创建传输连接

RST置为1

还用来拒绝一个非法的报文段

或拒绝打开一个连接

10. 同步SYN位

在建立连接时用来同步序号的

当SYN等于1而ACK等于0时

表明这是一个连接请求报文段

对方若同意建立连接

则应在响应的报文段中

使用SYN等于1和ACK等于1

因此SYN置为1就表示

这是一个连接请求或连接接受报文

11. FIN位

这个是用来释放一个连接的

当FIN等于1的时候

表明此报文段的发送的数据

已经发送完毕

并要求释放运输连接

12 窗口

窗口占2个字节

窗口值是(0,2^16-1)之间的一个整数

窗口值是接收方告诉发送方

从本报文段首部中的确认号算起

接收方目前允许对方发送的数据量

以字节为单位计算

之所以要有这个限制

是因为接收方的数据缓存空间是有限的

窗口值作为接收方

让发送方设置其发送窗口的依据

例如 发送方发送了一个报文段

其确认号是701 窗口字段是1000

这就是告诉发送方

从701算起

我(即接收报文段的一方)的接收缓存空间

还可再接受1000个字节的数据

其字节序号是701~1700

你在给我发数据时必须考虑到这一点

总之 窗口字段明确指出了

现在允许对方发送的数据量

并且窗口值经常在动态变化

13 检验和

这个字段占2字节

检验和字段检验的范围

包括首部和数据这两个部分

和UDP用户数据报一样

在计算检验和时

要在TCP报文段的前面

加上12个字节的伪首部

伪首部的格式

和UDP用户数据报的伪首部一样

但应把伪首部第4个字段中的17改为6

这是由于TCP的协议号是6

把第5字段中的UDP中的长度改为TCP长度

接收方收到此报文段后

仍要加上这个伪首部来计算检验和

若使用的是IPV6协议

则相应的伪首部也要进行改变

14 紧急指针

这个字段占2个字节

紧急指针仅在URG=1时才有意义

它指出本报文段中的紧急数据的字节数

因此 在紧急指针指出了

紧急数据的末尾在报文段中的位置

当所有紧急数据都处理完毕时

TCP就告诉应用程序恢复到正常操作

值得注意的是

即使窗口为0时也可以发送紧急数据

15 选项

长度可变 最长可达4字节

当没有使用“选项”时

TCP的首部长度是20字节

TCP最初只规定了一种选项

即最大报文段长度MSS

注意MSS这个名词含义

MSS是每一个TCP报文段中的

数据字段的最大长度

数据字段加上TCP首部

才等于整个的TCP报文段

所以MSS并不是整个TCP报文段的最大长度

而是TCP报文段长度减去TCP首部长度的值

为什么要规定一个最大报文长度MSS呢

这并不是考虑接受方的接收缓存

可能存放不下TCP报文段中的数据

实际上 MSS与接收窗口值没有关系

我们知道 TCP报文段的数据部分

至少要加上40字节的首部

TCP首部20字节和IP首部20字节

这样才能组装成一个IP数据报

若选择较小的MSS长度

那么网络的利用率就大大降低

设想在极端情况下

当一个TCP报文段只含有1个字节的数据时

在IP层传输的数据报的开销至少有40字节

包括TCP报文段的首部和IP数据报的首部

这样 对网络的利用率就不会超过1/41

到了数据链路层还要加上一些开销

但反过来 若TCP报文段非常长

那么在IP层传输时

就有可能要分解成多个短数据报片

在终点要把收到的各个短数据报片

组成原来的TCP报文段

当传输出错时还要进行重传

这些也都会使开销急剧增大

所以为了提高对网络的利用率

减少传输的开销

因此 MSS应尽可能大些

只要在IP层传输时不需要分片就行

由于IP数据报所经历的路径是动态变化的

因此在这条路径上确定的

不需要的分片的MSS

如果改走另一条路径就可能需要进行分片

因此最佳的MSS是很难确定的

在连接过程中

双方都把自己能够支持的MSS写入这一字段

以后就按照这个数值传输数据

两个传送方向可以有不同的MSS值

若主机未填写这一项

则MSS的默认字段是536个字节长度

因此 所有在互联网上的主机

都应该接受的报文段长度是

536+20也就是556个字节

窗口扩大选项

它的作用是为了扩大窗口

我们知道

TCP首部中窗口字段长度是16位

因此最大的窗口大小为64K字节

虽然这对早期的网络是足够用的

但对于包含卫星信道的网络

传播时延和带宽都是很大的

要获得高吞吐量需要更大的窗口大小

窗口扩大选项占用3个字节

其中有一个字节表示移位值S

新的窗口值等于TCP首部中的

窗口位数从16增大到16+S

移位值允许使用的最大值是14

相当于窗口最大值增大到2^(16+14-1)

也就是2^29

窗口扩大选项可以在

双方初始建立TCP连接时进行协商

如果连接的某一端实现了窗口扩大

当它不再需要扩大其窗口时

可发送S=0选项

使窗口大小回到16

时间戳选项

这个选项占用10个字节

其中最主要的字段是时间戳字段

占用4字节

和时间戳回送回答字段

同样占用4字节

时间戳选项有以下两个概念

第一 用来计算往返时间RTT

发送方在发送报文段时

把当前时钟的时间值放入时间戳字段

接收方在确认该报文段时

把时间戳字段复制到时间戳回送回答字段

因此 发送方在收到确认报文后

可以准确地计算出RTT来

第二 用于处理TCP序号超过2^32的情况

这又称为防止序号绕回PAWS

我们知道 TCP报文段的序号只有32位

而每增加2^32个序号

就会重复使用原来用过的序号

当使用高速网络时

在一次TCP连接的数据传送中

序号很可能被重复使用

例如 当使用1.5Mbit/s的速度

发送报文段时

序号重复要6小时以上

但若用2.5Gbit/s的速率发送报文段

则不到14秒钟序号就会重复

为了使接收方能够把新的报文段

和迟到很久的报文段区分开

则可以在报文段中加上这种时间戳

16 填充字段

这是为了使整个首部长度

是4字节的整数倍进行填0操作

以上是TCP报文段首部格式(2)单元内容

计算机网络课程列表:

第一章 概述

-1.1 计算机网络的发展历程及其在信息时代中的作用

--计算机网络的发展历程及其在信息时代中的作用

-1.2 互联网的组成

--互联网的组成

-1.3 电路交换和分组交换

--电路交换和分组交换

-1.4 计算机网络的性能

--计算机网络的性能

-1.5 计算机网络体系结构和层次划分

--计算机网络体系结构和层次划分

-第一章

第二章 物理层

-2.1 数据通信系统模型

--数据通信系统模型

-2.2 导向型传输媒体

--导向型传输媒体

-2.3 光导纤维

--光导纤维

-2.4 非导向型传输媒体

--非导向型传输媒体

-2.5 信道的极限容量

--信道的极限容量

-2.6 信道复用技术

--信道复用技术

-2.7 ADSL

--ADSL

-第二章

第三章 数据链路层

-3.1 数据链路层的三个基本问题

--数据链路层的三个基本问题

-3.2 CSMA/CD协议

--CSMA/CD协议

-3.3 虚拟局域网

--虚拟局域网

-3.4 扩展的以太网

--扩展的以太网

-3.5 高速以太网

--高速以太网

-第三章

第四章 网络层

-4.1 分类的IP地址-划分子网

--分类的IP地址-划分子网

-4.2 无分类编址-构造超网

--无分类编址-构造超网

-4.3 ICMP协议

--ICMP协议

-4.4 路由器结构

--路由器结构

-4.5 RIP协议

--RIP协议

-4.6 IP多播

--IP多播

-第四章

第五章 运输层

-5.1 用户数据报协议UDP

--用户数据报协议UDP

-5.2 TCP报文段首部格式

--TCP报文段首部格式

-5.3 可靠传输工作原理

--可靠传输工作原理

-5.4 字节为单位的滑动窗口实现

--字节为单位的滑动窗口实现

-第五章

第六章 应用层

-6.1 网络应用层

--网络应用层

-6.2 DNS

--DNS

-6.3 FTP

--FTP

-6.4 HTTP

--HTTP

-6.5 P2P

--P2P

-6.6 计算机网络面临的安全性威胁

--计算机网络面临的安全性威胁

-6.7 防火墙

--防火墙

--第六章

第七章 网络实验

-7.1 交换机基本配置

--交换机基本配置

-7.2 路由器基本配置

--路由器基本配置

-7.3 交换机端口隔离

--交换机端口隔离

-7.4 跨交换机实现相同VLAN通信

--跨交换机实现相同VLAN通信

-7.5 动态路由

--动态路由

-7.6 静态路由

--静态路由

TCP报文段首部格式笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。