mac包,ip包,tcp包 格式说明(1)
2007年12月08日 星期六 下午 09:00这个文章是转载的.还繁体的.我给汉化了..嘿嘿. mac包,ip包,tcp包 格式说明
图三、以太网络的 MAC 讯框
在这个 MAC 当中,最重要的就是那个 6 Bytes 的目的与来源位址了! 事实上,在所有的以太网络卡当中都有一个独一无二的网络卡卡号, 那就是上头的『目的与来源位址』,这个地址是硬件地址( hardware address ), 共有 6 bytes ,分别由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 这 6 bytes 当中,前3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。 在 Linux 当中,你可以使用 ifconfig 这个指令来查阅你的网络卡卡号喔! 不过,由于 MAC 主要是与网络卡卡号有关,所以我们也常常将 MAC 作为网络卡卡号的代称。 特别注意,在这个 MAC 的传送中,他仅在局域网络内生效, 如果跨过不同的网域 (这个后面 IP 的部分时会介绍),那么来源与目的的位址就会跟着改变了。 这是因为变成不同网络卡之间的交流了嘛!所以卡号当然不同了!如下所示:
图三、以太网络的 MAC 讯框
在这个 MAC 当中,最重要的就是那个 6 Bytes 的目的与来源地址了! 事实上,在所有的以太网络卡当中都有一个独一无二的网络卡卡号, 那就是上头的『目的与来源地址』,这个地址是硬件地址( hardware address ), 共有 6 bytes ,分别由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 这 6 bytes 当中,前 3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。 在 Linux 当中,你可以使用 ifconfig 这个指令来查阅你的网络卡卡号喔! 不过,由于 MAC 主要是与网络卡卡号有关,所以我们也常常将 MAC 作为网络卡卡号的代称。 特别注意,在这个 MAC 的传送中,他仅在局域网络内生效, 如果跨过不同的网域 (这个后面 IP 的部分时会介绍),那么来源与目的的地址就会跟着改变了。 这是因为变成不同网络卡之间的交流了嘛!所以卡号当然不同了!如下所示:
图四、在不同主机间持续传送相同数据的 MAC 讯框变化
例 如上面的图标,我的数据要由计算机 A 通过 B 后才送达 C ,而 B 计算机有两块网络卡, 其中 MAC-2 与 A 计算机的 MAC-1 互通,至于 MAC-3 则与 C 计算机的
MAC-4 互通。 但是 MAC-1 不能与 MAC-3 与 MAC-4 互通,为啥?因为 MAC-1 这块网络卡并没有与 MAC-3 及 MAC-4 使用同样的 switch/hub 相接嘛!所以,数据的流通会变成:
1. 先由 MAC-1 传送到 MAC-2 ,此时来源是 MAC-1 而目的地是 MAC-2;
2. B 计算机接收后,察看该讯框,发现目标其实是 C 计算机,而为了与 C 计算机沟通, 所以他会将讯框内的来源 MAC 改为 MAC-3 ,而目的改为 MAC-4 ,如此就可以直接传送到 C 计算机了。
也就是说,只要透过 B (就是路由器) 才将封包送到另一个网域 (IP 部分会讲) 去的时候, 那么讯框内的硬件地址就会被改变,然后才能够在同一个网域里面直接进行 frame 的流通啊!
MAC包大小:旧为1900bytes,大为9000bytes
IP 封包的表头
现在我们知道 IP 这个数据封包 (packet) 是需要放置在 MAC 讯框里面的,所以当然不能比 MAC 所能容许的最大数据量还大!但是 IP 封包其实可以到 65535 bytes 那么大的吶! 那么 IP 封包除了数据之外,他的表头数据 (head) 是长怎样呢? 在图三的 MAC 讯框表头里面最重要的莫过于那个网络卡硬件地址, 那么在 IP 表头里面当然就以来源与目标的 IP 地址为最重要啰! 除此之外, IP 表头里面还含有哪些重要数据呢?如底下所示:(下图第一行为每个字段的 bit 数
)
图八、IP 封包的表头资料
在上面的图示中有个地方要注意,那就是『每一行所占用的位数为 32 bits』, 也就是说, IP 封包的表头数据是 32 bits 的倍数喔!那各个表头的内容分别介绍如下:
Version(版本)
宣告这个 IP 封包的版本,例如目前惯用的还是 IPv4 这个版本,在这里宣告的。
IHL(Internet Header Length, IP表头的长度)
告知这个 IP 封包的表头长度,单位为字节(bytes)。 此 IHL 长度的范围为 5~15。 Type of Service(服务类型)
这个项目的内容为『PPPDTRUU』,表示这个 IP 封包的服务类型,主要分为:
PPP:表示此 IP 封包的优先度; D:若为 0 表示一般延迟(delay),若为 1 表示为低延迟;
T:若为 0 表示为一般传输量 (throughput),若为 1 表示为高传输量;
R:若为 0 表示为一般可靠度(reliability),若为 1 表示高可靠度。
UU:保留尚未被使用。
我们前面谈到 gigabit 以太网络时曾提到 Jumbo frame 对吧!可以提高 MTU, 由于 gigabit 以太网络的种种相关规格可以让这个 IP 封包加速且降低延迟, 某些特殊的标志就是在这里说明的。
Total Length(总长度)
指这个 IP 封包的总容量,包括表头与内容 (Data) 部分。最大可达 65535 bytes。
Identification(辨别码)
我 们前面提到 IP 袋子必须要放在 MAC 袋子当中。不过,如果 IP 袋子太大的话, 就得先要将 IP 再重组成较小的袋子然后再放到 MAC 当中。而当 IP 被重组时, 每个来自同一笔数据的小 IP 就得要有个识别码以告知接收端这些小 IP 其实是来自同一个封包才行。 也就是说,假如 IP 封包其实是 65536 那么大 (前一个 Total Length 有规定), 那么这个 IP 就得要再被分成更小的 IP 分段后才能塞进 MAC 讯框中。那么每个小 IP 分段是否来自同一个 IP 资料,呵呵!这里就是那个识别码啦!
Flags(特殊旗标)
这个地方的内容为『0DM』,其意义为:
D:若为 0 表示可以分段,若为 1 表示不可分段
M:若为 0 表示此 IP 为最后分段,若为 1 表示非最后分段。
Fragment Offset(分段偏移)
表 示目前这个 IP 分段在原始的 IP 封包中所占的位置。 就有点像是序号啦,有这个序号才能将所有的小 IP 分段组合成为原本的 IP 封包大小嘛! 透过 Total Length, Identification, Flags 以及这个 Fragment Offset 就能够将小 IP 分段在收受端组合起来啰!
Time To Live(TTL, 存活时间)
表示这个 IP 封包的存活时间,范围为 0-255。当这个 IP 封包通过一个路由器时, TTL 就会减一,当 TTL 为 0 时,这个封包将会被直接丢弃。说实在的,要让 IP 封包通过 255 个路由器,还挺难的~ ^_^
Protocol Number(协定代码)
由于网络上面的封包协议太多了,每个协定都是装在 IP 当中的, 所以 IP 当然就得在表头上面告知收受端,这个 IP 内含有的数据是什么协议才行。 一般常见的网络协议如下所示:
当然啦,我们比较常见到的还是那个 TCP, UDP, ICMP 说!
Header Checksum(表头检查码)
用来检查这个 IP 表头的错误检验之用。
Source Address
还用讲吗?当然是来源的 IP 地址,相关的 IP 我们之前提过啰!
Destination Address
有来源还需要有目标才能传送,这里就是目标的 IP 地址。
Options (其它参数)
这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳记、 严格与宽松之来源路由等。
Padding(补齐项目)
由于 Options 的内容不一定有多大,但是我们知道 IP 每个数据都必须要是 32 bits, 所以,若 Options 的数据不足 32 bits 时,则由 padding 主动补齐。
你 只要知道 IP 表头里面还含有: TTL, Protocol, 来源 IP 与目标 IP 也就够了! 而这个 IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的 TTL ,就能了解到这个 IP 将被如何传送到目的端吶。下一节我们将介绍一下那么 IP 封包是如何被传送到目的地? mac包,ip包,tcp包 格式说明(2)
2007年12月08日 星期六 下午 09:01TCP 协定
在前几个小节内谈到的 IP 与路由的相关说明中,我们知道 IP 与路由仅能将数据封包传送到正确的目标而已, 但是这个目的地是否真的能够收下来这个封包?那可就不一定了。要确认该数据能否正确的被目的端所接收, 就必须要在数据封包上面多加一些参数来判断才行。
在前面的 OSI 七层协议当中,在网络层的 IP 之上则是传送层,而传送层的数据打包成什么? 最常见的就是 TCP 封包了。这个 TCP 封包数据必须要能够放到 IP 的数据袋当中才行喔! 所以,我们可以将 MAC, IP 与 TCP 的封包数据这样看:
图十一、各封包之间的相关性
所 以说,IP 除了表头之外的 Data 内容其实就是 TCP 封包的表头与内容;而 MAC 的 Data 内容, 就是一个完整的 IP 封包数据!这也是我们上头提到的,最终还是得以 MAC 能够支持的最大容许容量, 才能够决定 IP 与 TCP 封包是否需要再进行分段的工作。那么既然 MAC 与 IP 都有表头数据, 想当然尔,TCP 也有表头数据来记录该封包的相关信息啰??没错啦~ TCP 封包的表头是长这个样子的:
图十二、TCP 封包的表头资料
上图就是一个 TCP 封包的表头数据,各个项目以 Source Port, Destination Port 及 Code 算是比较重要的项目,底下我们就分别来谈一谈各个表头数据的内容吧!
Source Port & Destination Port ( 来源端口口 & 目标端口口 )
什 么是埠口(port)?我们知道 IP 封包的传送主要是藉由 IP 地址连接两端, 但是到底这个联机的通道是连接到哪里去呢?没错!就是连接到 port 上头啦! 举例来说,鸟站 (http://linux.vbird.org) 有开放 WWW 服务器, 这表示鸟站的主机必须要启动一个可以让 client 端连接的端口,这个端口就是 port , 中文翻译成为埠口。同样的,客户端想要连接到鸟哥的鸟站时,就必须要在 client 主机上面启动一个 port ,这样这两个主机才能够利用这条『通道』来传递封包数据喔! 这个目标与来源 port 的纪录,可以说是 TCP 封包上最重要的参数了! 下个小单元我们还会继续介绍。
Sequence Number ( 封包序号 )
由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号, 可以让收受端重新将 TCP 的数据组合起来。
Acknowledge Number ( 回应序号 )
为 了确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。
Data Offset (资料补偿)
在图十二倒数第二行有个 Options 字段对吧!那个 Options 的字段长度是非固定的, 而为了要确认整个 TCP 封包的大小,就需要这个标志来说明整个封包区段的起始位置。 Reserved (保留)
未使用的保留字段。
Code (Control Flag, 控制标志码)
当我们在进行网络联机的时候,必须要说明这个联机的状态,好让接收端了解这个封包的主要动作。 这可是一个非常重要的句柄喔!这个字段共有 6 个 bits ,分别代表 6 个句柄,若为 1 则为启动。分别说明如下:
URG(Urgent):若为 1 则代表该封包为紧急封包, 接收端应该要紧急处理,且图十二当中的 Urgent Pointer 字段也会被启用。
ACK(Acknowledge):若为 1 代表这个封包为响应封包, 则与上面提到的 Acknowledge Number 有关。
PSH(Push function):若为 1 时, 代表要求对方立即传送缓冲区内的其它对应封包,而无须等待缓冲区满了才送。
RST(Reset):如果 RST 为 1 的时候, 表示联机会被马上结束,而无需等待终止确认手续。这也就是说,这是个强制结束的联机, 且发送端已断线。
SYN(Synchronous):若为 1 , 表示发送端希望双方建立同步处理,也就是要求建立联机。通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。
FIN(Finish):若为 1 ,表示传送结束, 所以通知对方数据传毕,是否同意断线,只是发送者还在等待对方的响应而已。
其中比较常见到的应该是 ACK/SYN/FIN 等,这三个句柄是务必要记下来的, 这样未来在谈到防火墙的时候,您才会比较清楚为啥每个 TCP 封包都有所谓的『状态』条件! 那就是因为联机方向的不同所致啊!底下我们会进一步讨论喔!
Window (滑动窗口)
主要是用来控制封包的流量的,可以告知对方目前本身有的缓冲器容量(Receive Buffer) 还可以接收封包。当 Window=0 时,代表缓冲器已经额满,所以应该要暂停传输数据。 Window 的单位是 byte。
Checksum(确认检查码)
当 数据要由发送端送出前,会进行一个检验的动作,并将该动作的检验值标注在这个字段上; 而接收者收到这个封包之后,会再次的对封包进行验证,并且比对原发送的 Checksum 值是否相符,如果相符就接受,若不符就会假设该封包已经损毁,进而要求对方重新发送此封包!
Urgent Pointer(紧急资料)
这个字段是在 Code 字段内的 URG = 1 时才会产生作用。可以告知紧急数据所在的位置。
Options(任意资料)
目前此字段仅应用于表示接收端可以接收的最大数据区段容量,若此字段不使用, 表示可以使用任意数据区段的大小。这个字段较少使用。
Padding(补足字段)
如同 IP 封包需要有固定的 32bits 表头一样, Options 由于字段为非固定, 所以也需要 Padding 字段来加以补齐才行。同样也是 32 bits 的整数。
mac包,ip包,tcp包 格式说明(1)
2007年12月08日 星期六 下午 09:00这个文章是转载的.还繁体的.我给汉化了..嘿嘿. mac包,ip包,tcp包 格式说明
图三、以太网络的 MAC 讯框
在这个 MAC 当中,最重要的就是那个 6 Bytes 的目的与来源位址了! 事实上,在所有的以太网络卡当中都有一个独一无二的网络卡卡号, 那就是上头的『目的与来源位址』,这个地址是硬件地址( hardware address ), 共有 6 bytes ,分别由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 这 6 bytes 当中,前3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。 在 Linux 当中,你可以使用 ifconfig 这个指令来查阅你的网络卡卡号喔! 不过,由于 MAC 主要是与网络卡卡号有关,所以我们也常常将 MAC 作为网络卡卡号的代称。 特别注意,在这个 MAC 的传送中,他仅在局域网络内生效, 如果跨过不同的网域 (这个后面 IP 的部分时会介绍),那么来源与目的的位址就会跟着改变了。 这是因为变成不同网络卡之间的交流了嘛!所以卡号当然不同了!如下所示:
图三、以太网络的 MAC 讯框
在这个 MAC 当中,最重要的就是那个 6 Bytes 的目的与来源地址了! 事实上,在所有的以太网络卡当中都有一个独一无二的网络卡卡号, 那就是上头的『目的与来源地址』,这个地址是硬件地址( hardware address ), 共有 6 bytes ,分别由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 这 6 bytes 当中,前 3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。 在 Linux 当中,你可以使用 ifconfig 这个指令来查阅你的网络卡卡号喔! 不过,由于 MAC 主要是与网络卡卡号有关,所以我们也常常将 MAC 作为网络卡卡号的代称。 特别注意,在这个 MAC 的传送中,他仅在局域网络内生效, 如果跨过不同的网域 (这个后面 IP 的部分时会介绍),那么来源与目的的地址就会跟着改变了。 这是因为变成不同网络卡之间的交流了嘛!所以卡号当然不同了!如下所示:
图四、在不同主机间持续传送相同数据的 MAC 讯框变化
例 如上面的图标,我的数据要由计算机 A 通过 B 后才送达 C ,而 B 计算机有两块网络卡, 其中 MAC-2 与 A 计算机的 MAC-1 互通,至于 MAC-3 则与 C 计算机的
MAC-4 互通。 但是 MAC-1 不能与 MAC-3 与 MAC-4 互通,为啥?因为 MAC-1 这块网络卡并没有与 MAC-3 及 MAC-4 使用同样的 switch/hub 相接嘛!所以,数据的流通会变成:
1. 先由 MAC-1 传送到 MAC-2 ,此时来源是 MAC-1 而目的地是 MAC-2;
2. B 计算机接收后,察看该讯框,发现目标其实是 C 计算机,而为了与 C 计算机沟通, 所以他会将讯框内的来源 MAC 改为 MAC-3 ,而目的改为 MAC-4 ,如此就可以直接传送到 C 计算机了。
也就是说,只要透过 B (就是路由器) 才将封包送到另一个网域 (IP 部分会讲) 去的时候, 那么讯框内的硬件地址就会被改变,然后才能够在同一个网域里面直接进行 frame 的流通啊!
MAC包大小:旧为1900bytes,大为9000bytes
IP 封包的表头
现在我们知道 IP 这个数据封包 (packet) 是需要放置在 MAC 讯框里面的,所以当然不能比 MAC 所能容许的最大数据量还大!但是 IP 封包其实可以到 65535 bytes 那么大的吶! 那么 IP 封包除了数据之外,他的表头数据 (head) 是长怎样呢? 在图三的 MAC 讯框表头里面最重要的莫过于那个网络卡硬件地址, 那么在 IP 表头里面当然就以来源与目标的 IP 地址为最重要啰! 除此之外, IP 表头里面还含有哪些重要数据呢?如底下所示:(下图第一行为每个字段的 bit 数
)
图八、IP 封包的表头资料
在上面的图示中有个地方要注意,那就是『每一行所占用的位数为 32 bits』, 也就是说, IP 封包的表头数据是 32 bits 的倍数喔!那各个表头的内容分别介绍如下:
Version(版本)
宣告这个 IP 封包的版本,例如目前惯用的还是 IPv4 这个版本,在这里宣告的。
IHL(Internet Header Length, IP表头的长度)
告知这个 IP 封包的表头长度,单位为字节(bytes)。 此 IHL 长度的范围为 5~15。 Type of Service(服务类型)
这个项目的内容为『PPPDTRUU』,表示这个 IP 封包的服务类型,主要分为:
PPP:表示此 IP 封包的优先度; D:若为 0 表示一般延迟(delay),若为 1 表示为低延迟;
T:若为 0 表示为一般传输量 (throughput),若为 1 表示为高传输量;
R:若为 0 表示为一般可靠度(reliability),若为 1 表示高可靠度。
UU:保留尚未被使用。
我们前面谈到 gigabit 以太网络时曾提到 Jumbo frame 对吧!可以提高 MTU, 由于 gigabit 以太网络的种种相关规格可以让这个 IP 封包加速且降低延迟, 某些特殊的标志就是在这里说明的。
Total Length(总长度)
指这个 IP 封包的总容量,包括表头与内容 (Data) 部分。最大可达 65535 bytes。
Identification(辨别码)
我 们前面提到 IP 袋子必须要放在 MAC 袋子当中。不过,如果 IP 袋子太大的话, 就得先要将 IP 再重组成较小的袋子然后再放到 MAC 当中。而当 IP 被重组时, 每个来自同一笔数据的小 IP 就得要有个识别码以告知接收端这些小 IP 其实是来自同一个封包才行。 也就是说,假如 IP 封包其实是 65536 那么大 (前一个 Total Length 有规定), 那么这个 IP 就得要再被分成更小的 IP 分段后才能塞进 MAC 讯框中。那么每个小 IP 分段是否来自同一个 IP 资料,呵呵!这里就是那个识别码啦!
Flags(特殊旗标)
这个地方的内容为『0DM』,其意义为:
D:若为 0 表示可以分段,若为 1 表示不可分段
M:若为 0 表示此 IP 为最后分段,若为 1 表示非最后分段。
Fragment Offset(分段偏移)
表 示目前这个 IP 分段在原始的 IP 封包中所占的位置。 就有点像是序号啦,有这个序号才能将所有的小 IP 分段组合成为原本的 IP 封包大小嘛! 透过 Total Length, Identification, Flags 以及这个 Fragment Offset 就能够将小 IP 分段在收受端组合起来啰!
Time To Live(TTL, 存活时间)
表示这个 IP 封包的存活时间,范围为 0-255。当这个 IP 封包通过一个路由器时, TTL 就会减一,当 TTL 为 0 时,这个封包将会被直接丢弃。说实在的,要让 IP 封包通过 255 个路由器,还挺难的~ ^_^
Protocol Number(协定代码)
由于网络上面的封包协议太多了,每个协定都是装在 IP 当中的, 所以 IP 当然就得在表头上面告知收受端,这个 IP 内含有的数据是什么协议才行。 一般常见的网络协议如下所示:
当然啦,我们比较常见到的还是那个 TCP, UDP, ICMP 说!
Header Checksum(表头检查码)
用来检查这个 IP 表头的错误检验之用。
Source Address
还用讲吗?当然是来源的 IP 地址,相关的 IP 我们之前提过啰!
Destination Address
有来源还需要有目标才能传送,这里就是目标的 IP 地址。
Options (其它参数)
这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳记、 严格与宽松之来源路由等。
Padding(补齐项目)
由于 Options 的内容不一定有多大,但是我们知道 IP 每个数据都必须要是 32 bits, 所以,若 Options 的数据不足 32 bits 时,则由 padding 主动补齐。
你 只要知道 IP 表头里面还含有: TTL, Protocol, 来源 IP 与目标 IP 也就够了! 而这个 IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的 TTL ,就能了解到这个 IP 将被如何传送到目的端吶。下一节我们将介绍一下那么 IP 封包是如何被传送到目的地? mac包,ip包,tcp包 格式说明(2)
2007年12月08日 星期六 下午 09:01TCP 协定
在前几个小节内谈到的 IP 与路由的相关说明中,我们知道 IP 与路由仅能将数据封包传送到正确的目标而已, 但是这个目的地是否真的能够收下来这个封包?那可就不一定了。要确认该数据能否正确的被目的端所接收, 就必须要在数据封包上面多加一些参数来判断才行。
在前面的 OSI 七层协议当中,在网络层的 IP 之上则是传送层,而传送层的数据打包成什么? 最常见的就是 TCP 封包了。这个 TCP 封包数据必须要能够放到 IP 的数据袋当中才行喔! 所以,我们可以将 MAC, IP 与 TCP 的封包数据这样看:
图十一、各封包之间的相关性
所 以说,IP 除了表头之外的 Data 内容其实就是 TCP 封包的表头与内容;而 MAC 的 Data 内容, 就是一个完整的 IP 封包数据!这也是我们上头提到的,最终还是得以 MAC 能够支持的最大容许容量, 才能够决定 IP 与 TCP 封包是否需要再进行分段的工作。那么既然 MAC 与 IP 都有表头数据, 想当然尔,TCP 也有表头数据来记录该封包的相关信息啰??没错啦~ TCP 封包的表头是长这个样子的:
图十二、TCP 封包的表头资料
上图就是一个 TCP 封包的表头数据,各个项目以 Source Port, Destination Port 及 Code 算是比较重要的项目,底下我们就分别来谈一谈各个表头数据的内容吧!
Source Port & Destination Port ( 来源端口口 & 目标端口口 )
什 么是埠口(port)?我们知道 IP 封包的传送主要是藉由 IP 地址连接两端, 但是到底这个联机的通道是连接到哪里去呢?没错!就是连接到 port 上头啦! 举例来说,鸟站 (http://linux.vbird.org) 有开放 WWW 服务器, 这表示鸟站的主机必须要启动一个可以让 client 端连接的端口,这个端口就是 port , 中文翻译成为埠口。同样的,客户端想要连接到鸟哥的鸟站时,就必须要在 client 主机上面启动一个 port ,这样这两个主机才能够利用这条『通道』来传递封包数据喔! 这个目标与来源 port 的纪录,可以说是 TCP 封包上最重要的参数了! 下个小单元我们还会继续介绍。
Sequence Number ( 封包序号 )
由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号, 可以让收受端重新将 TCP 的数据组合起来。
Acknowledge Number ( 回应序号 )
为 了确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。
Data Offset (资料补偿)
在图十二倒数第二行有个 Options 字段对吧!那个 Options 的字段长度是非固定的, 而为了要确认整个 TCP 封包的大小,就需要这个标志来说明整个封包区段的起始位置。 Reserved (保留)
未使用的保留字段。
Code (Control Flag, 控制标志码)
当我们在进行网络联机的时候,必须要说明这个联机的状态,好让接收端了解这个封包的主要动作。 这可是一个非常重要的句柄喔!这个字段共有 6 个 bits ,分别代表 6 个句柄,若为 1 则为启动。分别说明如下:
URG(Urgent):若为 1 则代表该封包为紧急封包, 接收端应该要紧急处理,且图十二当中的 Urgent Pointer 字段也会被启用。
ACK(Acknowledge):若为 1 代表这个封包为响应封包, 则与上面提到的 Acknowledge Number 有关。
PSH(Push function):若为 1 时, 代表要求对方立即传送缓冲区内的其它对应封包,而无须等待缓冲区满了才送。
RST(Reset):如果 RST 为 1 的时候, 表示联机会被马上结束,而无需等待终止确认手续。这也就是说,这是个强制结束的联机, 且发送端已断线。
SYN(Synchronous):若为 1 , 表示发送端希望双方建立同步处理,也就是要求建立联机。通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。
FIN(Finish):若为 1 ,表示传送结束, 所以通知对方数据传毕,是否同意断线,只是发送者还在等待对方的响应而已。
其中比较常见到的应该是 ACK/SYN/FIN 等,这三个句柄是务必要记下来的, 这样未来在谈到防火墙的时候,您才会比较清楚为啥每个 TCP 封包都有所谓的『状态』条件! 那就是因为联机方向的不同所致啊!底下我们会进一步讨论喔!
Window (滑动窗口)
主要是用来控制封包的流量的,可以告知对方目前本身有的缓冲器容量(Receive Buffer) 还可以接收封包。当 Window=0 时,代表缓冲器已经额满,所以应该要暂停传输数据。 Window 的单位是 byte。
Checksum(确认检查码)
当 数据要由发送端送出前,会进行一个检验的动作,并将该动作的检验值标注在这个字段上; 而接收者收到这个封包之后,会再次的对封包进行验证,并且比对原发送的 Checksum 值是否相符,如果相符就接受,若不符就会假设该封包已经损毁,进而要求对方重新发送此封包!
Urgent Pointer(紧急资料)
这个字段是在 Code 字段内的 URG = 1 时才会产生作用。可以告知紧急数据所在的位置。
Options(任意资料)
目前此字段仅应用于表示接收端可以接收的最大数据区段容量,若此字段不使用, 表示可以使用任意数据区段的大小。这个字段较少使用。
Padding(补足字段)
如同 IP 封包需要有固定的 32bits 表头一样, Options 由于字段为非固定, 所以也需要 Padding 字段来加以补齐才行。同样也是 32 bits 的整数。