tcp协议实际tcp最大吞吐量量与什么参数相关

→ tcp协议
上传时间: 来源:
第一篇:tcp协议第7章 传输控制协议(TCP)
本章学习目标
了解面向连接的概念 了解TCP报文端的结构及其首部各个字段的 意义 理解TCP连接的建立和关闭的过程 理解TCP保证可靠性的机制:顺序号、超时 与重传和确认 了解TCP的流量控制方法 了解TCP的拥塞控制策略
7.1 TCP协议
TCP的特点1. TCP连接
TCP协议与UDP一个重要的不同之处是TCP 是面向连接的而UDP是非连接的 TCP传输数据前必须先在发送者和接受者 之间通过握手建立一个连接。
TCP常用端口号
数据流传输
TCP协议只是把应用程序要传输的数据当 成无结构的可以分成字节的比特流 TCP协议“不知道”所传输的数据的意义
TCP是可靠的传输层协议,它使用多种技 术来保证数据的可靠交付
7.2 TCP报文段结构
报文段头部
源端口(16比特):报文段发送者端口号 目的端口(16比特):报文段接收者端口号 序号(32比特):TCP 连接中传送的数据流中的 每一个字节都编上一个序号。序号字段的值则指 的是本报文段所发送的数据的第一个字节的序号。确认号(32比特):当控制位ACK置位时,此域包 含的顺序号为接收端希望接收的下一个字节的顺 序号。首部长度(4比特):以32比特为单位的报文段首 部的长度,即指出数据区在报文段中的位置。保留位(6比特):保留未用,全置为0。
报文段头部(续)
控制位(6比特)
URG(urgent) :置位时表示紧急指针字段有效。ACK(acknowledge) :置位时表示确认号字段有效。PSH(push) :置位时表示本报文段要求PUSH操作,此时 TCP会立即发送缓冲区中的数据,而不必等待缓冲区填满; 在接收端,TCP立即把接收到的数据送给应用程序。RST(reset) :置位时表示连接复位,用于在连接发生异常 时复位连接。SYN(synchronous) :置位时表示与对方同步顺序号。只有 在连接请求报文或连接接受报文中该位才会设置为1。FIN(finish) :置位时表示发送方没有数据发送了,用于关 闭连接。
报文段头部(续)
窗口(16比特):指出接收方可以接收的最大字 节数,可以认为是接收端缓冲区的大小。
接收端通过窗口字段来控制发送方发送的数据量。TCP 连接的一端根据设置的缓存空间大小确定自己的接 收窗口大小,然后通知对方以确定对方的发送窗口的上 限。
校验和(16比特):用于检测数据是否在传输过 程中受到破坏。
检验的范围包括首部和数据这两部分。算法与UDP协议 校验和的计算方法相同。计算检验和时,要在 TCP 报文段的前面加上12字节的 伪首部。
校验和计算所用到伪头部格式
0 8 16 源 IP 地址 目的 IP 地址 0 协议标识符 TCP 长度 31
报文段头部(续)
紧急指针(16比特):当URG位置位时 此字段才有效。有效时标识了此报文段 中紧急数据最后一个字节相对于此报文 段数据区第一个字节的偏移量。可选项:此字段位数是可变的,没用到 的位用0填充使其长度为32比特。
报文段头部(续)
可选项可以分为以下两类:
选项结束:,数据起始于下一个4字节开始 的地方。无操作选项: 最大报文段长度(MMS)。代码:2,长度:4 窗口扩大因子。代码:3,长度:3 时间戳。代码:8,长度:10
报文段头部(续)
最大报文段长度(MMS)
仅在建立连接时使用该选项来协商MMS,在 数据传输阶段不能使用该选项。报文格式:
报文段头部(续)
窗口扩大因子
窗口大小的确定:New_win=Win*2n
New_win:新窗口的大小;Win:窗口字段大小; n:扩大因子
即:窗口扩大因子指出要把窗口字段的值左 移多少位来作为真正窗口的大小。
报文段头部(续)
发送方在每个报文段中放置一个时间戳值。接收方在确认中返回这个数值,从而允许发送 方为每一个收到的ACK计算RTT
时间戳值 时间戳回送应答
TCP报文段实例
目标主机和源主机硬件地址
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02 帧中封装的是IP数据报
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
协议号为6,IP数据报中封装的是 TCP报文段
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
源端口:1065,目的端口:80
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
顺序号:25 60 13 7B 确认号:00 00 00 00
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
首部长度:8*4=32Bytes 即:有12个字节的选项。
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
SYN置位,其它控制位复位,即本报文是建立连接的请求报文。
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
窗口大小:65535字节
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
校验和:AE 6E 紧急指针:00 00
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
选项码:01,NOP(无操作)。用于 将选项长度填充到32bit的倍数
TCP报文段实例
00 15 EB B7 AA DE BC 5F F4 0E 57 EF 08 00 45 00 00 34 01 B5 40 00 40 06 B5 B9 C0 A8 01 04 C0 A8 01 01 04 29 00 50 25 60 13 7B 00 00 00 00 80 02 FF FF AE 6E 00 00 02 04 05 B4 01 03 03 00 01 01 04 02
选项码:02,长度:4字节,值:02 04 05 B4。即MMS为1460字节 选项码:03,长度:3字节,值:03 03 00。即窗口扩大因子为0 选项码:04,长度:2字节。值:04 02。即本机允许使用SACK (SACK-Permitted )选项。SACKSelective Acknowledgement,选择确认。SACK-Permitted选 项只用在SYN的报文段中。
7.3 TCP的连接管理
TCP通信有三个阶段,即:
建立连接 数据传送 释放连接
TCP连接的管理就是使TCP连接的建立和 释放都能正常地进行。
7.3 TCP的连接管理
连接建立过程中要解决以下三个问题:
要使每一方能够确知对方的存在。要允许双方协商一些参数(如最大报文段长 度,最大窗口大小,服务质量等)。能够对运输实体资源(如缓存大小,连接表 中的项目等)进行分配。
7.3 TCP的连接管理
TCP 连接的建立采用客户服务器方式。
主动发起连接建立的应用进程叫做客户 (client)。被动等待连接建立的应用进程叫做服务器 (server)。
TCP协议采用三次握手算法来建立和释放 连接
用三次握手建立 TCP 连接
主机 A 主机 B
主动打开 连接请求 SYN, SEQ = x
确认 确认 ACK, SEQ = x + 1, ACK = y ? 1
7.3 TCP的连接管理
A 的 TCP 向 B 发出连接请求报文段,其首部中的同步 比特 SYN 应置为 1,ACK控制位置0,选择初始序号 x。B 的 TCP 收到连接请求报文段后,如同意,则发回确 认。B 在确认报文段中应将 SYN 和ACK均置为 1,其 确认号为 x ? 1,同时也为自己选择初始序号 y。A 收到此报文段后,向 B 给出确认,其SYN置为0, ACK置为1,序号为x+1,确认号为 y ? 1。A 的 TCP 通知上层应用进程,连接已经建立。当运行服务器进程的主机 B 的 TCP 收到主机 A 的确 认后,也通知其上层应用进程,连接已经建立。
7.3 TCP的连接管理
连接请求报文中的控制位SYN应置1,ACK应 置0 连接请求应答报文中的控制位SYN和ACK均 应该设置为1 连接请求应答报文的确认报文的控制位SYN 应置为0,ACK应置为1 SYN为1的报文要消耗一个序号,数据字段 的序号是初始序号+1
TCP 连接释放的过程
至此,整个连接已经全部释放。
应用进程 释放连接 A 不再发送报文
FIN, SEQ = x
① 通知主机 应用进程 确认
应用进程 FIN, ACK, SEQ = y, ACK = x + 1 的连接就释放了,连接处于半关闭状态。释放连接 B 不再发送报文 相当于 A 向 B 说:
ACK, SEQ = x + 1, ACK = y ? 1 “我已经没有数据要发送了。确认 但你如果还发送数据,我仍接收。”
7.4 顺序号和确认
TCP 协议是面向字节的。TCP 将所要传送的报 文看成是字节组成的数据流,并使每一个字节 对应于一个序号。在连接建立时,双方要商定初始序号。TCP 每 次发送的报文段的首部中的序号字段数值表示 该报文段中的数据部分的第一个字节的序号。TCP 的确认是对接收到的数据的最高序号表示 确认。接收端返回的确认号是已收到的数据的 最高序号加 1。因此确认号表示接收端期望下 次收到的数据中的第一个数据字节的序号。
顺序号的最大值为 232 -1 。当数据过大, 顺序号超过此数,则顺序号对232 取模。
接收端对接收数据的确认
SACK-Permitted
在A→B的报文段发送过程中,B只会对连 续接收到的报文段发送ACK信息。若其中某一报文段没有被B正确接收,即 使后续的报文段被接收到,B也不会向A 发回确认报文段。这样在A超时重传时,会把已正确发送给 B的数据重新再发送一遍。
SACK-Permitted
比如? A向B发送了4个长度均为100字节的报文段, 其中0~99、200~299、300~399的报文段 正确到达B,而100~199的报文段没有到达B, 这时,B也不会向A发送ACK报文段。? 因此,当A由于接收不到ACK报文而超时重 传时,将会把200~299、300~399重新发送 给B。解决该问题的方法是使用:SACK-Permitted和 SACK功能。
SACK-Permitted
在建立连接阶段,使用选项码4来通知对 方本机允许使用SACK功能(SACKPermitted)。该选项只用于SYN置位的 报文。即只可在建立连接阶段使用该选 项。在通信阶段,通过在ACK位被置位的报文 段中使用选项码为5(SACK)的选项, 来通知发送方已经接收到并缓存的不连 续的数据块。
SACK-Permitted
SACK选项格式:
选项码:5 长度
Left Edge of 1st Block Right Edge of 1st Block ...
Left Edge of nth Block
Right Edge of nth Block
SACK-Permitted
Left Edge of Block
不连续块的第一个数据的序列号 不连续块的最后一个数据的序列号之后的序 列号。
Right Edge of Block
表示(Left Edge - 1)和(Right Edge)处序 列号的数据没能接收到。
7.5 滑动窗口机制和流量控制
为了充分利用网络的带宽,提高网络的运行效 率,TCP 采用大小可变的滑动窗口进行流量控 制。窗口大小的单位是字节。在 TCP 报文段首部的窗口字段写入的数值就是 当前给对方设置的发送窗口数值的上限。发送窗口在连接建立时由双方商定。但在通信 的过程中,接收端可根据自己的资源情况,随 时动态地调整对方的发送窗口上限值(可增大 或减小)。
发送窗口 收到确认即可前移
1 100 101 200 201 300 301 400 401 500 501 600 601 700 701 800 801 900
发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定 为 500 字节。发送端只要收到了对方的确认,发送窗口就 可前移。发送 TCP 要维护一个指针。每发送一个报 文段,指针就向前移动一个报文段的距离。
发送窗口 收到确认即可前移
1 100 101 200 201 300 301 400 401 500 501 600 601 700 701 800 801 900
不可发送 发送窗口前移
1 100 101 200 201 300 301
已发送 并被确认
已发送但 未被确认 指针
发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。现在发送端还可发送 300 字节。
发送端收到了对方对前 400 字节数据的确认,但对方 通知发送端必须把窗口减小到 400 字节。现在发送端最多还可发送 400 字节的数据。
发送窗口前移
1 100 101 200 201 300 301 400 401 500 501 600 601 700 701 800 801 900
已发送 并被确认
已发送但 未被确认 指针
可发送 发送窗口缩小
500 501 600 601 700 701
已发送 并被确认
利用可变窗口大小进行流量控制 双方确定的窗口值是 400
主机 A SEQ = 1 SEQ = 101 SEQ = 201 丢失! 主机 B A 还能发送 300 字节 A 还能发送 200 字节
ACK = 201, WIN = 300 SEQ = 301
允许 A 再发送 300 字节(序号 201 至 500)
A 还能发送 200 字节(序号 301 至 500) A 还能发送 100 字节(序号 401 至 500) A 超时重发,但不能发送序号 500 以后的数据 允许 A 再发送 200 字节(序号 501 至 700) A 还能发送 100 字节(序号 601 至 700)
SEQ = 401 SEQ = 201
ACK = 501, WIN = 200 SEQ = 501
ACK = 601, WIN = 0
不允许 A 再发送(到序号 600 的数据都已收到)
7.6 糊涂窗口症状
接收端缓 冲区饱和
应用程序 读取一个 字节
通告窗口为 一个字节
发送方发送一 个字节
避免糊涂窗口
在发送端避免糊涂窗口算法——Nagle 算法:
当应用程序产生第一个数据块时,TCP马上发送出去,即使只 有一个字节。发送端在输出缓存中累积数据,直到发生以下两个事件中的 一个,才把缓存中的数据打包发送出去:
收到接收端的一个确认 缓存中的数据已超过一个MSS大小
重复以上第2步,直到通信结束。
接收方的应对策略有两种:
延迟发送确认 Clark方法 :接收缓冲区满后,发送0窗口通知;当可用接收 缓存大小达到MSS大小或者是总缓存大小的一半时,才更新 48 通知窗口的大小。
7.7 拥塞控制
当在网络中传输的数据过多而超过网络的容量时, 数据传输的延时将大大增加,这就导致拥塞的发 生。拥塞发生后,一方面数据的延迟严重,另外 路由器由于超载而丢弃数据,这些都会使得发送 端重传更多的报文,更多的报文进入到网络中又 加剧网络拥塞的状况。如果这种状况持续下去, 将发生所谓拥塞崩溃的现象 TCP采用了限制发送端发送数据的多少和速率的方 法来防止发生拥塞崩溃。TCP采用慢开始拥塞避免的算法来进行拥塞控制。
7.7 拥塞控制
TCP对拥塞进行控制的算法主要有:
慢开始(慢启动) 拥塞避免 快重传 快恢复
慢开始和拥塞避免
发送端的主机在确定发送报文段的速率时,既 要根据接收端的接收能力,又要从全局考虑不 要使网络发生拥塞。因此,每一个 TCP 连接需要有以下两个状态变 量:
接收端窗口 rwnd (receiver window) 又称为 通知窗口(advertised window)。拥塞窗口 cwnd (congestion window)。
接收端窗口和拥塞窗口
接收端窗口 rwnd
接收端根据其目前的接收缓存大小所许诺的 最新的窗口值,是来自接收端的流量控制。接收端将此窗口值放在 TCP 报文的首部中 的窗口字段,传送给发送端。发送端根据自己估计的网络拥塞程度而设置 的窗口值,是来自发送端自己的流量控制。
拥塞窗口 cwnd (congestion window)
发送窗口的上限值
发送端的发送窗口的上限值应当取为接收端 窗口 rwnd 和拥塞窗口 cwnd 这两个变量中 较小的一个,即应按以下公式确定:
发送窗口的上限值 ? Min [rwnd, cwnd]
当 rwnd & cwnd 时,是接收端的接收能力 限制了发送窗口的最大值。当 cwnd & rwnd 时,则是网络的拥塞限制 发送窗口的最大值。
慢开始算法的原理
TCP协议使用了慢开始算法的原理来控制 拥塞窗口的大小。其特点就是:
不出现拥塞时采用加法增大的方法来增大拥 塞窗口 出现拥塞时采用乘法减小的方法来迅速缩小 拥塞窗口
慢开始算法的原理
加法增大(additive increase)
执行拥塞避免算法后,当收到对所有报文段的 确认就将拥塞窗口 cwnd增加一个 MSS 大小, 使拥塞窗口缓慢增大,以防止网络过早出现拥 塞。
慢开始算法的原理
乘法减小(multiplicative decrease)
不论在慢开始阶段还是拥塞避免阶段,只要出 现一次超时(即出现一次网络拥塞),就把慢 开始门限值 ssthresh 设置为当前的拥塞窗口值 乘以 0.5。当网络频繁出现拥塞时,ssthresh 值就下降得 很快,以大大减少注入到网络中的分组数。
慢开始算法的原理
在主机刚刚开始发送报文段时可先将拥塞窗 口 cwnd 设置为一个最大报文段 MSS 的数 值。在每收到一个对新的报文段的确认后,将拥 塞窗口增加至多一个 MSS 的数值。用这样的方法逐步增大发送端的拥塞窗口 cwnd,直到达到慢开始门限值。这种算法 可以使分组注入到网络的速率更加合理。
拥塞避免算法
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时,就改为执行拥塞避免算法 拥塞避免算法
拥塞窗口按按线性规律增长,每经过一个往返 时延就增加一个 MSS 的大小。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中 的窗口单位不使用字节而使用报文段。慢开始门限的初始值设置为 16 个报文段, 即 ssthresh = 16。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端 窗口 rwnd 中的最小值。我们假定接收端窗口足够大, 因此现在发送窗口的数值等于拥塞窗口的数值。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1, 发送第一个报文段 M0。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
发送端收到 ACK1 (确认 M0,期望收到 M1)后,将 cwnd 从 1 增大到 2,于是发送端可以接着发送 M1 和 M2 两个报文段。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
接收端发回 ACK2 和 ACK3。发送端每收到一个对新报 文段的确认 ACK,就把发送端的拥塞窗口加 1。现在 发送端的 cwnd 从 2 增大到 4,并可发送 M4 ~ M6共 4 个报文段。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
发送端每收到一个对新报文段的确认 ACK,就把发送 端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输次数 按指数规律增长。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时 (即当 cwnd = 16 时),就改为执行拥塞避免算法, 拥塞窗口按线性规律增长。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
假定拥塞窗口的数值增长到 24 时,网络出现超时(表 明网络拥塞了)。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
更新后的 ssthresh 值变为 12(即发送窗口数值 24 的 一半),拥塞窗口再重新设置为 1,并执行慢开始算 法。
慢开始和拥塞避免算法的实现举例
拥塞窗口 cwnd
线性规律增长
24 20 16 12 8 4 0 0 2 慢开始 4 6 8 10 进入拥塞避免 ssthresh = 16
发生超时 进入拥塞避免 更新后的 ssthresh = 12
指数规律增长 传输次数 12 14 16 慢开始 18 20 22 拥塞避免 拥塞避免
当 cwnd = 12 时改为执行拥塞避免算法,拥塞窗口 按按线性规律增长,每经过一个往返时延就增加一 个 MSS 的大小。
必须强调指出
“拥塞避免”并非指完全能够避免 了拥塞。利用以上的措施要完全避 免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段 把拥塞窗口控制为按线性规律增长, 使网络比较不容易出现拥塞。
对ICMP差错的处理
TCP能够遇到的最常见的ICMP差错就是 源站抑制、主机不可达和网络不可达。
一个接收到的源站抑制ICMP报文,将引起 拥塞窗口cwnd被置为1个报文段大小来发起 慢启动,但是慢启动门限ssthresh并没有发 生变化。一个接收到的主机不可达或网络不可达的 ICMP报文,实际都被忽略,因为这两个差 错都被认为是短暂现象。TCP试图发送引起 该差错的数据,尽管最终有可能会超时。
7.8 溢出时间和重传
为了确保可靠性,TCP要求接收端对收到的数 据进行确认。TCP为每个发送报文段安排了一 个定时器并设定一个溢出时间,如果在定时器 溢出时还未收到确认信号,发送端则重新发送 数据
快重传和快恢复
快重传算法规定,发送端只要一连收到 三个重复的 ACK 即可断定有分组丢失了, 就应立即重传丢失的报文段而不必继续 等待为该报文段设置的重传计时器的超 时。
不难看出,快重传并非取消重传计时器, 而是在某些情况下可更早地重传丢失的 报文段。
快重传举例
M1, M2 ACK2, ACK3 M3 M4 ACK3 M5 ACK3 M6 ACK3 M3
主机 B A 发送 M1 和 M2 B 确认 M1 和 M2
丢失! A 发送 M3 但丢失了 A 发送 M4
B 只能再次确认 M2(因为 M3 没有收到)
A 发送 M5 B 发送第二个重复确认 ACK3 A 发送 M6 B 发送第三个重复确认 ACK3 A 收到了三个重复的确认 ACK3,就立即重传 M3,而不必等待超时重传。
快恢复算法
当发送端收到连续三个重复的 ACK 时,就 重新设置慢开始门限 ssthresh。与慢开始不同之处是拥塞窗口 cwnd 不是设 置为 1,而是设置为 ssthresh + n ? MSS。(n & 3,是收到的重复 ACK的个数)。若发送窗口值还容许发送报文段,就按拥塞 避免算法继续发送报文段。若收到了确认新的报文段的 ACK,就将 cwnd 缩小到 ssthresh
TCP 的重传机制
重传机制是 TCP 中最重要和最复杂的问 题之一。TCP 每发送一个报文段,就对这个报文 段设置一次计时器。只要计时器设置的 重传时间到但还没有收到确认,就要重 传这一报文段。问题是如何设置重传时间。
往返时延的方差很大
往返时延的 概率分布
由于 TCP 的下层是一个互连网环境,IP 数 据报所选择的路由变化很大。因而运输层的 往返时延的方差也很大。所以在设置重传时 间时,参考的是平均往返时延
数据链路层 运输层 时间 T1 T2
往返时延的自适应算法
记录每一个报文段发出的时间,以及收到相 应的确认报文段的时间。这两个时间之差就 是报文段的往返时延。将各个报文段的往返时延样本加权平均,就 得出报文段的平均往返时延 RTT。每测量到一个新的往返时延样本,就按下式 重新计算一次平均往返时延 RTT:
RTT? α ? (旧的RTT) ? (1 ? α) ? (新的往返时延 样本)
其中:0 ? α ? 1。77
参数α的选择
若α很接近于 1,表示新算出的平均往返 时延 RTT 和原来的值相比变化不大,而 新的往返时延样本的影响不大(RTT 值更 新较慢)。若选择α接近于零,则表示加权计算的平 均往返时延 RTT 受新的往返时延样本的 影响较大(RTT 值更新较快)。典型的α值为 7/8。
超时重传时间 RTO (RetransmissionTime-Out)
计时器的 RTO 应略大于上面得出的 RTT, 即:
RTO ? β ? RTT
关于系数β
β是个大于 1 的系数。若取β很接近于1 ,发送端可及时地重传丢失的 报文段,因此效率得到提高。但若报文段并未丢失而仅仅是增加了一点时延, 那么过早地重传反而会加重网络的负担。因此 TCP 原先的标准推荐将β值取为 2。
往返时间的测量相当复杂
TCP 报文段 1 没有收到确认。重传(即报文段 2)后,收到了确认报文段 ACK。如何判定此确认报文段是对原来的报文段 1 的 确认,还是对重传的报文段 2 的确认?
超时重传 TCP 报文段 是对哪一个报文段 的确认? 收到 ACK 时间
发送一个 TCP 报文段
往返时延 RTT? 往返时延 RTT?
在计算平均往返时延 RTT 时,只要报文 段重传了,就不采用其往返时延样本。这样得出的平均往返时延 RTT 和重传时 间就较准确。
修正的 Karn 算法
报文段每重传一次,就将重传时间增大一些:
新的重传时间 ? γ ? (旧的重传时间)
γ 的典型值是2 。
当不再发生报文段的重传时,才根据报文段的往 返时延更新平均往返时延 RTT 和重传时间的数值。实践证明,这种策略较为合理。
TCP 的有限状态机
? 为了管理因特网,在网络管理中心设有管理信息 库 MIB (Management Information Base)。? 管理信息库存放着各主机的 TCP 连接表。? TCP 连接表对每个连接都登记了其连接信息。除 本地和远地的 IP 地址和端口号外,还要记录每 一个连接所处的状态。
连接状态 本地 IP 地址 本地端口 远地 IP 地址 远地端口 连接 1 连接 2 …
起点 CLOSED 被动打开 关闭 收到 SYN 发送 SYN, ACK 收到 RST SYN_RCVD LISTEN 主动打开 发送 SYN
发送 SYN SYN_SENT 主动打开 收到 SYN, ACK 发送 ACK 关闭 或超时
收到 SYN,发送 SYN, ACK 同时打开 收到 ACK
关闭 发送 FIN 关闭 发送 FIN 收到 FIN 发送 ACK
数据传送 收到 FIN 阶段 发送 ACK ESTABLISHED
CLOSE_WAIT 关闭 发送 FIN 收到 ACK LAST_ACK
同时关闭 CLOSING
TCP 的 有 限 状 态 机
FIN_WAIT_1
收到 FIN, ACK 发送 ACK
FIN_WAIT_2
收到 FIN 发送 ACK
TIME_WAIT 定时经过两倍报文段寿命后
TCP 的正常的连接建立和关闭
客户进程 服务器进程
LISTEN(被动打开)
(主动打开) SYN_SENT ESTABLISHED SYN, SEQ = x SYN, ACK, SEQ = y, ACK = x + 1 ACK, SEQ = x + 1, ACK = y + 1 SYN_RCVD SYN_RCVD
ESTABLISHED
(全双工数据传送阶段) FIN, SEQ = u ACK, SEQ = v, ACK = u + 1 FIN, ACK, SEQ = v, ACK = u + 1 ACK, SEQ = u + 1, ACK = v + 1
ESTABLISHED
(主动关闭) FIN_WAIT_1
FIN_WAIT_2 TIME_WAIT TIME_WAIT
CLOSE_WAIT ( 被动关闭)
CLOSE_WAIT LAST_ACK
TCP是一种重要的网络协议,它为应用程序提 供了可靠的面向连接的数据流传输服务。TCP使用顺序号、确认和重传等技术保证传输 的可靠性。滑动窗口机制使得TCP能有效地使用网络资源。通过改变窗口的大小和通告窗口,TCP可以对 流量进行一定的控制。TCP还提供了拥塞避免、慢启动和加速递减等 算法来解决网络发生拥塞的情况 .
P91 一;二;三:4、5、6、7、8
第一篇:tcp协议TCP Part I
背景 IP协议 TCP协议
背景 IP协议 TCP协议
TCP/IP起源于6 0年代末美国政府资助的一个分组 交换网络研究项目,到 9 0年代已发展成为计算 机之间最常应用的组网形式。它是一个真正的开 放系统,因为协议族的定义及其多种实现可以不 用花钱或花很少的钱就可以公开地得到。它成为 被称作“全球互联网”或“因特网( Internet )”的 基础。很多不同的厂家生产各种型号的计算机,它们运 行完全不同的操作系统,但 TCP/IP协议族允许它 们互相进行通信。这一点很让人感到吃惊,因为 它的作用已远远超出了起初的设想。
文顿·瑟夫,现为Google副总 裁兼首席互联网顾问。许多 人把文顿·瑟夫看作“互联 网之父”之一,他是TCP/IP 协议和互联网架构的联合设 计者之一。在1994年加入 MCI之前,文顿·瑟夫曾担任 国家研究计划(CNRI)公司的 副总裁。1994年12月,《人 物》杂志将文顿·瑟夫选为 当年“25个最令人着迷的人” 之一。
罗伯特·埃利奥特·卡恩 (Robert Elliot Kahn,1938 年12月23日-),常称鲍 勃·卡恩(Bob Kahn),美 国计算机科学家。发明了 TCP协议,并与温顿·瑟夫一 起发明了IP协议;这两个协 议成为全世界因特网传输 资料所用的最重要的技术。他也被称作“互联网之 父”。
? 日,美国 加利福尼亚大学洛杉矶 分校的计算机系教授莱 昂纳德·克莱因罗克带领 一个研究小组,首次把 一台电脑和一家研究机 构的另一台电脑连接起 来,让它们“交谈”, 成为互联网雏形。
TCP/IP 模型对应 OSI模型 TCP/IP 应用层 OSI 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
传输层 网络层 网络接层(链路层)
OSI和TCP/IP模型比较
共同点 OSI参考模型和TCP/IP参考模型都采用了层次结构的 概念, 都能够提供面向连接和无连接两种通信服务机制; 不同点 前者是七层模型,后者是四层结构 对可靠性要求不同(后者更高) OSI模型是在协议开发前设计的, 具有通用性.TCP/IP 是先有协议集然后建立模型, 不适用于非TCP/IP网络. 实际市场应用不同(OSI模型只是理论上的模型,并 没有成熟的产品,而TCP/IP已经成为“实际上的国际标 实际上的国际标 准”)
背景 IP协议 TCP协议
网际协议( ) 网际协议(IP)
IP是TCP/IP协议族中最为核心的协议。所有的 TCP、UDP、ICMP及IGMP数据都以I P数据报格 式传输 ? 不可靠(unreliable)不能保证 I P数据报能 成功地到达目的地。? 无连接(connectionless)IP并不维护任何 关于后续数据报的状态信息。
IP 数据报的格式
? ? ? ? ? 一个 IP 数据报由首部和数据两部分组成。首部的前一部分是固定部分,共 20 字节,是所有 IP 数据报必须具有的。在首部的后一部分为可变部分,可有0-40字节, 是一些可选字段。在首部之后为 IP 数据报的数据部分。首部和数据两部分总长度最大可达 64KB
比特 0 比特 0 固 定 首 部 部 分 可变 部分
1 2 优 先 级
4 T 16 标志 源 地 址
7 未用 24 31
4 8 版 本 首部长度 服 务 类 型 标 识 生存时间 协 议
总 长 度 片 偏 移 首 部 检 验 和
目 的 地 址 可 选 字 段 (长 度 可 变) 数 据 数 部 据 分 部 分 填 充
比特 0 比特 0 固 定 首 部 部 分 可变 部分
1 2 优 先 级
4 T 16 标志 源 地 址
7 未用 24 31
4 8 版 本 首部长度 服 务 类 型 标 识 生存时间 协 议
总 长 度 片 偏 移 首 部 检 验 和
目 的 地 址 可 选 字 段 (长 度 可 变) 数 据 数 部 据 分 部 分 填 充
IP 数据报 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具 有的。
比特 0 比特 0 固 定 首 部 部 分 可变 部分
1 2 优 先 级
4 T 16 标志 源 地 址
7 未用 24 31
4 8 版 本 首部长度 服 务 类 型 标 识 生存时间 协 议
总 长 度 片 偏 移 首 部 检 验 和
目 的 地 址 可 选 字 段 (长 度 可 变) 数 据 数 部 据 分 部 分 填 充
IP 数据报 首部的后一部分是可变部分,为0--40字节不等,取决于所选择的项 目,用来支持排错、测量以及安全等措施,实际上这些选项很少被使用。
IP 数据报首部的选项
? 安全性能 数据报的安全等级。安全性能—数据报的安全等级 数据报的安全等级。? 严格路由—以IP地址序列给出从源到宿的 严格路由 以 地址序列给出从源到宿的 完整路径,用于测试和紧急传送。完整路径,用于测试和紧急传送。? 松散路由 规定源宿之间的某几个路由或 松散路由—规定源宿之间的某几个路由或 路由原则。路由原则。? 路由记录 记录下所经路由的所有 地址。路由记录—记录下所经路由的所有 地址。记录下所经路由的所有IP地址 ? 时间标签 记录每经过一跳所花费的时间, 时间标签—记录每经过一跳所花费的时间 记录每经过一跳所花费的时间, 用于测试路由算法。用于测试路由算法。
比特 0 比特 0 固 定 首 部 部 分 可变 部分
1 2 优 先 级
4 T 16 标志 源 地 址
7 未用 24 31
4 8 版 本 首部长度 服 务 类 型 标 识 生存时间 协 议
总 长 度 片 偏 移 首 部 检 验 和
目 的 地 址 可 选 字 段 (长 度 可 变) 数 据 数 部 据 分 部 分 填 充
版本=0100 (即IPv4)
比特 0 比特 0 固 定 首 部 部 分 可变 部分
1 2 优 先 级
4 T 16 标志 源 地 址
7 未用 24 31
4 8 版 本 首部长度 服 务 类 型 标 识 生存时间 协 议
总 长 度 片 偏 移 首 部 检 验 和
目 的 地 址 可 选 字 段 (长 度 可 变) 数 据 数 部 据 分 部 分 填 充
首部长度:以4字节为单位计算,值为, 单位为双字,即IP首部长度可20-60字节
比特 0 比特 0 固 定 首 部 部 分 可变 部分
1 2 优 先 级
4 T 16 标志 源 地 址
7 未用 24 31
4 8 版 本 首部长度 服 务 类 型 标 识 生存时间 协 议
总 长 度 片 偏 移 首 部 检 验 和
目 的 地 址 可 选 字 段 (长 度 可 变) 数 据 数 部 据 分 部 分 填 充
服务类型:最初的称为TOS(Type Of Service),它指明应该如 何处理数据报,如优先级和期望的路径特征(如低时延等) RFCs 791,。90年代后期,IETF重新定义了字段的含义,提供区分服务(DSCP)。RFC s
TOS:前3位为优先级,后面4位只能1位的值为1.
优先级:000-111,D-更低的时延,T-更高的吞吐量, R-更高的可靠性,C-代价更小的路由
前6位构成码点字段,最后2位未使用.
1.当最后边3位为0时,最左边3位为优先级(同服务类型) 2.根据最右边2位值不同,可定义64种服务。第一类由因特 网管理机构指派,第二类由本地管理机构使用,第三类为临 时实验。
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 定 首 生存时间 协 议 首 部 检 验 和 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
总长度——占16 bit,指首部和数据之和的总长度,单位为 字节,因此数据报的最大长度为 65535 字节。IP信包总长 度必须不超过所在数据链路的最大传送单元 MTU。
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 首 定 生存时间 协 议 首 部 检 验 和 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
标识 (identification),占 16 bit,它是一个计数值,用来表 示每个IP数据报的标识号。
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 首 定 生存时间 协 议 首 部 检 验 和 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
标志位(Flag):占3位,第一位为空,后两位分别为DF, MF。MF=1表示后面“还有分片”,MF=0表示该IP数据报为 若干数据报片中的最后一个。DF=0表示允许分片。
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 首 定 首 部 检 验 和 生存时间 协 议 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
片偏移(13 bit)字段:分组在分片后,本分片在原分组 中的相对偏移量。片偏移以 8 字节为偏移单位。
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 首 定 首 部 检 验 和 生存时间 协 议 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
生存时间 ( 8 bit ) 记为 TTL (Time To Live) ,为 IP 数据报在网络中的 寿命,发送时其值设置为 “数据报在网络中可通过的路由器数的最大 值”,每通过一个路由器该值减1,减为0时路由器将其丢弃,并向原 发送结点发送一个ICMP包报告错误。
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 首 定 首 部 检 验 和 生存时间 协 议 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
协议 (8 bit) 字段指出此数据报携带的数据使用何种协议, 以便目的主机的 IP 层将数据部分上交给高层的哪个处理 过程。
数据报中的 Protocol 字段
运输层 ICMP 网络层 首部 IGMP 数据部分 IP 数据报 协议字段指出应将数据 部分交给哪一个进程 1 ---- ICMP, 2 ---- IGMP, 6 ---- TCP, 17 ---- UDP, 89 ---- OSPF TCP UDP OSPF
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 首 定 首 部 检 验 和 生存时间 协 议 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
首部检验和(16 bit )字段只检验数据报的首部不包括数据 部分。这里不采用 CRC 检验码而采用简单的计算方法。
1 2 优 先 级
比特 0 4 8 16 19 24 总 长 度 版 本 首部长度 服 务 类 型 固 标 识 标志 片 偏 移 首定 首 部 检 验 和 生存时间 协 议 部 部 源 地 址 分 目 的 地 址 可变 可 选 字 段 (长 度 可 变) 填 充 部分 数 据 部 分 传送 首 部 数 据 IP 数据报 部 分
IP 源地址和 IP 目的地址都各占 4 字节
? ? ? 1:在IP分组中,HLEN值为1000,问分组携带了多少字 节的选项? 2:到达分组的前几个十六进制如下 问分组被丢弃前还可传送多 少跳?
答案:01,还有一跳 上层协议06:TCP
背景 IP协议 TCP协议
TCP传输控制协议
TCP提供一种面向连接的、可靠的字节流服务。? 应用数据 分割 数据被分割 数据 分割成TCP认为最适合发送的数据块。? 当TCP发出一个段后,它启动一个定时器 定时器,等待 定时器 目的端确认收到这个报文段。? 当TCP收到发自TCP连接另一端的数据,它将发 送一个确认 确认。确认 ? TCP将保持它首部和数据的检验和 检验和。检验和
? 既然TCP报文段作为IP数据报来传输,而I P 数据报的到达可能会失序,因此 TCP报文段 失序。如果必要, TCP将对 的到达也可能会失序 失序 收到的数据 数据进行重新排序 重新排序,将收到的数据 数据 重新排序 以正确的顺序交给应用层。? 既然IP数据报会发生重复,TCP的接收端必 须丢弃重复 数据 丢弃重复的数据 丢弃重复 数据。? TCP还能提供流量控制 流量控制。流量控制
发送端 应用进程
接收端 应用进程
向发送缓存 写入数据块
从接收缓存 读取数据块
… … 发送缓存
… … 端口
接收缓存 报文段 报文段 发送TCP报文段 … 报文段
客户服务器方式
? TCP 的连接和建立都是采用客户服务器方式。? 主动发起连接建立的应用进程叫做客户 (client)。? 被动等待连接建立的应用进程叫做服务器 (server)。
TCP 连接管理
? TCP传输连接就有三个阶段,即:连接建立、 数据传送和连接释放。传输连接的管理就是使 运输连接的建立和释放都能正常地进行。? 连接建立过程中要解决以下三个问题:
– 要使每一方能够确知对方的存在。– 要允许双方协商一些参数(如最大报文段长度,最 大窗口大小,服务质量等)。– 能够对传输实体资源(如缓存大小)进行分配。
TCP 的正常的连接建立和关闭
客户进程 服务器进程 LISTEN(被动打开) SYN_RCVD SYN, ACK, SEQ = y, ACK = x + 1 ESTABLISHED ACK, SEQ = x + 1, ACK = y + 1 ESTABLISHED (全双工数据传送阶段)
(主动打开) SYN_SENT
SYN, SEQ = x
(主动关闭) FIN_WAIT_1
FIN, SEQ = u CLOSE_WAIT ( 被动关闭) ACK, SEQ = v, ACK = u + 1
FIN_WAIT_2 FIN, ACK, SEQ = v, ACK = u + 1 TIME_WAIT ACK, SEQ = u + 1, ACK = v + 1 CLOSED LAST_ACK
用三次握手建立 TCP 连接
主动打开 连接请求 SYN, SEQ = x
确认 确认 ACK, SEQ = x + 1, ACK = y + 1
TCP 的数据编号与确认
? TCP 协议是面向字节的。TCP 将所要传送的报文看成 是字节组成的数据流,并使每一个字节对应于一个序 号。? 在连接建立时,双方要商定初始序号。TCP 每次发送 的报文段的首部中的序号字段数值表示该报文段中的 数据部分的第一个字节的序号。? TCP 的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加 1。因此确认号表示接收端期望下次收到的数据中的第一 个数据字节的序号。
TCP seq. #’s 和 ACKs
Seq. #’s– 该数据段第一个字节 在(整个报文)字节 流中 “编号” ACKs– seq #为预期从对方发 来的“下一个”字节 的编号 – 积累的 ACK
User types ‘C’
host ACKs receipt of ‘C’, echoes back ‘C’
host ACKs receipt of echoed ‘C’
time 简单的 telnet 场景
比特 0 8 源 端 口 序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
31 目 的 端 口 20 字节的 固定首部 窗 口 紧 急 指 针 填 充
TCP 报文段 发送在前 IP 首部
TCP 数据部分
IP 数据部分
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
源端口和目的端口字段——各占 2 字节。端口是传输 层与应用层的服务接口。传输层的复用和分用功能都 要通过端口才能实现。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
序号字段——占 4 字节。TCP 连接中传送的数据流中 的每一个字节都编上一个序号。序号字段的值则指的 是本报文段所发送的数据的第一个字节的序号。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
确认号字段——占 4 字节,是期望收到对方的下一个 报文段的数据的第一个字节的序号。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
数据偏移——占 4 bit,它指出 TCP 报文段的数据起始处 距离 TCP 报文段的起始处有多远。“数据偏移”的单位 不是字节而是 32 bit 字(4 字节为计算单位)。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
保留字段——占 6 bit,保留为今后使用,但目前 应置为 0。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
紧急比特 URG —— 当 URG = 1 时,表明紧急指针字 段有效。它告诉系统此报文段中有紧急数据,应尽 快传送(相当于高优先级的数据)。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
确认比特 ACK —— 只有当 ACK = 1 时确认号字段才 有效。当 ACK = 0 时,确认号无效。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等 到整个缓存都填满了后再向上交付。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
复位比特 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接 中出现严重差错(如由于主机崩溃或其他原因)或应用 层主动断开连接。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
同步比特 SYN(SYNchronize) —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
终止比特 FIN (FINal) —— 用来释放一个连接。当FIN = 1 时,表明此报文段的发送端的数据已发送完毕,并 要求释放传输连接。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
窗口字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量, 单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己 的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
检验和 —— 占 2 字节。检验和字段检验的范围包括 首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
8 源 端 口
31 目 的 端 口
序 号 TCP 首部 确 认 号 数据 偏移 保 留 检 验 和 选 项 (长 度 可 变)
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
紧急指针字段 —— 占 16 bit。紧急指针指出在本报 文段中的紧急数据的最后一个字节的序号。
至此,整个连接已经全部释放。TCP 连接释放的过程
主机 A 主机 B
应用进程 释放连接 A 不再发送报文
FIN, SEQ = x
① 通知主机 应用进程 确认
应用进程 FIN, ACK, SEQ = y, ACK = x + 1 的连接就释放了,连接处于半关闭状态。释放连接 B 不再发送报文 相当于 A 向 B 说:
ACK, SEQ = x + 1, ACK = y + 1 “我已经没有数据要发送了。但你如果还发送数据,我仍接收。” 确认
起点 CLOSED 被动打开 关闭 收到 SYN 发送 SYN, ACK 收到 RST SYN_RCVD LISTEN 被动打开 发送 SYN SYN_SENT 主动打开 收到 SYN, ACK 发送 ACK 被动关闭 CLOSE_WAIT 关闭 发送 FIN 收到 ACK LAST_ACK 收到 ACK 关闭 或超时 主动打开 发送 SYN
收到 SYN,发送 SYN, ACK 同时打开 收到 ACK
关闭 发送 FIN 关闭 发送 FIN 收到 FIN 发送 ACK
数据传送 收到 FIN 阶段 发送 ACK ESTABLISHED 主动关闭 同时关闭 CLOSING
TCP 的 有 限 状 态 机
FIN_WAIT_1
收到 FIN, ACK 发送 ACK
FIN_WAIT_2
收到 FIN 发送 ACK
TIME_WAIT 定时经过两倍报文段寿命后
TCP 的正常的连接建立和关闭
客户进程 服务器进程 LISTEN(被动打开) SYN_RCVD SYN, ACK, SEQ = y, ACK = x + 1 ESTABLISHED ACK, SEQ = x + 1, ACK = y + 1 ESTABLISHED (全双工数据传送阶段) SYN_RCVD
(主动打开) SYN_SENT
SYN, SEQ = x
(主动关闭) FIN_WAIT_1
FIN, SEQ = u CLOSE_WAIT ( 被动关闭) ACK, SEQ = v, ACK = u + 1 CLOSE_WAIT LAST_ACK
FIN_WAIT_2 FIN, ACK, SEQ = v, ACK = u + 1 TIME_WAIT ACK, SEQ = u + 1, ACK = v + 1 CLOSED
起点 CLOSED 被动打开 关闭 收到 SYN 发送 SYN, ACK 收到 RST SYN_RCVD LISTEN 被动打开 发送 SYN SYN_SENT 主动打开 收到 SYN, ACK 发送 ACK 被动关闭 CLOSE_WAIT 关闭 发送 FIN 收到 ACK LAST_ACK 收到 ACK 关闭 或超时 主动打开 发送 SYN
收到 SYN,发送 SYN, ACK 同时打开 收到 ACK
关闭 发送 FIN 关闭 发送 FIN 收到 FIN 发送 ACK
数据传送 收到 FIN 阶段 发送 ACK ESTABLISHED 主动关闭 同时关闭 CLOSING
TCP 的 有 限 状 态 机
FIN_WAIT_1
收到 FIN, ACK 发送 ACK
FIN_WAIT_2
收到 FIN 发送 ACK
TIME_WAIT 定时经过两倍报文段寿命后
同时打开和同时关闭
A B (主动打开)SYN_SENT SYN x SYN y SYN_SENT(主动打开) SYN_RCVD SYN_RCVD SYN x , ACK y + 1 SYN y ,ACK x + 1 ESTABLISHED FIN u FIN_WAIT_1 FIN v FIN_WAIT_1 CLOSING CLOSING ACK = u + 1 ACK v + 1 TIME_WAIT
ESTABLISHED
Explicit Congestion Notification
比特 0 8 源 端 口 序 号 TCP 首部 确 认 号 数据 偏移 保留
C E U A P R S F W C R C S S Y I R E G K H T N N
31 目 的 端 口
20 字节 固定 首部 窗 口 紧 急 指 针 填 充
检 验 和 选 项 (长 度 可 变)
Explicit Congestion Notification
CWR(Congestion Window Reduced )拥塞窗口减少 ECE(ECN-Echo)显式拥塞通告 TCP包头的flag位中包括了两个新的标志,ECE和CWR。分别表示支持ECN以及 已经感知到拥塞。并使在建立连接的过程中表明是否可以进行ECN操作。接收 端必须能够通知发送端它收到了一个来自路由器的拥塞通告。发送端同时也 要能够通知接收端它已经收到了接收端的拥塞通告并且已经降低了发送速率。
比特 0 比特 0 固 定 首 部 部 分 可变 部分
1 2 优 先 级
4 T 16 标志 源 地 址
7 未用 24 31
4 8 版 本 首部长度 服 务 类 型 标 识 生存时间 协 议
总 长 度 片 偏 移 首 部 检 验 和
目 的 地 址 可 选 字 段 (长 度 可 变) 数 据 数 部 据 分 部 分 填 充
Explicit Congestion Notification
Explicit Congestion Notification
TCP Initialization We call a SYN packet with the ECE and CWR flags set an &ECN-setup SYN packet. Similarly, we call a SYN-ACK packet with only the ECE flag set but the CWR flag not set an &ECN-setup SYNACK packet&,
Explicit Congestion Notification
Support from TCP
* An ECT codepoint is set in packets transmitted by the sender to indicate that ECN is supported by the transport entities for these packets. * An ECN-capable router detects impending congestion and detects that an ECT codepoint is set in the packet it is about to drop. Instead of dropping the packet, the router chooses to set the CE codepoint in the IP header and forwards the packet. * The receiver receives the packet with the CE codepoint set, and sets the ECN-Echo flag in its next TCP ACK sent to the sender. * The sender receives the TCP ACK with ECN-Echo set, and reacts to the congestion as if a packet had been dropped. * The sender sets the CWR flag in the TCP header of the next packet sent to the receiver to acknowledge its receipt of and reaction to the ECN-Echo flag. RFC3168
常见TCP选项
? MSS (Maximum Segment Size) ? Window Scale ? SACK (Selective Acknowledgement)
SACK Permit SACK
? Timestamp
? MSS表示TCP传往另一端的最大块数据长度, 在连接建立时(SYN)双方各自通告自己的Mss, 否则默认为536字节(加上20字节IP报头和 TCP报头构成576字节的IP数据报)。? MSS合理值应为保证数据包不分片的最大值 ? 对于以太网可以达到1460byte
窗口扩大选项(Windows Scaling)
W通过定义一个窗口扩大因子,使TCP的窗 口定义从16bit增加为32bit。W只出现在含 有SYN标志的报文里。长度为3字节
窗口扩大选项(Windows Scaling)
Selective Acknowledgments (SACK)
SACK(选择性确认)技术,使TCP只重新发送丢失 的包,不用发送后续所有的包,而且提供相应机 制使接收方能告诉发送方哪些数据丢失,哪些数 据重发了,哪些数 据已经提前收到等 包括SACK-Permit和SACK,发送方建立连接时在 SYN包里发送一个SACK-Permit,表示在今后的传 输中希望收到SACK选项,一旦开始连接,接受方 发送SACK选项,通知发送方已经接收的不连续的 数据块。该选项的长度不固定,由不连续数据块 的个数决定
? SACK-Permit
一般TCP的ACK过程
服务器 data-1 data-2 data-3 data-4 data-5 ack-data-1 ack-data-1 ack-data-1 中间设备 data-1 ack-data-1 data-2丢失 丢失 data-3 ack-data-1 data-4 ack-data-1 data-5 ack-data-1 data-2 data-3 data-4 data-5 ack-data-1 客户端
问题问题仅有data-2丢失,虽然 客户端已经收到其他的 data,但是,服务器却 要将data-2以及data-2 之后的其他Data重传一 次 效率低下! 效率低下!
TCP选项中的 选项中的SACK功能就是 选项中的 功能就是 针对这种情况提出的解决方法
SACK的确认过程
服务器 data-1 data-2 data-3 data-4 data-5 ack-data-1 sack-data-3 sack-data-4 中间设备 data-1 ack-data-1 data-2丢失 丢失 data-3 sack-data-3 data-4 sack-data-4 data-5 sack-data-5 data-2 sack-data-5 客户端
SACK包结构
1.SACK允许选项 允许选项 类型值4 该选项只允许在有SYN标志的TCP包中 ,也即TCP握手的前两个包中, 分别表示各自是否支持SACK。
tcp syn请求 请求
2.SACK选项 选项 选项类型5 选项长度可变,但 整个TCP选项长度不 超过40字节,实际最 多不超过4组边界值。
SACK内容 内容
允许SACK 允许
如何利用SACK确认丢失的数据包
明确三个参数明确三个参数Ack确认序列号12421 sack块左边界13801 Sack块右边界:15181
被丢弃的数据包的序列号范围为被丢弃的数据包的序列号范围为:
时间戳(timestamps)
? 发送方在报文中放置一个时间戳值,接受 方在确认时返回这个值以及接受时的时间 戳值,以此来计算RTT值。不一定出现在含 有SYN标志的报文里。长度为10字节
1.计算RTT,2.防止回绕的序号
为什么SACK只能最多确认4组(8个)边界?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. TCP/IP协议详解 第一卷 /view/45fd272852fd.html?from=rec&pos=4&weight= 4&lastweight=4&count=5 /view/5c288b51ad02de80d4d84066.html /view/17ec517c50c3.html?from=rec&pos=2&weight= 2&lastweight=1&count=5 /greek_zjb/blog/item/317ce1b5eb2d5.html /view/39ac2d0d581b6bd97f19ea4e.html http://tools.ietf.org/html/rfc1072 http://tools.ietf.org/html/rfc2018 http://tools.ietf.org/html/rfc4614 http://tools.ietf.org/html/rfc3168 http://tools.ietf.org/html/rfc6040 http://tools.ietf.org/html/rfc6247 http://tools.ietf.org/html/rfc791 http://tools.ietf.org/html/rfc1122 http://tools.ietf.org/html/rfc1349 http://tools.ietf.org/html/rfc2474 http://tools.ietf.org/html/rfc2780 http://tools.ietf.org/html/rfc2481
Thank You!
第一篇:tcp协议TCP/IP协议详解
? TCP/UDP ? DNS ? SNMP ? IPv6
? 面向连接与面向无连接
? 端口 ? 三次握手
? TCP报文格式
? UDP报文格式
? 端口将应用进程与IP网络相关联,是应用进
程的地址标识。? 一个端口是一个16位号码。? 端口分为公用和临时两种公用端口:属于标准服务器,由权威机构 IANA统一分配,从1~1023。临时端口:用于客户,从。
UDP UDP UDP UDP UDP TCP
53 67 68 69 111 20
NAMESERVER
DOMAIN BOOTP Client BOOTP Server TFTP RPC FTP Data
主机名字服务器
域名服务器 客户端启动协议服务 服务器端启动协议服务 简单文件传输协议 微系统公司RPC 文件传输服务器(数据连接)
TCP TCP TCP
FTP Control
Telnet SMTP HTTP
文件传输服务器(控制连接)
远程终端服务器 简单邮件传输协议 超文本传输协议
Socket 套接字
为了使得多主机多进程通信时,不至于发生混乱情 况,必须把端口号和主机的IP地址结合起来使用, 称为插口或套接字(Socket)。? 由于主机的IP地址是唯一的,这样目的主机就可以 区分收到的数据报的源端机了。? 套接字包括IP地址(32位)和端口号(16位),共 48位。? 例如(124.33.13.55,200)和(126.45.21.51,25) 就是一对套接字,在整个Internet中,在传输层上 进行通信的一对套接字都必须是唯一的。
Netstat -an
查看主机网络连接状态
TCP连接的建立
第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据 段。该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数 据段被称为SYN数据段。另外,客户选择一个初始序列号SEQ,设SEQ=x 并将这个编号放到初始的TCP SYN数据段的序列号字段中。该数据段被封 装到一个IP数据报中,并发送给服务器。第二次握手:一旦装有TCP SYN数据段的IP数据报到达了服务器主机,服 务器将从该数据报中提取出TCP SYN数据段,给该连接分配TCP缓冲区和 变量,并给客户TCP发送一个允许连接的数据段。这个允许连接的数据段 也不包含任何应用层数据。但是,它的头部中装载着3个重要信息。首先, SYN被设置为1;其次,TCP数据段头部的确认字段被设置为x+1;最后, 服务器选择自己的初始顺序号,SEQ=y,并将该值放到TCP数据段头部的 序列号字段中。第三次握手:在接收到允许连接数据段之后,客户也会给连接分配缓冲区 和变量。客户端主机还会给服务器发送另一个数据段,对服务器的允许连 接数据段给出确认。
TCP协议中连接建立的过程
主机1 SYN(SEQ=x) 主机2
主机1 SYN(SEQ=x) 主机2
SYN(SEQ=y) ACK=x+1
SYN(SEQ=y) ACK=x+1
ACK=z REJECT REJECT
呼叫碰撞的情况
SYN(SEQ=x) 主机2
SYN(SEQ=y) SYN(SEQ=y,ACK=x+1)
SYN(SEQ=x,ACK=y+1)
? 连接的释放
? 第一次握手:由进行数据通信的任意一方提
出要求释放连接的请求报文段。? 第二次握手:接收端收到此请求后,会发送 确认报文段,同时当接收端的所有数据也都 已经发送完毕后,接收端会向发送端发送一 个带有其自己序号的报文段。? 第三次握手:发送端收到接收端的要求释放 连接的报文段后,发送反向确认。
主机A FIN,SEQ=x①
ACK=x+1② FIN,SEQ=y,ACK=x+1③
TCP连接的释放过程
TCP数据报文
32 bit 源端口 序列号 确认号 数据 偏移
保留 校验和
U AP R S F R CS SY I G KH T N N
窗口 紧急指针 填充
任意选项(如果有的话) 数据
图3.22 TCP报文 段格式
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
源端口和目的端口字段——各占 2 字节。标识了发送 方和接收方的应用进程。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
序号字段——占 4 字节。TCP 连接中传送的数据流 中的每一个字节都编上一个序号。序号字段的值则指 的是本报文段所发送的数据的第一个字节的序号。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
确认号字段——占 4 字节,是期望收到对方的下一个 报文段的数据的第一个字节的序号。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
数据偏移——占 4 bit,它指出 TCP 报文段的数据起始 处距离 TCP 报文段的起始处有多远。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
保留字段——占 6 bit,保留为今后使用,但目前 应置为 0。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
紧急比特 URG —— 当 URG ? 1 时,表明紧急指 针字段有效。它告诉系统此报文段中有紧急数据, 应尽快传送(相当于高优先级的数据)。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
确认比特 ACK —— 只有当 ACK ? 1 时确认号字 段才有效。当 ACK ? 0 时,确认号无效。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特 置 1 的报文段,就尽快地交付给接收应用进程,而不 再等到整个缓存都填满了后再向上交付。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
复位比特 RST (ReSeT) —— 当 RST ? 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因), 必须释放连接,通知一下对方。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
同步比特 SYN —— 同步比特 SYN 置为 1,就表示 这是一个连接请求或连接接受报文。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
终止比特 FIN (FINal) —— 用来释放一个连接。当FIN ? 1 时, 表明此报文段的发送端的数据已发送完毕,并要求释放运输连 接。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
窗口字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量, 单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己 的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
检验和 —— 占 2 字节。检验和字段检验的范围包括首部和 数据和伪段头(不是TCP里的信息,但是计算校验和的时候 也计算了的内容:IP地址,TCP数据段长度,协议类型)。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
紧急指针字段 —— 占 16 bit。紧急指针指出在本报 文段中的紧急数据的位置。
目 的 端 口
MSS 是 TCP 报文段中的数据字段的最大长度。序 号 数据字段加上 TCP 首部 20 字节 才等于整个的 TCP 报文段。确 认 号 TCP 固定
首部 数据 偏移 保 留
U A P R S F R C S S Y I G K H T N N
首部 窗 口 紧 急 指 针
(长 度 可 变)
选项字段 —— 长度可变。TCP 规定了二种选项,最大报文 段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度 是 MSS 个字节。” 和窗口扩大因子,用于扩大接收方窗口。
目 的 端 口
序 号 TCP 首部 确 数据 偏移 保 留 认 号 窗 口 紧 急 指 针
U A P R S F R C S S Y I G K H T N N
20 字节 固定 首部
(长 度 可 变)
填充字段 —— 这是为了使整个首部长度是 4 字节的 整数倍。
UDP报文头结构
IPv4的不足 ? 地址基本耗尽,这是当前最棘手的问题 ? 路由表越来越大 ? 功能不足,缺少对多媒体信息传输的支持 ? 缺少对安全的支持 ? 缺少对主机漫游的支持
IPv6的主要改进
? 更大的地址空间:128位
? 灵活的首部格式:用一系列固定格式的扩展
首部取代了IPv4中可变长度的选项字段 ? 简化了协议:如取消了首部的校验和字段, 分段只能在源端进行 ? 允许对网络资源的预分配,支持实时图像等 要求保证一定的带宽和时延的应用 ? 允许协议继续演变,增加新的功能
IPv6数据包格式
为了使用和记忆方便,因特网还采用了域名管理系统, 简称DNS(Domain Name System),在IP地址之外, 网上的计算机还有另一种表示法:域名,它是由代表 一定意义的英文单词的缩写构成,如:
说明这是一台 WWW主机 西电 教育部门 中国
DNS域名结构
域名是一种按一定规律书写的、用户容易理解、容易 记忆的Internet地址。Internet上一台主机的主机名是由它所属的各级域的 域名和分配给该主机的名字共同构成的。书写的时候,顶级域名放在最右面,各级名字之间有 “.”隔开。域名是有层次的。Internet主机域名的一般格式为四级域名.三级域名.二级域 名.顶级域名(并不一定 分四级)如:.cn。顶级的域名划分采用了两种模式:
地理模式、 组织模式
因特网的名字空间
树根 顶级域名
… coop info biz aero com net org edu gov mil int cn uk … cctv… ibm hp mot 二级域名 … hk js sh bj org net gov edu com ac
三级域名 四级域名
tsinghua pku fudan sjtu seu
mail csnetl ep
1、地理模式
顶级域名表示国家,次级域名表示该网络的属性。见下表所示:
顶级 域名 ca cu 所表示的 顶级 所表示的 国家或地区 域 名 国家或地区 加拿大 古巴 ch De 瑞士 德国
顶级 所表示的 域 名 国家或地区 au cn 澳大利亚 中国
意大利 瑞典
2、组织模式
在组织模式中,顶级域名表示该网络的属性
表示的网络属性 顶级域 名 表示的网络属 性 顶级域 名 表示的网络属性
盈利的商业实体 mil
军事机构或组 织
教育机构或设施 net
网络资源或组 织
非盈利性组织 机构 商业或公司
和WWW有关的 实体
非军事性政府或 Org 组织 国际性机构 firm
消遣性娱乐
常见七类机构性顶级域名 ? COM商业机构,
? EDU教育机构,www. ? INT国际机构, www.who.int ? GOV政府机构, www.whitehouse.gov ? MIL军事机构, www.army.mil ? www.navy.mil ? NET网络机构, www.263.net ? ORG社会团体、组织. www.chinaembassycanada.org
域名服务器
主机域名不能直接用于TCP/IP协议 的路由选择中。当用户使用主机域名进 行通信时,必须首先要将其映射成IP地 址。这种将主机域名映射为IP地址的过 程称为域名解析,Internet的域名系统 DNS能够完成此项工作。
域名解析过程
简单网络管理协议——SNMP
网络管理的要求
网络管理的功能

我要回帖

更多关于 tcp吞吐量公式 的文章

 

随机推荐