TCPIP包格式Word格式.docx
《TCPIP包格式Word格式.docx》由会员分享,可在线阅读,更多相关《TCPIP包格式Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
由于在改进了以太网II帧后仍然需要一个新的分组来表示类型以识别上层协议,因此在802.3的基础帧中的“长度”字段后面又紧跟了一个逻辑链路控制首部(LogicalLinkControl,LLC,遵循IEEE802.2)。
下面解释IEEE802.3LLC帧中的各个字段:
∙Preamble—同以太网II帧。
(此为10101011)
∙Des-MAC—同以太网II帧。
∙Sou-MAC—同以太网II帧。
∙Len—即“长度”字段,此处为以太网II帧中“以太网类型”字段的替换,表示帧的长度,但是不包括前同步码(Preamble)、FCS、目的和源MAC地址以及长度字段本身等字段。
∙DSAP—(DestinationServiceAccessPoint,目标服务接入点)字节,8位比特。
当此值为0xAA时,表示子网访问协议(SubnetworkAccessProtocol,SNAP)。
∙SSAP—(SourceServiceAccessPoint,来源服务接入点)字节,8位比特。
∙CTRL—“控制”字段,指定了LLC帧的类型。
∙Payload—同以太网II帧。
802.3LLC的数据有效长度范围是43~1497字节。
∙FCS—同以太网II帧。
值须重新计算。
3.IEEE802.3SNAP封装:
继承了802.3LLC的帧格式,并且添加了SNAP字段。
下面解释IEEE802.3SNAP帧中的各个字段:
∙Preamble—同802.3LLC帧。
∙Des-MAC—同802.3LLC帧。
∙Sou-MAC—同802.3LLC帧。
∙Len—同802.3LLC帧。
∙DSAP—在此值为0xAA,表示SNAP。
∙SSAP—在此值为0xAA。
∙CTRL—同802.3LLC帧。
∙SNAP—即“子网访问协议(SubnetworkAccessProtocol)”,SNAP首部包括3个字节的厂商代码和2个字节的本地代码。
厂商代码为0x000000时表示本地代码是一个以太网类型II以便能向后兼容。
这种新格式将“以太网类型”字段从它在以太网II中的原始位置向右移动的8个字节。
∙Payload—同802.3LLC帧。
802.3SNAP的数据有效长度范围是38~1492字节。
∙FCS—同802.3LLC帧。
4.IEEE802.1Q封装:
802.1Q的首部并非实际封入原始帧中,而是以太网II帧里,在原始帧里的MAC源地址字段与“以太网类型”字段之间添加一个32位元的域(field)。
下面解释IEEE802.1Q帧中的各个字段:
∙802.1QHeader—表示了这是一个VLAN的帧,保存了VLAN的信息。
∙Type—同以太网II帧。
数据有效长度范围是46~1500字节。
其中的802.1Q头部封装遵守如下格式:
∙TPID—标签协议识别符(TagProtocalIdentifier,TPID):
一组16位元的域,用来识别802.1Q帧,其数值被设定在0x8100以用来辨别某个IEEE802.1Q的帧为已被标签头部,因为这个域所被标定位置与以太网类型II帧中的“以太网类型”字段在未标签帧的域相同,这是为了用来区别未标签的帧。
∙TCI—标签控制信息(TagControlInformation,TCI):
长度为2字节,包含有PCP、CFI和VID3个字段。
∙PCP—优先权代码点(PriorityCodePoint,PCP):
以一组3位元的域当作IEEE802.1P优先权的参考,从0(最低)到7(最高),用来对数据流(音讯、影像、档案等等)作传输的优先级,也被称为“服务等级(ClassofService,CoS)”。
∙CFI—标准格式标识符(CanonicalFormatIndicator,CFI):
1位元的域。
若这个域的值为1,则MAC地指为非标准格式;
若为0,则为标准格式;
在以太交换器中它通常默认为0。
在乙太和令牌环中,CFI用来解决两者的兼容性问题。
若帧在以太端中接收数据,则CFI的值必须设为1,且这个端口不能与未标签的其他端口桥接。
∙VID—虚拟局域网识别符(VLANIdentifier,VID):
12位元的域,用来具体指出帧是属于哪个特定VLAN的。
值为0时,表示帧不属于任何一个VLAN;
此时,802.1Q标签仅代表优先权。
12位元的值0xFFF为保留值,其他的值都可用来做为总共4094个VLAN的标识符。
在桥接器上,VLAN1在管理上作为保留值。
5.IEEE802.1AD封装:
双重标记(IEEE802.1AD),也叫作QinQ,对于互联网服务提供商(ISP)是非常有用的。
它允许已被打上VLAN标签的混合数据从客户端送出时ISP仍然可以在内部使用VLAN。
下面解释IEEE802.1AD帧中的各个字段:
∙802.1QOuterTag—外部标签(nexttoSourceMACandrepresentingISPVLAN)会先于内部标签(inner)被解封装。
此时,一个可变的TPID在16进位值可能为9100、9200或是9300,通常作为外部标签;
然而在值为88a8时会违反802.1AD而无法作为外部标签。
∙802.1QInnerTag—内部标签,格式同IEEE802.1Q头部。
FCS—同以太网II帧。
以太类型值(16进制)
对应协议
0x0000-0x05DC
IEEE802.3长度
0x0101–0x01FF
实验
0x0600
XEROXNSIDP
0x0660
0x0661
DLOG
0x0800
网际协议(IP)
0x0801
X.75Internet
0x0802
NBSInternet
0x0803
ECMAInternet
0x0804
Chaosnet
0x0805
X.25Level3
0x0806
地址解析协议(ARP:
AddressResolutionProtocol)
0x0808
帧中继ARP(FrameRelayARP)[RFC1701]
0x6559
原始帧中继(RawFrameRelay)[RFC1701]
0x8035
动态DARP(DRARP:
DynamicRARP)反向地址解析协议(RARP:
ReverseAddressResolutionProtocol)
0x8037
NovellNetwareIPX
0x809B
EtherTalk
0x80D5
IBMSNAServicesoverEthernet
0x80F3
AppleTalk地址解析协议(AARP:
AppleTalkAddressResolutionProtocol)
0x8100
以太网自动保护开关(EAPS:
EthernetAutomaticProtectionSwitching)
0x8137
因特网包交换(IPX:
InternetPacketExchange)
0x814C
简单网络管理协议(SNMP:
SimpleNetworkManagementProtocol)
0x86DD
网际协议v6(IPv6,InternetProtocolversion6)
0x8809
OAM
0x880B
点对点协议(PPP:
Point-to-PointProtocol)
0x880C
通用交换管理协议(GSMP:
GeneralSwitchManagementProtocol)
0x8847
多协议标签交换(单播)MPLS:
Multi-ProtocolLabelSwitching<
unicast>
)
0x8848
多协议标签交换(组播)(MPLS,Multi-ProtocolLabelSwitching<
multicast>
0x8863
以太网上的PPP(发现阶段)(PPPoE:
PPPOverEthernet<
DiscoveryStage>
0x8864
以太网上的PPP(PPP会话阶段)(PPPoE,PPPOverEthernet<
PPPSessionStage>
0x88BB
轻量级访问点协议(LWAPP:
LightWeightAccessPointProtocol)
0x88CC
链接层发现协议(LLDP:
LinkLayerDiscoveryProtocol)
0x8E88
局域网上的EAP(EAPOL:
EAPoverLAN)
0x9000
配置测试协议(Loopback)
0x9100
VLAN标签协议标识符(VLANTagProtocolIdentifier)
0x9200
0xFFFF
保留
IP包格式
①版本:
占4位,指IP协议的版本。
通信双方使用的
IP协议版本必须一致。
日前广泛使用的IP协议版本号为4(即IPv4)。
IPv6目前还处于起步阶段。
②首部长度:
占4位,可表示的最大十进制数值是15。
请注意,
这个字段所表示数的单位是32位字(1个32位字长是4字节),
因此,当IP的首部长度为1111时(即十进制的15),
首部长度就达到60字节。
当IP分组的首部长度不是4字节的整数倍时,
必须利用最后的填充字段加以填充。
因此数据部分永远在4字节的整数倍开始,
这样在实现IP协议时较为方便。
首部长度限制为60字节的缺点是有时可能不够用。
这样做的目的是希望用户尽量减少开销。
最常用的首部长度就是20字节(即首部长度为0101),
这时不使用任何选项。
③服务:
占8位,用来获得更好的服务。
这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
1998年IETF把这个字段改名为区分服务DS(DifferentiatedServices)。
只有在使用区分服务时,这个字段才起作用。
④总长度:
总长度指首都及数据之和的长度,单位为字节。
因为总长度字段为16位,所以数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元MTU(MaximumTransferUnit)。
当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
⑤标识(Identification):
占16位。
IP软件在存储器中维持一个计数器,每产生一个数据报,
计数器就加1,并将此值赋给标识字段。
但这个“标识”并不是序号,
因为IP是无连接的服务,数据报不存在按序接收的问题。
当数据报由于长度超过网络的MTU而必须分片时,
这个标识字段的值就被复制到所有的数据报的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为
原来的数据报。
⑥标志(Flag):
占3位,但目前只有2位有意义。
标志字段中的最低位记为MF(MoreFragment)。
MF=1即表示后面“还有分片”的数据报。
MF=0表示这已是若干数据报片
中的最后一个。
标志字段中间的一位记为DF(Don'
tFragment),
意思是“不能分片”。
只有当DF=0时才允许分片。
⑦片偏移:
占13位。
较长的分组在分片后,
某片在原分组中的相对位置。
也就是说,相对用户数据字段的起点,
该片从何处开始。
片偏移以8个字节为偏移单位。
这就是说,每个分片的长度一定是8字节(64位)的整数倍。
⑧生存时间:
占8位,生存时间字段常用的英文缩写是
TTL(TimeToLive),其表明数据报在网络中的寿命。
由发出数据报的源点设置这个字段。
其目的是防止无法交付的数据报无限制地在因特网中兜围子,
因而白白消耗网络资源。
最初的设计是以秒作为TTL的单位。
每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。
若数据报在路由器消耗的时间小于1秒,就把TTL值减1。
当TTL值为0时,就丢弃这个数据报。
⑨协议:
占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
⑩首部检验和:
这个字段只检验数据报的首部,
但不包括数据部分。
这是因为数据报每经过一个路由器,都要重新计算一下首都检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。
不检验数据部分可减少计算的工作量。
⑾源地址:
占32位。
⑿目的地址:
占32位。
2.IP数据报首部的可变部分
IP首都的可变部分就是一个可选字段。
选项字段用来支持排错、测量以及安全等措施,内容很丰富。
此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。
某些选项只需要1个字节,它只包括1个字节的选项代码。
但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首都的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。
这就增加了每一个路由器处理数据报的开销。
实际上这些选项很少被使用。
新的IPv6就将IP数据报的首部长度做成固定的。
TCP包格式
源端口和目的端口:
每个TCP段都包含源端和目的端的端口号,用于寻找发起端和拉收端应用进程。
这两个值加上IP首部中的源IP地址和目的IP地址唯一确定一个TCP连接。
有时,一个IP地址和一个端口号也称为一个套接字(socket)。
这个术语出现在最早的TCP规范(RFC793)中。
套接字对(socketpair)(包含客户IP地址、客户端口号、服务器IP地址和服务器端口号的四元组)可唯一确定互联网络中每个TCP连接的双方。
序列号:
序列号用来标识从TCP发起端向TCP接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
如果将字节流看作在两个应用程序间的单向流动,则TCP用序列号对每个字节进行计数。
序列号是32bit的无符号数,序号到达232-1后又从0开始。
确认序列号:
当建立一个新的连接时,SYN标志变1。
序列号字段包含由这个主机选择的该连接的初始序号ISN(InitialSequenceNumber)。
该主机要发送数据的第一个字节序号为这个ISN加1,因为SYN标志消耗了一个序号(FIN标志也要占用一个序号)。
既然每个传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。
因此,确认序号应当是上次已成功收到数据字节序号加1。
只有ACK标志为1时确认序号字段才有效。
发送ACK无需任何代价,因为32bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。
因此,我们看到一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
头部长度:
头部长度给出首部中32bit字的数目。
需要这个值是因为任选字段的长度是可变的。
这个
字段占4bit,因此TCP最多有60字节的首部。
然而,没有任选字段,正常的长度是20字节。
URG:
紧急指针(urgentpointer)有效。
ACK:
确认序号有效。
PSH:
接收方应该尽快将这个报文段交给应用层。
RST:
重建连接。
SYN:
同步序号用来发起一个连接。
FIN:
发端完成发送任务。
窗口大小:
TCP的流量控制由连接的每一端通过声明的窗口大小来提供。
窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。
窗口大小是一个16bit字段,因而窗口大小最大为65535字节。
校验和:
检验和覆盖了整个的TCP报文段:
TCP首部和TCP数据。
这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。
TCP检验和的计算和UDP检验和的计算相似,使用一个伪头部。
紧急指针:
只有当URG标志置1时紧急指针才有效。
紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
可选项:
最常见的可选字段是最长报文大小,又称为MSS(MaximumSegmentSize)。
每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项。
它指明本端所能接收的最大长度的报文段。
TCP将用户数据打包构成报文段;
它发送数据后启动一个定时器;
另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据;
TCP提供端到端的流量控制,并计算和
验证一个强制性的端到端检验和。
许多流行的应用程序如Telnet/FTP和SMTP都使用TCP。
UDP包格式
UDP信宿端口:
一个UDP端口是一个可读写的软件结构,内部有一个接收报文缓冲区。
接收数据时,UDP软件要判断此信宿端口是否与当前使用的端口匹配,如是,则将数据报放入相应的接收队列,否则,抛弃该数据并向信源端口发送“端口不可达”的差错消息报文。
长度:
以字节计的整个报文长度,最小为8,只有报头。
它是一个可选项,以提高效率。
TCP/IP包格式