TCP协议
8
报文段头部(续)
窗口(16比特):指出接收方可以接收的最大字 节数,可以认为是接收端缓冲区的大小。
接收端通过窗口字段来控制发送方发送的数据量。 TCP 连接的一端根据设置的缓存空间大小确定自己的接 收窗口大小,然后通知对方以确定对方的发送窗口的上 限。
校验和(16比特):用于检测数据是否在传输过 程中受到破坏。
窗口大小: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
选项码: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
源端口: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
选项码:02,长度:4字节,值:02 04 05 B4。即MMS为1460字节 选项码:03,长度:3字节,值:03 03 00。即窗口扩大因子为0 选项码:04,长度:2字节。值:04 02。即本机允许使用SACK (SACK-Permitted )选项。 SACK: Selective Acknowledgement,选择确认。 SACK-Permitted选 项只用在SYN的报文段中。
顺序号: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
14
报文段头部(续)
时间戳。
发送方在每个报文段中放置一个时间戳值。 接收方在确认中返回这个数值,从而允许发送 方为每一个收到的ACK计算RTT
00001000 00001010
时间戳值 时间戳回送应答
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数据报
7
报文段头部(续)
控制位(6比特)
URG(urgent) :置位时表示紧急指针字段有效。 ACK(acknowledge) :置位时表示确认号字段有效。 PSH(push) :置位时表示本报文段要求PUSH操作,此时 TCP会立即发送缓冲区中的数据,而不必等待缓冲区填满; 在接收端,TCP立即把接收到的数据送给应用程序。 RST(reset) :置位时表示连接复位,用于在连接发生异常 时复位连接。 SYN(synchronous) :置位时表示与对方同步顺序号。只有 在连接请求报文或连接接受报文中该位才会设置为1。 FIN(finish) :置位时表示发送方没有数据发送了,用于关 闭连接。
首部长度: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
TCP协议与UDP一个重要的不同之处是TCP 是面向连接的而UDP是非连接的 TCP传输数据前必须先在发送者和接受者 之间通过握手建立一个连接。
3
TCP常用端口号
4
TCP的特点
2.
数据流传输
TCP协议只是把应用程序要传输的数据当 成无结构的可以分成字节的比特流 TCP协议“不知道”所传输的数据的意义
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
协议号为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
11
报文段头部(续)
可选项可以分为以下两类:
单字节
选项结束:00000000,数据起始于下一个4字节开始 的地方。 无操作选项:00000001 最大报文段长度(MMS)。代码:2,长度:4 窗口扩大因子。代码:3,长度:3 时间戳。代码:8,长度:10
12
多字节
报文段头部(续)
校验和: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
3.
可靠传输
TCP是可靠的传输层协议,它使用多种技 术来保证数据的可靠交付
5
7.2 TCP报文段结构
6
报文段头部
源端口(16比特):报文段发送者端口号 目的端口(16比特):报文段接收者端口号 序号(32比特):TCP 连接中传送的数据流中的 每一个字节都编上一个序号。序号字段的值则指 的是本报文段所发送的数据的第一个字节的序号。 确认号(32比特):当控制位ACK置位时,此域包 含的顺序号为接收端希望接收的下一个字节的顺 序号。 首部长度(4比特):以32比特为单位的报文段首 部的长度,即指出数据区在报文段中的位置。 保留位(6比特):保留未用,全置为0。
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
最大报文段长度(MMS)
仅在建立连接时使用该选项来协商MMS,在 数据传输阶段不能使用该选项。 报文格式:
13
报文段头部(续)
窗口扩大因子
窗口大小的确定:New_win=Win*2n
New_win:新窗口的大小;Win:窗口字段大小; n:扩大因子
即:窗口扩大因子指出要把窗口字段的值左 移多少位来作为真正窗口的大小。