报文传输方法、代理节点及存储介质与流程

文档序号:25032957发布日期:2021-05-11 17:03阅读:65来源:国知局
本申请涉及通信
技术领域
:,特别涉及一种报文传输方法、代理节点及存储介质。
背景技术
::分段路由(英文:segmentrouting,简称:sr)是基于源路由的理念来转发报文的技术,基于互联网协议第6版(英文:internetprotocolversion6,简称:ipv6)的分段路由(简称:srv6)是一种将sr技术与ipv6协议结合起来的技术。具体来讲,srv6报文会在携带ipv6头(英文:ipv6header)的基础上,还携带分段路由头(英文:segmentroutingheader,简称:srh)。srh包括段标识(英文:segmentid,简称:sid,也称segment)列表(英文:sidlist,也称segmentslist)以及剩余段数量(英文:segmentleft,简称:sl)等信息。段列表中包含一个或多个依次排列的sid,每个sid在形式上是一个128比特的ipv6地址,每个sid在实质上能够表示拓扑、指令或服务。sl相当于指针,是个不小于0的数值,会指向段列表中的活跃sid(英文:activesid),该活跃sid为ipv6头中的目的地址。当支持srv6的节点接收到报文时,会读取报文的目的地址,根据目的地址查询本地sid表(英文:localsidtable),当目的地址为本地sid表中的sid时,将报文识别为srv6报文,基于该sid对应的拓扑、指令或服务,来执行相应的操作。业务功能链(英文:servicefunctionchain,简称:sfc,也称业务链)是一个有序的业务功能集合,能够让流量按照指定的顺序经过多个业务功能(英文:servicefunction,简称:sf)节点,通过多个sf节点对报文依次进行处理,来完成业务处理流程。在报文为srv6报文而sf节点不支持srv6的情况下,为了让sf节点能够正常处理报文,引入了代理(英文:proxy)节点。代理节点用于代理sf节点处理srh,代理节点可分为动态代理、静态代理、共享内存代理以及伪代理等类型。其中,动态代理的处理流程为:代理节点接收srv6报文,根据srv6报文的目的地址,查询localsidtable;当目的地址为localsidtable中的端点动态代理sid(end.ad.sid,end表示endpoint,意为端点;ad表示dynamic,意为动态,sid意为段标识)时,代理节点执行end.ad.sid对应的动态代理操作。其中,动态代理操作包括:从srv6报文解封装srh,得到不包含srh的报文,将不包含srh的报文发送给sf。并且,代理节点会以报文的五元组为索引,在缓存表项中存储srh;sf节点会接收到不包含srh的报文,对报文进行处理,将处理后的报文返回给代理节点;代理节点会以处理后的报文的五元组为索引,查询缓存表项,得到srh;代理节点会向处理后的报文封装srh,从而恢复srh,得到包含srh的srv6报文;代理节点会将srv6报文的sl减一,将srv6报文的目的地址更新为段列表中减一后的sl对应的sid,即end.ad.sid的下一个sid,得到更新后的srv6报文;代理节点会向下一个节点发送更新后的srv6报文。代理节点接收到sf节点返回的报文后,经常会出现查询srh失败的情况,即发生cachemiss(缓存未命中)事件,在这种情况下,由于代理节点无法恢复srh,代理节点会丢弃sf节点返回的报文,造成报文传输失败。技术实现要素:本申请实施例提供了一种报文传输方法、代理节点及存储介质,能够解决相关技术中缓存未命中的场景下会导致报文传输失败的技术问题。所述技术方案如下:第一方面,提供了一种报文传输方法,在该方法中,第一代理节点与第二代理节点与连接到同一个sf节点,第一代理节点从sf节点接收第一报文,第一代理节点会查询本地的缓存,而未找到第一报文对应的srh。那么,第一代理节点会根据第一报文和对应于第二代理节点的第一绕行sid,生成第二报文,将第二报文发送给对端,即第二代理节点。其中,第二报文包括第一绕行段标识sid、第一控制信息和第一报文的载荷。第一绕行sid用于标识第二报文的目的节点为所述第二代理节点,以使第二报文通过第一绕行sid传输至对端。第一控制信息用于指示第二代理节点恢复第一报文对应的srh,因此第二代理节点能够通过识别第一控制信息,来恢复第一报文对应的srh。本实施例提供了一种将报文绕行至对端来恢复srh的方法,通过为end.ad.sid扩展了一种具有绕行功能的新的sid,本端代理节点未能从本地缓存中查找到srh的情况下,将这种新的sid以及用于指示恢复srh的控制信息携带在需要恢复srh的报文中,利用这种新的sid将报文传输至对端代理节点,从而指示对端代理节点来代替本端代理节点恢复srh,使得报文能够通过对端代理节点恢复对应的srh,进而通过srh继续在网络中转发,从而避免报文由于无法恢复srh而导致传输失败的问题。可选地,第二报文包括互联网协议(英文:internetprotocol,简称:ip)头,ip头的目的地址为第一绕行sid。通过这种方式,可以通过目的地址,来指明第二报文要发送至第二代理节点,以保证第二报文从第一代理节点路由至第二代理节点。此外,第二代理节点可以接收到第二报文后,识别ip头的目的地址,发现目的地址是本地sid表中的第一绕行sid,即可确定要根据第一绕行sid执行对应的操作。此外,这种方式可以应用在第一代理节点与第二代理节点位于一跳ip链路(on-link)、第一代理节点与第二代理节点位于多跳ip链路(off-link),而第一代理节点与第二代理节点之间的中间节点未使能sr功能、第一代理节点与第二代理节点位于多跳ip链路,而没有指定转发第二报文的中间节点的业务需求等多种应用场景下,适用范围广泛,灵活性强。可选地,第二报文可以不仅包括ip头,还包括srh。第二报文的srh包括第一绕行sid和一个或多个目标sid,ip头的目的地址为这一个或多个目标sid中对应于下一个sr节点的sid。其中,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径。通过这种方式,可以适于第一代理节点与第二代理节点位于多跳ip链路,且具有指定转发第二报文的中间节点的业务需求的场景。第一代理节点可以通过在目的地址携带对应于下一个sr节点的sid,来指明第二报文要从本端转发至该sr节点,以使该第二报文经过该sr节点的转发,到达第二代理节点。那么,第一代理节点能够根据业务需求,指定转发第二报文的中间节点,从而灵活地选择第二报文的转发路径,便于进行路径规划,实现流量调优的效果。可选地,在生成第二报文的过程中,第一代理节点可以为第二报文生成ip头,向第一报文封装第二报文的ip头。通过这种方式来生成第二报文,对接收到的第一报文进行重新封装,添加ip头即可得到第二报文,相对于从0开始生成整个报文的方式而言,处理操作十分简单,因此生成报文的过程可以由代理节点的数据面(如转发芯片)执行,而不依赖于代理节点的控制面(如cpu),从而节省了cpu的处理资源。由于转发芯片可以独立的执行生成报文和转发报文的任务,也就减少了转发芯片与cpu要进行的交互,从而节省了转发芯片和cpu进行交互所需占用的处理资源,因此提高了转发芯片的转发性能。经实验,对转发芯片的微码配置上述报文生成逻辑,则转发芯片即可执行以实现生成第二报文的步骤,因此支持了微码架构,实用性强。可选地,在生成第二报文的过程中,第一代理节点可以将第一报文的ip头更新为第二报文的ip头。通过这种方式来生成第二报文,修改第一报文原有的ip头即可得到第二报文,相对于从0开始生成整个报文的方式而言,操作简单,同样可以支持应用在转发芯片的情况,另外还可以支持微码架构,实用性强。可选地,第二报文还包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。通过在第二报文中携带第二控制信息,在第二报文在第一代理节点与第二代理节点之间进行转发的过程中,能够通过第二报文的第二控制信息,通过指示中间节点对第二报文的合法性进行校验,可以提高传输第二报文的安全性。可选地,第二控制信息携带在第二报文的srh的类型长度值(英文:typelengthvalue,简称:tlv)中。通过这种方式,充分利用srh的tlv的可扩展性,来携带所需的信息,从而指示中间节点执行指定的功能或者对报文进行处理,便于扩展网络的功能,提高灵活性。可选地,第二控制信息携带在第二报文的ip头中。通过这种方式,可以在ip头中的一些预留字段,来携带所需的信息,扩展了ip头的功能,提高灵活性。可选地,第二报文可以包含扩展头,第一控制信息可以携带在第二报文的扩展头中。通过这种方式,如果要在本申请实施例的基础上增加新功能时,通过在扩展头中继续添加附加的信息即可,比如如果要指令第二代理节点执行某种行为或某种业务,将该其行为或业务对应的其他控制信息,也放在扩展头即可。这样,第二报文具有良好的可扩展能力,便于将本实施例提供的srh恢复功能与其他功能搭配使用。可选地,第一控制信息可以直接携带在第一绕行sid中。通过这种方式,通过绕行sid本身即可实现控制对端代理节点存储srh的功能,这样,实现了对第二报文进行压缩的效果,免去了第一控制信息在报文中额外占用的字节,因此节省了第二报文的数据量,也就减少了传输第二报文的网络开销。可选地,第二报文可以包括ip头,第一控制信息可以携带在第二报文的ip头中。第二报文的ip头可以由第一报文原有的ip头重新封装得到,那么通过将第一控制信息直接携带在ip头中,可以让ip头发挥路由功能的基础上,同时顺便发挥承载第一控制信息的功能,这样同样也可以免去第一控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。可选地,第二报文的srh可以包括tlv,第一控制信息可以携带在srh中的tlv中。通过这种方式,利用了srh通过tlv来携带信息的能力,同样也可以免去第一控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。可选地,第一报文由来自第二代理节点的报文经过业务功能处理后得到,第一报文包括第二缓存表项的标识,第二缓存表项为第二代理节点存储第一报文对应的srh的缓存表项;第二报文还包括第二缓存表项的标识,第一控制信息还用于指示第二代理节点以第二缓存表项的标识为索引查询第一报文对应的srh。通过这种方式,由于存储srh的缓存表项相对于代理节点来说通常是固定的,不会由于流标识的修改而改变,因此以缓存表项的标识为索引,能够查询到修改了流标识的报文的srh,从而向修改了流标识的报文恢复srh。基于这种方式,即使sf是网络地址转换(英文:networkaddresstranslation,简称:nat)功能的sf,使得报文在传输过程中流标识被改变,代理节点也能够恢复srh,因此可以让代理节点支持接入nat功能的sf,从而为实现了nat功能的sf提供动态代理功能。可选地,第一报文由来自第一代理节点的报文经过业务功能处理后得到,第一报文包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项。第二报文包括第一缓存表项的标识,第一控制信息还用于指示第二代理节点以第一缓存表项的标识相映射的第二缓存表项的标识为索引,查询第一报文对应的srh。通过这种方式,代理节点通过维护本端的缓存表项与对端的缓存表项之间的映射关系,当第一代理节点未从本地缓存未找到srh时,可以将缓存表项的标识传输至第二代理节点,利用控制信息,指示第二代理节点结合映射关系,找到第二代理节点上存储srh的缓存表项,从而从该缓存表项找到报文的srh,从而向修改了流标识的报文恢复srh。基于这种方式,即使sf是nat功能的sf,使得报文在传输过程中流标识被改变,代理节点也能够恢复srh,因此可以让代理节点支持接入nat功能的sf,从而为实现了nat功能的sf提供动态代理功能。可选地,第一代理节点可以通过第一链路与第二代理节点相连,在这种拓扑的基础上,第一代理节点在发送第二报文的过程中,可以通过对应于第一链路的第一出接口,向第二代理节点发送第二报文。通过这种方式,第一代理节点可以选择对等链路(peerlink)来作为第二报文的转发路径,使得第二报文能够通过对等链路传输至对端。可选地,第一代理节点可以通过第二链路与路由节点相连,路由节点通过第三链路与第二代理节点相连,在这种拓扑的基础上,第一代理节点在发送第二报文的过程中,可以通过对应于第二链路的第二出接口,向路由节点发送第二报文,第二报文由路由节点通过第三链路转发至第二代理节点。通过这种方式,第一代理节点可以选择路由节点转发的路径来作为第二报文的转发路径,使得第二报文经过路由节点的转发后能够传输至对端。可选地,第一代理节点在发送第二报文的过程中,可以对第一链路的状态进行检测,如果第一链路处于可用状态,则第一代理节点可以通过对应于第一链路的第一出接口,向第二代理节点发送第二报文,如果第一链路处于不可用状态,则第一代理节点可以通过对应于第二链路的第二出接口,向路由节点发送第二报文。通过这种方式,如果对等链路处于可用状态,第一代理节点会优先使用对等链路,使得第二报文优先通过对等链路传输至第二代理节点,那么由于对等链路比路由节点转发的路径更短,对等链路经过的节点比路由节点转发的路径经过的节点少,能够减少传输第二报文的时延。第二方面,提供了一种报文传输方法,在该方法中,第一代理节点与第二代理节点与连接到同一个sf节点,第二代理节点从第一代理节点接收第二报文,第二报文包括对应于第二代理节点的第一绕行段标识sid、第一控制信息和第一报文的载荷,第一绕行sid用于标识第二报文的目的节点为第二代理节点,第一报文为第一代理节点从业务功能节点接收的报文。第二代理节点确定第一控制信息指示第二代理节点恢复第一报文对应的srh;第二代理节点根据第二报文,查询第二代理节点的缓存,得到第一报文对应的srh;第二代理节点根据第二报文和第一报文对应的srh,生成第三报文,发送第三报文。其中,第三报文包括第一报文对应的srh和第一报文的载荷。可选地,第二报文包括ip头,ip头的目的地址为第一绕行sid。通过这种方式,可以通过目的地址,来指明第二报文要发送至第二代理节点,以保证第二报文从第一代理节点路由至第二代理节点。此外,第二代理节点可以接收到第二报文后,识别ip头的目的地址,发现目的地址是本地sid表中的第一绕行sid,即可确定要根据第一绕行sid执行对应的操作。此外,这种方式可以应用在第一代理节点与第二代理节点位于一跳ip链路(on-link)、第一代理节点与第二代理节点位于多跳ip链路(off-link),而第一代理节点与第二代理节点之间的中间节点未使能sr功能、第一代理节点与第二代理节点位于多跳ip链路,而没有指定转发第二报文的中间节点的业务需求等多种应用场景下,适用范围广泛,灵活性强。可选地,第二报文包括ip头和第二报文的srh,ip头的目的地址为一个或多个目标sid中对应于下一个sr节点的sid,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径,第二报文的srh包括第一绕行sid和一个或多个目标sid。通过这种方式,可以适于第一代理节点与第二代理节点位于多跳ip链路,且具有指定转发第二报文的中间节点的业务需求的场景。第一代理节点可以通过在目的地址携带对应于下一个sr节点的sid,来指明第二报文要从本端转发至该sr节点,以使该第二报文经过该sr节点的转发,到达第二代理节点。那么,能够根据业务需求,来选择第二报文的转发路径,可以控制第二报文经过指定的sr节点传输,从而便于进行路径规划,实现流量调优的效果。可选地,在生成第三报文的过程中,第二代理节点从第二报文剥离第二报文的ip头,封装第一报文对应的srh,得到第三报文。通过执行剥离的操作,第二代理节点能够将第一代理节点重新封装出的报文,恢复至sf节点向第一代理节点返回的报文,通过执行封装srh的操作,第二代理节点能够将sf节点返回的报文还原为包含srh的报文,从而实现了动态代理的功能。可选地,在生成第三报文的过程中,第二代理节点将第二报文的ip头更新为第一报文的ip头,封装第一报文对应的srh,得到第三报文。可选地,第二报文还包括srh,第二报文的srh的段列表包括第一绕行sid。通过在第二报文中携带srh,可以利用srh中的一个或多个tlv以及段列表,来承载一些附加的信息,以便利用附加的信息来指令第二代理节点或者两个代理节点之间的中间节点执行指定的转发行为或某种业务,从而让第二报文具有良好的可扩展能力,便于将恢复srh的功能与其他功能搭配提供。可选地,第二报文的srh包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。通过在tlv中携带第二控制信息,在第二报文在第一代理节点与第二代理节点之间进行转发的过程中,能够通过第二报文的第二控制信息,指示中间节点执行指定的功能或者对报文进行处理,便于扩展网络的功能,提高灵活性。尤其是,通过指示中间节点对第二报文的合法性进行校验,可以提高传输第二报文的安全性。可选地,第二控制信息携带在第二报文的srh的类型长度值tlv中;或,第二控制信息携带在第二报文的ip头中。可选地,第二报文可以包含扩展头,第一控制信息可以携带在第二报文的扩展头中。通过这种方式,如果要在本实施例提供的方法上的基础上增加新功能时,通过在扩展头中继续添加附加的信息即可,比如如果要指令第二代理节点执行某种行为或某种业务,将该其行为或业务对应的其他控制信息也放在扩展头即可,这样,第二报文具有良好的可扩展能力,便于将本实施例提供的srh备份功能与其他功能搭配使用。可选地,第一控制信息可以直接携带在第一绕行sid中。通过这种方式,通过绕行sid本身即可实现控制对端代理节点存储srh的功能,这样,免去了第一控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。可选地,第二报文可以包括ip头,第一控制信息可以携带在第二报文的ip头中。第二报文的ip头可以由第一报文原有的ip头重新封装得到,那么通过将第一控制信息直接携带在ip头中,可以让ip头发挥路由功能的基础上,同时顺便发挥承载第一控制信息的功能,这样同样也可以免去第一控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。可选地,第二报文的srh可以包括tlv,第一控制信息可以携带在srh中的tlv中。通过这种方式,利用了srh通过tlv来携带信息的能力,同样也可以免去第一控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。可选地,第二报文还包括第二缓存表项的标识,第二代理节点确定第一控制信息还指示以第二缓存表项的标识为索引查询第一报文对应的srh,第二代理节点在查询缓存的过程中,可以使用第二缓存表项的标识为索引,查询第二代理节点的缓存,从第二缓存表项得到第一报文对应的srh。通过这种方式,由于存储srh的缓存表项相对于代理节点来说通常是固定的,不会由于流标识的修改而改变,因此以缓存表项的标识为索引,能够查询到修改了流标识的报文的srh,从而向修改了流标识的报文恢复srh。基于这种方式,即使sf是nat功能的sf,使得报文在传输过程中流标识被改变,代理节点也能够恢复srh,因此可以让代理节点支持接入nat功能的sf,从而为实现了nat功能的sf提供动态代理功能。可选地,第二报文还可以包括第一代理节点历史存储第一报文对应的srh的第一缓存表项的标识,第二代理节点确定第一控制信息还指示以第一缓存表项的标识相映射的第二缓存表项的标识为索引查询第一报文对应的srh,那么第二代理节点在查询缓存的过程中,可以根据第一缓存表项的标识,查询第一缓存表项的标识与第二缓存表项的标识之间的映射关系,得到第二缓存表项的标识,以第二缓存表项的标识为索引,查询第二代理节点的缓存,从第二缓存表项得到第一报文对应的srh。通过这种方式,代理节点通过维护本端的缓存表项与对端的缓存表项之间的映射关系,当第一代理节点未从本地缓存未找到srh时,可以将缓存表项的标识传输至第二代理节点,利用控制信息,指示第二代理节点结合映射关系,找到第二代理节点上存储srh的缓存表项,从而从该缓存表项找到报文的srh,从而向修改了流标识的报文恢复srh。基于这种方式,即使sf是nat功能的sf,使得报文在传输过程中流标识被改变,代理节点也能够恢复srh,因此可以让代理节点支持接入nat功能的sf,从而为实现了nat功能的sf提供动态代理功能。可选地,第二代理节点在查询缓存之前,可以确定业务功能节点的业务功能包括对流标识进行修改。通过这种方式,如果sf节点将修改了流标识的报文返回给代理节点,由于存储srh的缓存表项相对于代理节点来说通常是固定的,不会由于流标识的修改而改变,因此存储srh时缓存表项的标识和查询srh时缓存表项的标识能够保持一致,因此以缓存表项的标识为索引,能够查询到修改了流标识的报文的srh,从而向修改了流标识的报文恢复srh。那么,即使sf是nat功能的sf,使得报文在传输过程中流标识被改变,代理节点也能够恢复srh,因此可以让代理节点支持接入nat功能的sf,从而为实现了nat功能的sf提供动态代理功能。可选地,第二代理节点在查询缓存的过程中,第二代理节点可以使用第一报文对应的流标识和业务功能节点对应的端点动态代理sid为索引,查询第二代理节点的缓存,得到第一报文对应的srh。其中,第二报文对应的流标识为第一报文对应的流标识。通过这种可选方式,提供了一种支持srv6vpn场景下提供动态代理服务的方法,在sf节点实现vpn业务的场景下,考虑到不同vpn的报文可能出现流标识相同的情况,那么如果仅使用流标识为索引查询缓存,可能发生同时命中多个vpn的报文对应的srh的情况,那么第二代理节点就无法确定在接收到的报文的基础上封装哪个srh,导致srh恢复失败。而通过不仅使用流标识,还使用end.ad.sid为索引,可以保证不同vpn的报文的索引通过end.ad.sid区别开,因此可以避免通过同一个索引命中多个vpn的报文的srh的情况,保证查询的准确性。可选地,第二代理节点查询缓存之前,还可以根据第二报文携带的sf节点所属的虚拟专用网络vpn的vpn标识,查询端点动态代理sid与vpn标识之间的映射关系,得到vpn标识对应的端点动态代理sid。通过这种方式,通过建立end.ad.sid和报文携带的vpn标识之间的映射关系,使得end.ad.sid会映射为报文中携带的vpn标识,因此第二代理节点能够结合接收到的报文携带了哪个vpn标识以及预先建立的映射关系,来确定要用哪个end.ad.sid作为索引,进而利用确定出的索引从缓存中找到srh。可选地,第二代理节点根据vpn标识,查询端点动态代理sid与vpn标识之间的映射关系之前,第二代理节点还可以接收配置指令,配置指令包括每个vpn中的业务功能节点对应的端点动态代理sid,根据配置指令,存储端点动态代理sid与vpn标识之间的映射关系。通过这种分配end.ad.sid的方式,end.ad.sid能够作为vpn的标识,不同vpn的sf节点发来的报文中携带的end.ad.sid会不同,通过不同的end.ad.sid,能够区分不同vpn的报文。可选地,第二代理节点查询缓存之前,第二代理节点还可以接收第四报文,第四报文包括第一报文对应的srh,第四报文的目的地址为端点动态代理sid,第四报文对应的流标识为第一报文对应的流标识,第二代理节点以第一报文对应的流标识和端点动态代理sid为索引,在第二缓存表项中存储第一报文对应的srh。通过这种方式,通过以流标识和end.ad.sid为索引,来存储srh,能够让不同vpn的报文的srh的索引能够通过不同的end.ad.sid区别开,从而保证不同vpn的报文的srh的索引不同,使得不同vpn的报文的srh得以分开存储,实现不同vpn的信息隔离。可选地,第二代理节点通过第一链路与第一代理节点相连,第二代理节点在接收第二报文的过程中,通过对应于第一链路的第一入接口,从第一代理节点接收第二报文。通过这种方式,使用对等链路来作为第二报文的转发路径,使得第二报文能够通过对等链路传输至第二代理节点本地。第二代理节点通过第三链路与路由节点相连,路由节点通过第二链路与第一代理节点相连,第二代理节点在接收第二报文的过程中,通过对应于第三链路的第二入接口,从路由节点接收第二报文,第二报文由第一代理节点通过第二链路发送至路由节点。通过这种方式,使用了基于路由节点转发的路径来作为第二报文的转发路径,使得第二报文经过路由节点的转发后传输至第二代理节点本地。第三方面,提供了一种第一代理节点,该第一代理节点具有实现上述第一方面或第一方面任一种可选方式中报文传输的功能。该第一代理节点包括至少一个模块,至少一个模块用于实现上述第一方面或第一方面任一种可选方式所提供的报文传输方法。第三方面提供的第一代理节点的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。第四方面,提供了一种第二代理节点,该第二代理节点具有实现上述第二方面或第二方面任一种可选方式中报文传输的功能。该第二代理节点包括至少一个模块,至少一个模块用于实现上述第二方面或第二方面任一种可选方式所提供的报文传输方法。第四方面提供的第二代理节点的具体细节可参见上述第二方面或第二方面任一种可选方式,此处不再赘述。第五方面,提供了一种第一代理节点,该第一代理节点包括处理器,该处理器用于执行指令,使得该第一代理节点执行上述第一方面或第一方面任一种可选方式所提供的报文传输方法。第五方面提供的第一代理节点的具体细节可参见上述第一方面或第一方面任一种可选方式,此处不再赘述。第六方面,提供了第二代理节点,该第二代理节点包括处理器,该处理器用于执行指令,使得该第二代理节点执行上述第二方面或第二方面任一种可选方式所提供的报文传输方法。第六方面提供的第二代理节点的具体细节可参见上述第二方面或第二方面任一种可选方式,此处不再赘述。第八方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令由处理器读取以使第一代理节点执行上述第一方面或第一方面任一种可选方式所提供的报文传输方法。第九方面,提供了一种计算机可读存储介质,该存储介质中存储有至少一条指令,该指令由处理器读取以使第二代理节点执行上述第二方面或第二方面任一种可选方式所提供的报文传输方法。第十方面,提供了一种计算机程序产品,当该计算机程序产品在第一代理节点上运行时,使得第一代理节点执行上述第一方面或第一方面任一种可选方式所提供的报文传输方法。第十一方面,提供了一种计算机程序产品,当该计算机程序产品在第二代理节点上运行时,使得第二代理节点执行上述第二方面或第二方面任一种可选方式所提供的报文传输方法。第十二方面,提供了一种芯片,当该芯片在第一代理节点上运行时,使得第一代理节点执行上述第一方面或第一方面任一种可选方式所提供的报文传输方法。第十三方面,提供了一种芯片,当该芯片在第二代理节点上运行时,使得第二代理节点执行上述第二方面或第二方面任一种可选方式所提供的报文传输方法。第十四方面,提供了一种报文传输系统,该报文传输系统包括第一代理节点以及第二代理节点,该第一代理节点用于执行上述第一方面或第一方面任一种可选方式所述的方法,该第二代理节点用于执行上述第二方面或第二方面任一种可选方式所述的方法。附图说明图1是本申请实施例提供的一种sfc的系统架构图;图2是本申请实施例提供的一种srv6sfc中执行代理操作的示意图;图3是本申请实施例提供的一种双归接入的系统架构图;图4是本申请实施例提供的一种双归接入的系统架构图;图5是本申请实施例提供的一种报文传输方法的流程图;图6是本申请实施例提供的一种第一报文的示意图;图7是本申请实施例提供的一种第一报文的示意图;图8是本申请实施例提供的一种第一报文的示意图;图9是本申请实施例提供的一种第二报文的示意图;图10是本申请实施例提供的一种第二报文的示意图;图11是本申请实施例提供的一种第二报文的示意图;图12是本申请实施例提供的一种第二报文的示意图;图13是本申请实施例提供的一种第一代理节点与第二代理节点的网络拓扑图;图14是本申请实施例提供的一种第二报文的示意图;图15是本申请实施例提供的一种第二报文的示意图;图16是本申请实施例提供的一种第二报文的示意图;图17是本申请实施例提供的一种第二报文的示意图;图18是本申请实施例提供的一种第一代理节点与第二代理节点的网络拓扑图;图19是本申请实施例提供的一种流量规划的示意图;图20是本申请实施例提供的一种扩展头的示意图;图21是本申请实施例提供的一种绕行sid的示意图;图22是本申请实施例提供的一种第一报文演变至第二报文的示意图;图23是本申请实施例提供的一种第一报文演变至第二报文的示意图;图24是本申请实施例提供的一种第一报文演变至第二报文的示意图;图25是本申请实施例提供的一种第一报文演变至第二报文的示意图;图26是本申请实施例提供的一种第三报文的示意图;图27是本申请实施例提供的一种第二报文演变至第三报文的示意图;图28是本申请实施例提供的一种第二报文演变至第三报文的示意图;图29是本申请实施例提供的一种第二报文演变至第三报文的示意图;图30是本申请实施例提供的一种报文传输方法的流程图;图31是本申请实施例提供的一种第四报文的示意图;图32是本申请实施例提供的一种第五报文的示意图;图33是本申请实施例提供的一种第五报文的示意图;图34是本申请实施例提供的一种第五报文的示意图;图35是本申请实施例提供的一种第五报文的示意图;图36是本申请实施例提供的一种第五报文的示意图;图37是本申请实施例提供的一种第五报文的示意图;图38是本申请实施例提供的一种第五报文的示意图;图39是本申请实施例提供的一种第五报文的示意图;图40是本申请实施例提供的一种更新段列表的示意图;图41是本申请实施例提供的一种更新段列表的示意图;图42是本申请实施例提供的一种流量规划的示意图;图43是本申请实施例提供的一种第四报文演变至第五报文的示意图;图44是本申请实施例提供的一种第四报文演变至第五报文的示意图;图45是本申请实施例提供的一种第四报文演变至第五报文的示意图;图46是本申请实施例提供的一种第四报文演变至第五报文的示意图;图47是本申请实施例提供的一种报文传输方法的流程图;图48是本申请实施例提供的一种nat场景下报文传输的示意图;图49是本申请实施例提供的一种报文传输方法的流程图;图50是本申请实施例提供的一种nat场景下报文传输的示意图;图51是本申请实施例提供的一种报文传输方法的流程图;图52是本申请实施例提供的第一状态机的示意图;图53是本申请实施例提供的第二状态机的示意图;图54是本申请实施例提供的一种第一代理节点的结构示意图;图55是本申请实施例提供的一种第二代理节点的结构示意图;图56是本申请实施例提供的一种网络设备的结构示意图;图57是本申请实施例提供的一种计算设备的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。本申请中术语“至少一个”的含义是指一个或多个,本申请中术语“多个”的含义是指两个或两个以上,例如,多个第二报文是指两个或两个以上的第二报文。本文中术语“系统”和“网络”经常可互换使用。本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。应理解,在本申请的各个实施例中,各个过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。以下,示例性介绍业务功能链的系统架构。传统电信网络的业务功能(如防火墙、负载均衡等)通常与硬件资源紧密耦合,各个业务节点的产品形态为专用的设备,导致部署复杂,并且难以扩容、迁移和升级。而sfc将每种业务功能虚拟为一个sf节点,通过组合多个sf节点得到一个有序的业务功能集合,即业务功能链。在sfc中,流量会按照指定的顺序经过一条业务链中的各个sf节点,通过各个sf节点依次对报文进行处理,从而完成业务处理流程。通过sfc技术,一方面,能够将业务功能与硬件资源解耦,从而方便了业务的灵活开通和快速部署。例如,如果开通了新业务,可以免去传统电信网络中对硬件设备改造和升级的繁琐操作,通过向sfc提供的业务链增加新的sf节点,即可基于新增的sf节点来支持新业务的运行。另一方面,sfc能够灵活地和其他虚拟化技术结合起来,例如,sfc可以和网络功能虚拟化(英文:networkfunctionvirtualization,简称:nfv)结合,则nfv中的nfv管理节点,比如网络功能虚拟化管理器(英文:networkfunctionsvirtualisationmanager,简称:vnfm)等,能够充当sfc的控制面来控制sfc中的各个节点;又如,sfc可以和软件定义网络(英文:softwaredefinednetwork,简称:sdn)结合,则sdn中的sdn控制器(英文:sdncontroller)能够充当sfc的控制面来控制sfc中的各个节点。sfc的系统架构可以包括多种节点,每种节点分别具有对应的功能,不同节点相互协同来实现业务链的整体功能。通常情况下,sfc的系统架构可以包括流分类器(英文:classifier,简称:cf)、sf节点、代理(英文:proxy)节点、业务功能转发(英文:servicefunctionforwarder,简称:sff)节点以及路由(英文:router)节点。例如,参见图1,图1是本申请实施例提供的一种sfc的系统架构图。在图1中,sf节点为sf节点1、sf节点2、sf节点3或sf节点4,sff节点为sff节点1或sff节点2,代理节点为代理节点1或代理节点2,路由节点为路由节点1或路由节点2。图1中的业务功能链域(sfcdomain,sfc域)是指使能了sfc的节点的集合。需要说明的一点是,sff节点和代理节点可以集成在同一设备中,即,sff节点所在的硬件设备同时实现了代理节点的功能。例如,参见图1,sff节点1和代理节点1位于同一硬件设备中,sff节点2和代理节点2位于同一硬件设备中。流分类器可以是sfc的入口路由器,流分类器用于对接收的流量按照分类规则进行分类,如果流量满足分类标准,则流分类器会将流量转发,使得流量进入sfc提供的业务链。通常情况下,流分类器确定流量满足分类标准后,会向流量对应的每个报文添加sfc信息,使得报文基于sfc信息,在网络中按照业务功能链对应的顺序,依次到达各个sf节点,从而被各个sf节点依次进行业务处理。流分类器可以是路由器、交换机或者其他网络设备。sf节点用于对报文进行业务处理。通常来讲,sf节点可以和一个或多个sff节点连接,sf节可以从一个或多个sff节点接收到待处理的报文。sf节点对应的业务功能可以根据业务场景设置。例如,sf节点对应的业务功能可以是用户认证、防火墙、nat、带宽控制、病毒检测、云存储、深度包检测(英文:deeppacketinspection,简称:dpi)、入侵检测或者入侵防御等。sf节点可以是服务器、主机、个人计算机、网络设备或者终端设备。sff节点用于根据sfc信息,将接收到的报文转发至sf节点。通常情况下,sf节点对报文处理结束后,会将报文返回至同一个sff节点,即之前向sf节点发送处理前的报文的sff节点,sff节点会将处理后的报文返回至网络。sff节点可以是路由器、交换机或者其他网络设备。sff节点以及sf节点可以作为sfc的数据面。在一个实施例中,sff节点和sf节点可以建立隧道,sff节点和sf节点之间可以通过隧道来传输报文。其中,该隧道可以是虚拟扩展局域网(英文:virtualextensiblelocalareanetwork,简称:vxlan)、通用路由封装(英文:genericroutingencapsulation,简称:gre)隧道(tunnel)、移动ip数据封装和隧道(英文:ip-in-ip)等。在另一个实施例中,sff节点和sf节点之间可以不通过隧道传输报文,而是直接传输ip报文或者以太网(ethernet)报文。sfc的数据面可以通过sfc的控制面来控制。sfc的控制面可以包括一个或多个sfc控制器。例如,参见图1,sfc控制器可以是sdn控制器、nfv管理节点1或者nfv管理节点1。在一个实施例中,在报文传输之前,sfc的客户端可以将业务功能链的属性、配置、策略等信息发送至sfc控制器,sfc控制器可以根据客户端发送的信息以及sfc的拓扑,生成业务功能链相关的信息,例如待进入sfc的报文的分类规则、业务功能链对应的每个sf节点的标识等发送至流分类器以及sfc中的其他节点,以使流分类器基于sfc控制器发来的信息,对接收到的报文进行分类以及添加sfc信息。应理解,图1所示的sfc的系统架构中各个节点的类型为可选方式,本申请实施例中sfc的系统架构中节点的类型可以比图1所示的更多,此时sfc的系统架构还可以包括其他类型的节点;或者,sfc的系统架构中节点的类型也可以比图1所示的更少,本申请实施例对sfc的系统架构中节点的类型不做限定。应理解,图1所示的sfc的系统架构中各个节点的数量为可选方式,本申请实施例中sfc的系统架构中节点的数量可以比图1所示的更多,或者比图1所示的更少,例如,上述路由节点可以仅为一个,或者上述路由节点为几十个或几百个,或者更多数量;又如,上述sf节点为几十个或几百个,或者更多数量,本申请实施例对sfc的系统架构中节点的数量不做限定。以上介绍了sfc的系统架构,sfc可以和srv6技术结合起来,这两种技术的结合通常称为srv6sfc。以下,对srv6sfc的系统架构进行示例性描述。分段路由(英文:segmentrouting,简称:sr)是基于源路由的理念而设计的在网络中转发数据包的一种协议。sr将转发路径划分为一个个段,为这些段以及网络中的节点分配分段标识(segmentid,sid),通过对sid进行有序排列,可以得到一个包含sid的列表,该列表在基于互联网协议第6版的分段路由(英文:segmentroutinginternetprotocolversion6,简称:srv6)通常称为段列表(sidlist,也称段标识列表),在分段路由多协议标签交换(英文:segmentroutingmulti-protocollabelswitching,简称:sr-mpls)通常称为标签栈。段列表可以指示一条转发路径。通过sr技术,可以指定携带了sidlist的报文经过的节点以及路径,从而满足流量调优的要求。做一个类比,报文可以比作行李,sr可以比作行李上贴的标签,如果要将行李从a地区发送到d地区,途径b地区和c地区,则可以在始发地a地区给行李贴上一个标签“先到b地区,再到c地区,最后到d地区”,这样一来,各个地区只需识别行李上的标签,依据行李的标签将行李从一个地区转发至另一个地区即可。在sr技术中,源节点会向报文添加标签,中间节点可以根据标签转发至下一个节点,直至报文到达目的节点。例如在报文的包头中,插入<sid1,sid2,sid3>,则报文会首先转发给sid1对应的节点,之后转发给sid2对应的节点,之后转发给sid3对应的节点。srv6是指将sr技术应用在ipv6网络中,使用128比特的ipv6地址来作为sid的形式。在转发报文时,支持srv6的节点会按照报文中的目的地址(destinationaddress,da),查询本地sid表(英文:localsidtable,也称本地段标识表或mysidtable),当报文的目的地址与本地sid表中的任一sid匹配时,确认目的地址命中了本地sid表,则基于该sid对应的拓扑、指令或服务,来执行相应的操作,例如,可以将报文从sid对应的出接口转发出去;如果报文的目的地址与本地sid表中的每个sid均不匹配,则根据目的地址查询ipv6的转发表(forwardinformationdatabase,fib),根据目的地址在fib中命中的表项转发报文。其中,本地sid表是指节点本地存储的包含sid的列表,为了将本地sid表和报文中携带的段列表区分描述,本地sid表的名称通常包含“本地(local)”的前缀。在srv6sfc的系统架构下,srv6的头节点可以是sfc中的流分类器,srv6的srv6节点可以是sfc中的路由节点、sff节点、代理节点或者sf节点。具体地,sfc信息可以采用srv6的封装格式,sfc信息可以是段列表,通过对报文中段列表中的sid进行编排,能够指明报文在sfc中的转发路径或者待对报文执行的各种业务处理操作。具体地,段列表中包含一个或多个依次排列的sid,每个sid在形式上是一个128比特的ipv6地址,每个sid在实质上能够表示拓扑、指令或服务,报文的目的地址为sl当前指向的段列表中的sid。sfc中的节点接收到报文后,会读取报文的目的地址,根据目的地址来执行转发操作。如果接收到报文的节点支持srv6,节点会根据目的地址查询本地sid表,当目的地址命中了本地sid表中的sid时,基于该sid对应的拓扑、指令或服务,来执行相应的操作,当目的地址未命中本地sid表中的sid时,节点会根据目的地址查询ipv6的fib,根据目的地址在fib中命中的表项转发报文。如果接收到报文的节点不支持srv6,则节点会直接根据目的地址查询ipv6的fib来转发报文。在一些场景下,sf节点可以是不支持srv6的节点,即不感知srv6的(英文:srv6-unaware)节点,sf节点本身可能无法识别srh,此时可以通过代理节点,保证不识别srh的sf节点也能正常处理报文。代理节点用于代理sf节点识别srh,将报文的srh剥离,将不包含srh的报文转发给sf节点,那么由于sf节点接收到的报文不包含srh,使得不支持srv6的sf节点能够处理报文。参见图2,图2是本申请实施例提供的一种srv6sfc中执行代理操作的示意图。代理节点能够和sff节点以及sf节点通信,代理节点会代理sf节点从sff节点接收到包含srh的报文;代理节点会从报文剥离srh,得到不包含srh的报文,通过出接口发送不包含srh的报文。sf节点会通过入接口接收到不包含srh的报文,对报文进行处理后,通过出接口发送不包含srh的报文,代理节点会接收不包含srh的报文,对报文封装srh,得到包含srh的报文,将包含srh的报文通过出接口发送出去,以使报文返回至sff节点。代理节点可以是网络设备,例如路由器或者交换机,代理节点也可以是服务器、主机、个人计算机或者终端设备。代理节点可分为动态代理、静态代理、共享内存代理以及伪代理等类型,其中,动态代理与静态代理的区别在于,动态代理操作中会对剥离的srh进行缓存,而静态代理操作中会对剥离的srh进行丢弃。应理解,上文描述的sff节点和代理节点集成设置仅是可选方式,在另一个实施例中,sff节点和代理节点也可以分别设置在不同的硬件设备中,sff节点所在的硬件设备可以和代理节点所在的硬件设备通过网络进行通信。以上介绍了srv6sfc的整体架构,以下示例性介绍基于srv6sfc实现双归接入的系统架构。双归接入是一种通过部署冗余的链路和/或冗余的设备,来提升网络可靠性的架构。应用在srv6sfc中,双归接入可以是sf节点双归接入至代理节点,即,同一个sf节点同时接入了两个代理节点。通过基于srv6sfc实现双归接入,需要发给sf节点处理的报文从路由节点出发,可以经过某一个代理节点到达sf节点,也可以经过另一个代理节点到达sf节点,通过冗余的路径,可以大大提升网络的可靠性。示例性地,参见图3,图3是本申请实施例提供的一种双归接入系统的架构图,该系统包括第一代理节点101、第二代理节点102、sf节点103以及路由节点104,第一代理节点101与第二代理节点102连接到同一个sf节点103。该系统中的每个节点可以是sfc中的节点。例如,第一代理节点101可以是图1中的代理节点1,第二代理节点102可以是图1中的代理节点2,sf节点103可以是图1中的sf节点1或sf节点2,路由节点104可以是图1中的路由节点2。图3所示的系统中不同节点之间可以建立链路,通过链路相连。例如,在图3中,第一代理节点101可以通过第一链路与第二代理节点102相连,第一代理节点101可以通过第二链路与路由节点104相连,路由节点104可以通过第三链路与第二代理节点102相连,第一代理节点101可以通过第四链路与sf节点103相连,第二代理节点102可以通过第五链路与sf节点103相连。第一代理节点101以及第二代理节点102可以是关系对等的节点,即,第一代理节点101以及第二代理节点102在报文传输过程中的功能相同,或者说扮演的角色相同。对于第一代理节点101而言,第一代理节点101可以记为本地代理(英文:localproxy),第二代理节点102可以记为对端代理(英文:peerproxy)。同理地,对于第二代理节点102而言,第二代理节点102可以记为localproxy,第一代理节点101可以记为peerproxy。第一代理节点101与第二代理节点102之间的链路可以记为对等链路(英文:peerlink)。由于第一代理节点101与第二代理节点102关系对等,通常情况下,路由节点104可以选择将接收到的报文发送至第一代理节点101,也可以选择将接收到的报文发送至第二代理节点102,因此,报文既可以从第一代理节点101转发至sf节点103,也可以从第二代理节点102转发至sf节点103。同理地,sf节点103对报文处理后,可以选择将处理后的报文发送至第一代理节点101,也可以选择将处理后的报文发送至第二代理节点102,因此,处理后的报文既可以从第一代理节点101返回至路由节点104,也可以从第二代理节点102返回至路由节点104。由此可见,sf节点103通过同时接入至第一代理节点101以及第二代理节点102,实现了双归接入的功能。通过进行双归接入,一方面,能够实现负载分担的功能,对于待传输至sf节点103的报文而言,既可以通过第一代理节点101对报文执行动态代理操作,也可以通过第二代理节点102对报文执行动态代理操作,从而利用两个代理节点共同进行动态代理操作,减轻单个代理节点处理报文的压力。此外,对于sf节点103处理后的报文而言,报文既可以通过第一代理节点101返回至路由节点104,也可以通过第二代理节点102返回至路由节点104,从而达到对sf节点103处理后的流量进行分流的效果,减轻单个代理节点转发报文的压力,此外,报文通过在两条链路上传输,从而加大了传输带宽,因此提高了传输速度。另一方面,能够提高传输可靠性,如果第一代理节点101或者第四链路故障,报文仍可以通过第二代理节点102返回至路由节点104,如果第二代理节点102或者第五链路故障,报文仍可以通过第一代理节点101返回至路由节点104,从而避免单个代理节点故障后导致报文传输中断的问题。应理解,图3所示的组网方式仅是可选方式。在图3中,第一代理节点101以及第二代理节点102通过部署了对等链路,能够提高网络的可靠性,在故障场景下,到达第一代理节点101的流量可以通过对等链路绕行至第二代理节点102,从而避免占用路由节点与代理节点之间的带宽。在另一个实施例中,双归接入系统也可以采用其他的方式组网。例如,参见图4,第一代理节点101与第二代理节点102之间可以不部署对等链路,这种组网的部署较为简单,并且免去了对等链路占用的出接口,从而节省第一代理节点101的接口资源以及第二代理节点102的接口资源。应理解,图3或图4所示的各个链路可以是一跳ip链路,也可以是多跳ip链路的组合。如果两个节点通过多跳ip链路相连,则两个节点之间的转发路径可以经过一个或多个中间节点,该中间节点可以转发该两个节点之间的报文。本实施例对各个链路包含的ip链路的跳数并不做限定。其中,如果两个节点位于一跳ip链路,可以称两个节点on-link,从ip路由的角度来说,两个节点是一跳可达的。例如,在两个节点之间转发ipv4报文的情况下,当一个节点发送了ipv4报文时,该ipv4报文中的生存时间值(timetolive,ttl)减一后,即可到达另一个节点。又如,在两个节点之间转发ipv6报文的情况下,当一个节点发送了ipv6报文时,该ipv4报文中的跳数限制(hop-limit)减一后,即可到达另一个节点。需要说明的一点是,两个节点位于一跳ip链路,并不代表两个节点在物理上必须直接连接。两个节点位于一跳ip链路包含两个节点在物理上直接连接的情况,当然也包含两个节点在物理上不是直接连接的情况。例如,当两个节点之间通过一个或多个二层交换机相连时,两个节点也可以称为位于一跳ip链路。此外,如果两个节点位于多跳ip链路,可以称两个节点off-link,从ip路由的角度来说,两个节点经过多跳路由可达。应理解,图3或图4描述的双归接入系统仅是可选方式,sfc中具有两个关系对等的代理节点也仅是可选方式。在另一个实施例中,sfc中可以具有两个以上的关系对等的代理节点,任一个代理节点的peerproxy可以不仅是一个,而是多个,任一个代理节点接入的peerlink可以不仅是一条,而是多条,代理节点可以通过每条peerlink,分别和对应的peerproxy连接。以上介绍了srv6sfc双归接入的系统架构,以下示例性介绍基于上文提供的系统架构传输报文的方法流程。参见图5,图5是本申请实施例提供的一种报文传输方法的流程图,如图5所示,该方法的交互主体包括第一代理节点、第二代理节点、sf节点以及路由节点。其中,该第一代理节点可以为图3或图4中的第一代理节点101,该第二代理节点可以为图3或图4中的第二代理节点102,该sf节点可以为图3或图4中的sf节点103,该路由节点可以为图3或图4中的路由节点104,该方法可以包括以下步骤:步骤501、sf节点向第一代理节点发送第一报文。第一报文可以是sf节点进行业务功能处理后得到的报文。第一报文可以不包括srh,第一报文对应的srh可以预先被第一代理节点或第二代理节点剥离,第一报文需要恢复出对应的srh,通过srh继续在网络中转发。第一报文可以是数据报文。第一报文可以是ipv4报文、ipv6报文或者以太网(英文:ethernet)帧。可选地,第一报文还可以包括隧道头。具体而言,第一代理节点可以和sf节点建立传输隧道,第一报文可以包括该传输隧道对应的隧道头。其中,第一代理节点和sf节点之间的传输隧道可以是vxlan、gre或者ip-in-ip等,相应地,第一报文的隧道头可以是vxlan隧道头、gre隧道头或者ip-in-ip隧道头等。在一些实施例中,隧道头可以包括源地址、目的地址和vpn标识。隧道头中的源地址用于标识sf节点,隧道头中的目的地址用于标识第一代理节点。其中,可以预先在sf节点上配置sf节点的地址和第一代理节点的地址。sf节点生成第三报文的过程中,可以查询配置,得到sf节点的地址,将其写入隧道头的源地址;并且得到入第一代理节点的地址,将其写入隧道头的目的地址。其中,sf节点和第一代理节点上配置的地址可以相互引用,例如,sf节点上配置的sf节点的地址可以和第一代理节点上配置的sf节点的地址可以相同,sf节点上配置的第一代理节点的地址可以和第一代理节点上配置的第一代理节点的地址可以相同。隧道头中的源地址和目的地址的形式可以根据配置操作确定,例如可以是ipv4地址的形式,也可以是ipv6地址的形式,当然也可以根据需求被配置为其他形式。示例性地,参见图6、图7和图8,图6是本申请实施例提供的一种第一报文的示意图,图6以第一报文为ipv4报文为例进行说明,第一报文的报文头包括ipv4头。图7是本申请实施例提供的一种第一报文的示意图,图7以第一报文为ipv6报文为例进行说明,第一报文的报文头包括ipv6头。图8是本申请实施例提供的一种第一报文的示意图,图8以第一报文为以太网帧为例进行说明,第一报文的报文头包括mac帧头。步骤502、第一代理节点从sf节点接收第一报文,查询第一代理节点的缓存,未得到第一报文对应的srh。第一代理节点会根据第一报文,查询本地的缓存表项。然而,在多种场景下,第一代理节点可以发生缓存未命中(cachemiss)事件,即,没有在缓存中查找到第一报文对应的srh,导致无法对第一报文恢复srh。示例性地,可以在以下场景一至场景五中的任一种下,触发缓存未命中事件。场景一、缓存丢失例如,第一代理节点可以发生故障,由于故障导致缓存的srh丢失,那么第一代理节点从故障状态恢复后,将导致无法从缓存中查找到srh。又如,第一代理节点发生掉电,由于缓存属于易失性存储,断电会导致缓存的srh丢失,那么第一代理节点重新上电后,将导致无法从缓存中查找到srh。再如,第一代理节点的单板或整机发生了重启,也可能会导致缓存丢失。场景二、缓存老化第一代理节点可以具有路由老化功能,可以为缓存表项启动老化定时器,为缓存表项设置对应的老化标志(agingflag),该老化标志用于标识缓存表项是否已经老化,老化标志的取值可以是1或0。第一代理节点可以通过老化定时器定期扫描缓存中的每个缓存表项,如果扫描到任一条缓存表项对应的老化标志为1,则将老化标志修改为0,如果扫描到任一条缓存表项对应的老化标志为0,则删除缓存表项。此外,第一代理节点在转发报文的过程中,如果查询缓存时命中了某条缓存表项,则第一代理节点将该缓存表项对应的老化标志设置为1。通过路由老化功能,能够将访问频次高的缓存表项驻留在缓存中,而清除访问频次低的缓存表项,释放访问频次低的缓存表项占用的缓存空间,从而节约缓存资源。在提供路由老化功能的情况下,如果用于存储第一报文对应的srh的缓存表项超时未命中,则该缓存表项对应的老化标志会被设置为0,使得该缓存表项被清除,那么第一代理节点后续在查询缓存时,会查找不到第一报文对应的srh。场景三、缓存清除如果用户对第一代理节点进行设备维护,或者执行了误操作,可能会手动清除了第一代理节点的缓存表项,那么缓存表项被清除后,第一代理节点后续在查询缓存时,会查找不到第一报文对应的srh。场景四、未存储过第一报文对应的srh与场景一至场景三相区别,场景一至场景三中,第一代理节点在接收到第一报文之前,历史存储过第一报文对应的srh,而在接收到第一报文时,缓存中未存储第一报文对应的srh。而场景四中,第一代理节点始终未存储第一报文对应的srh,也就是说第一报文对应的srh未在缓存中存储过,导致第一代理节点无法从缓存中查找到第一报文对应的srh。在一个示例性场景中,参见图3或图4,路由节点104接收到srv6报文后,可以将srv6报文发给第二代理节点102;第二代理节点102剥离srv6报文的srh,缓存srv6报文的srh,将srv6报文的载荷发给sf节点103;sf节点103根据载荷进行处理后,生成第一报文,发给第一代理节点101,第一代理节点101接收到第一报文后,由于第一报文对应的srv6报文之前不是由第一代理节点之前发给sf节点的,而是由第二代理节点发给sf节点的,第一报文对应的srh在第二代理节点102的缓存中,而未在第一代理节点101的缓存中,这种情况下,第一代理节点101由于没有缓存第一报文对应的srh,导致无法查找到第一报文对应的srh。在一个实施例中,第一报文可以包括代理节点标识,该代理节点标识用于标识向sf节点发送了srv6报文的载荷的代理节点,该代理节点标识可以是代理节点的设备id。第一代理节点接收到第一报文时,可以识别第一报文中的代理节点标识,判断代理节点标识是否为第一代理节点的标识,如果代理节点标识不是第一代理节点的标识,第一代理节点可以确认第一报文对应的srv6报文之前不是本端发给sf节点的,则执行下述步骤503。其中,第一代理节点可以确定代理节点标识对应的代理节点,作为第二报文要发往的第二代理节点。示例性地,如果代理节点1接收到第一报文后,发现第一报文中的代理节点标识是代理节点2的设备id,则确认第一报文对应的srv6报文之前不是代理节点1发给sf节点的,而是代理节点2发给sf节点的,那么代理节点1将第一报文重新封装为第二报文,将第二报文发给代理节点2。场景五、nat与场景一至场景四相区别的是,场景一至场景四导致缓存未命中的原因是第一报文对应的srh不在缓存中,而场景五导致缓存未命中的原因是,第一报文对应的srh的索引被修改。也即是,即使第一报文对应的srh仍然在缓存中,由于查询过程中使用的索引与srh不对应,也会导致无法从缓存中查找到索引对应的srh。具体地,nat的场景是指sf节点的业务功能包括对流标识进行修改。第一代理节点预先在存储srh的过程中,通常使用第一报文对应的流标识为key,存储第一报文对应的srh。在nat的场景下,sf节点对报文进行业务处理后,通常情况下,处理后的报文对应的流标识会与处理前的报文对应的流标识不一致,导致第一代理节点利用处理后的报文对应的流标识,无法查找到对应的srh。例如,如果sf节点的业务功能包括进行nat,sf节点会对报文的五元组进行修改,则处理后的报文的五元组会与处理前的报文的五元组不一致。在一个示例性场景中,如果sf节点是防火墙,sf节点通常会包括目的地址转换(destinationnetworkaddresstranslation,dnat)的业务功能,sf节点会存储有地址池,会将报文中的目的地址替换为地址池中的某一地址,将目的地址替换后的报文返回给第一代理节点,使得第一代理节点接收到的报文的目的地址会之前向sf节点发送的报文的目的地址不同,那么使用接收到的报文的目的地址对应的五元组来查找srh时,会导致无法查找到srh。本实施例中,在各种缓存未命中的场景下,虽然第一代理节点本端无法执行恢复srh的任务,而第一代理节点可以通过执行下述步骤503至步骤504,将报文重新封装后转发给第二代理节点,由第二代理节点代替第一代理节点来恢复srh,从而保证报文的srh得以恢复。步骤503、第一代理节点根据第一报文和对应于第二代理节点的第一绕行sid,生成第二报文。第二报文:用于控制对端代理节点恢复srh的报文。第二报文包括第一绕行sid、第一控制信息和第一报文的载荷。第二报文的源地址可以存在多种情况,例如,第二报文的源地址可以是对应于第一代理节点的第二绕行sid、第一代理节点的ip地址、或其他能够标识第一代理节点的信息,或者,第二报文的源地址可以缺省。第二报文可以包括载荷,第二报文的载荷可以是第一报文的载荷,第二报文的载荷也可以就是第一报文本身,例如,参见图9、图10、图11、图12、图14、图15、图16和图17,第二报文的载荷可以包括第一报文的载荷和第一报文的报文头,该第一报文的报文头根据第一报文的具体类型确定,例如可以是ipv4头、ipv6头、mac帧头。绕行sid:是本实施例提供的一种新的sid。绕行sid用于将本端代理节点的报文发送至对端代理节点,即,将localproxy的报文发送至peerproxy。具体地,本端代理节点通过在报文的目的地址携带对端代理节点的绕行sid,能够将报文传输至对端代理节点,从而实现将报文从本端绕行至对端代理节点的功能。绕行sid可以称为end.adbsid,end.adbsid的含义是bypasssidforend.ad.sid(为动态代理操作扩展的一种具有绕行功能的sid)。end.adbsid的名字可以视为end.ad.sid和b的组合,其中“adb”中的“b”代表bypass,意为绕行,也可以翻译为旁路。绕行sid可以是ipv6地址的形式,绕行sid可以包括128个比特。绕行sid可以包括定位信息(locator)以及功能信息(function),绕行sid的格式为locator:function。其中,locator占据绕行sid的高比特位,function占据绕行sid的低比特位。可选地,绕行sid还可以包括参数信息(arguments),则绕行sid的格式为locator:function:arguments。在一个实施例中,绕行sid可以是节点sid,每个绕行sid可以唯一对应于一个代理节点,如果sfc的系统架构包括多个代理节点,则绕行sid可以存在多个,每个绕行sid对应于多个代理节点中的一个代理节点。如此,对于一个绕行sid而言,以该绕行sid为目的地址的报文能够唯一路由至一个代理节点,从而发送至该绕行sid对应的代理节点。而本实施例是以双归接入的系统架构为例进行描述,系统包括第一代理节点以及第二代理节点,为了区分描述,将对应于第二代理节点的绕行sid称为第一绕行sid。第一绕行sid用于将报文发送至第二代理节点。第一绕行sid可以由第一代理节点发布至网络中,则sfc中的其他节点可以接收到发布的第一绕行sid。此外,同理地,将对应于第一代理节点的绕行sid称为第二绕行sid。第二绕行sid用于将报文发送至第一代理节点。第二绕行sid可以由第二代理节点发布至网络中,则sfc中的其他节点可以接收到发布的第二绕行sid。关于第一代理节点获取第一绕行sid的方式,可以预先对第一代理节点进行配置操作,第一代理节点可以接收配置指令,从配置指令获取该第一绕行sid;第一代理节点可以对第一绕行sid进行存储,例如将第一绕行sid存储在第一代理节点的本地sid表中;第一代理节点接收到第一报文时,可以读取预先存储的第一绕行sid,从而得到第一绕行sid。其中,配置操作可以由用户在第一代理节点上执行,也可以由网络的控制器,例如sdn控制器或nfvm执行,本实施例对此不做限定。示例性地,第一代理节点可以接收以下配置指令:[proxy1]segment-routingipv6[proxy1-segment-routing-ipv6]locatort2ipv6-prefixb::64static32[proxy1-segment-routing-ipv6-locator]opcode::1end-adbpeer-sidc::2上述配置指令中proxy1表示第一代理节点,第一行配置指令的含义是要配置ipv6的sr,第二行配置指令的含义是locator(定位信息)是t2,ipv6的前缀是b::64,静态路由是32。第三行配置指令的含义是操作码是::1,对应于第二代理节点的第一绕行sid是c::2。同理地,可以预先对第二代理节点进行配置操作,第二代理节点可以接收配置指令,从配置指令获取该第二绕行sid,例如将第二绕行sid存储在第二代理节点的本地sid表中。示例性地,第二代理节点可以接收以下配置指令:[proxy2]segment-routingipv6[proxy2-segment-routing-ipv6]locatort2ipv6-prefixc::64static10[proxy2-segment-routing-ipv6-locator]opcode::2end-adbpeer-sidb::1上述配置指令中proxy2表示第二代理节点,第一行配置指令的含义是要配置ipv6的sr,第二行配置指令的含义是locator(定位信息)是t2,ipv6的前缀是c::64,静态路由是10。第三行配置指令的含义是操作码是::2,对应于第一代理节点的第二绕行sid是b::1。需要说明的一点是,第一代理节点和第二代理节点上配置的绕行sid可以是相互引用的关系,即,第一代理节点上配置的第一绕行sid引用第二代理节点,以指明该第一绕行sid是用来将报文传输至第二代理节点的,同理地,第二代理节点上配置的第二绕行sid引用第一代理节点,以指明该第二绕行sid是用来将报文传输至第一代理节点的。应理解,绕行sid和代理节点一一对应仅是示例性方式,在另一个实施例中,绕行sid和代理节点也可以具有其他对应关系,本实施例对此不做限定。第一控制信息用于指示第二代理节点恢复第一报文对应的srh。在一个实施例中,第一控制信息可以包括第一标志,第一标志用于标识srh是否命中了本地的缓存表项,可以记为缓存丢失标志(英文:cachemissflag)、cm或cm-flag。第一标志的长度为1比特。如果第一标志设置为0,表示srh已命中本地的缓存表项;如果第一标志设置为1,表示srh未命中本地的缓存表项。在本实施例中,第一控制信息中的第一标志可以设置为1,表示srh未命中第一代理节点本地的缓存表项,以便第二代理节点识别第一标志的取值为1后,可以查询第二代理节点本地的缓存表项,从而恢复srh。第二报文的格式可以有多种,第二报文的格式可以因网络拓扑结构和/或第一代理节点对路径规划的需求而产生差异,还可以因携带第一控制信息的方式的不同而产生差异。以下结合图9至图17,通过实现方式一和实现方式二进行举例说明。实现方式一、参见图9、图10、图11、图12,第二报文可以包括ip头。该ip头的目的地址(destinationaddress,da)为第一绕行sid。第二报文可以采用类似于ip-ip的报文格式,第二报文可以包含多个ip头。在第二报文中,以第一绕行sid为目的地址的ip头可以是第二报文的外层的ip头。以第一绕行sid为目的地址的ip头可以是ipv6头。例如,在第一报文是ipv6报文的情况下,第二报文可以包含第二报文本身的ipv6头,第二报文也包含第一报文的ipv6头,那么,在第二报文中,以第一绕行sid为目的地址的ip头可以是第二报文中外层的ipv6头,而第一报文的ipv6头可以是第二报文中内层的ipv6头。又如,在第一报文是ipv4报文的情况下,第二报文可以包含第二报文本身的ipv6头,第二报文也包含第一报文的ipv4头,那么,在第二报文中,以第一绕行sid为目的地址的ip头可以是第二报文中外层的ipv6头,第一报文的ipv4头可以是第二报文中内层的ipv4头。在一些实施例中,将第一绕行sid作为目的地址时,第二报文可以采用多种格式实现。例如,参见图9,第二报文可以包括ipv6头、扩展头和第二报文的载荷,其中,扩展头包括第一控制信息。在这种方式下,srh可以是第二报文的可选部分。也即是,第二报文可以例如图9所示的,不包括srh,也可以根据需求,使第二报文包括srh来携带一些信息。又如,参见图10,第二报文可以包括ipv6头和第二报文的载荷,其中,ipv6头中的目的地址,即第一绕行sid包括第一控制信息。在这种方式下,srh和扩展头均可以是第二报文的可选部分。也即是,第二报文可以例如图10所示的,不包括srh和扩展头,也可以根据需求,使第二报文包括srh或者扩展头来携带一些信息。又如,参见图11,第二报文可以包括ipv6头和第二报文的载荷,其中,ipv6头包括第一控制信息。在这种方式下,srh和扩展头均可以是第二报文的可选部分。也即是,第二报文可以例如图11所示的,不包括srh和扩展头,也可以根据需求,使第二报文包括srh或者扩展头来携带一些信息。此外,第一控制信息具体携带在图11中ipv6头的哪个位置可以根据需求设置,本实施例对此不做限定。又如,参见图12,第二报文可以包括ipv6头、srh和第二报文的载荷,其中,第二报文的srh的tlv包括第一扩展信息。其中,第二报文的srh可以包括段列表,该段列表包括第一绕行sid。可选地,在以第一绕行sid为目的地址的情况下,段列表可以仅包括一个sid,即第一绕行sid,而不包含其他sid,这种格式下,第二报文的srh的sl为0。另外,在这种方式下,扩展头可以是第二报文的可选部分。也即是,第二报文可以例如图12所示的,不包括扩展头,也可以根据需求,在第二报文中设置扩展头来携带一些信息。通过在第二报文中携带srh,达到的效果至少可以包括:可以利用srh中的一个或多个tlv以及段列表,来承载一些附加的信息,以便利用附加的信息来指令第二代理节点或者两个代理节点之间的中间节点执行指定的转发行为或某种业务,从而让第二报文具有良好的可扩展能力,便于将恢复srh的功能与其他功能搭配提供。实现方式一可以适于多种场景,以下通过场景一至场景三举例说明:场景一、第一代理节点与第二代理节点位于一跳ip链路(on-link)。on-link的具体概念还请参见上文,在此不做赘述。参见图13,图13是第一代理节点和第二代理节点位于一跳ip链路的示意。需要说明的是,虽然图13未示出,第一代理节点和第二代理节点之间可以存在二层交换机或者其他设备,本实施例并不限定第一代理节点和第二代理节点在物理上是直连的。在srv6网络中,srv6报文的ipv6头中的目的地址通常用来标识下一个转发报文的sr节点。因此,如果第一代理节点与第二代理节点位于一跳ip链路,第一代理节点通过在目的地址中携带第一绕行sid,能够指明第二报文的下一个sr节点即为第二代理节点。场景二、第一代理节点与第二代理节点位于多跳ip链路(off-link),而第一代理节点与第二代理节点之间的中间节点未使能sr功能。对于未使能sr功能的中间节点而言,当中间节点接收到第二报文时,可以根据第二报文的目的地址(即第一绕行sid),查询路由fib,根据目的地址在路由fib中命中的表项来转发报文。场景三、第一代理节点与第二代理节点位于多跳ip链路,而没有指定转发第二报文的中间节点的业务需求。场景三可以包括多种情况,可以包含中间节点使能了sr功能的情况,也可以包含中间节点未使能sr功能的情况。例如,如果该多跳ip链路组成了多条转发路径,而第一代理节点没有指定经过哪条转发路径转发第二报文的需求,那么在该中间节点使能sr功能和未使能sr功能的情况下,均可以在目的地址中携带第一绕行sid。又如,如果该多跳ip链路组成的转发路径唯一,比如说第一代理节点与第二代理节点之间仅存在一个中间节点,那么在该中间节点使能sr功能和未使能sr功能的情况下,第一代理节点无需指定中间节点,仍可使得第二报文经过该中间节点转发至第二代理节点。其中,对于使能sr功能的中间节点而言,当中间节点接收到第二报文时,可以根据第二报文的目的地址,即第一绕行sid来查询本地sid表,即将第一绕行sid与本地sid表中的每个sid进行匹配。那么由于第一绕行sid不是中间节点发布的sid,没有存储在中间节点的本地sid表中,中间节点会确定第一绕行sid未命中本地sid表,则中间节点会按照传统的ip路由方式来转发第二报文,具体地,中间节点会根据第一绕行sid,查询路由fib,根据目的地址在路由fib中命中的表项来转发第二报文。实现方式二、在一些实施例中,第二报文可以是srv6报文。例如,参见图14、图15、图16、图17,该第二报文包括ip头和第二报文的srh。其中,该ip头的目的地址为一个或多个目标sid中对应于下一个sr节点的sid。该一个或多个目标sid用于指示目标转发路径。目标sid可以是节点sid,也可以是链路sid,该目标sid可以标识第一代理节点与第二代理节点之间的一个中间节点、一条链路、一个或多个指令、一种服务或一个vpn,第二报文的srh中的目标sid的数量可以是一个,也可以是多个。该目标转发路径为该第一代理节点至该第二代理节点之间的路径。目标转发路径可以是显式路径(strictexplicit),即指定了每段链路或每个中间节点的路径;目标转发路径也可以是松散路径(looseexplicit),即指定了部分链路或部分中间节点的路径。目标转发路径可以是一条链路,也可以是多条链路的组合。目标转发路径可以是数据链路层的路径、物理层的路径或者通过隧道技术构建的路径。目标转发路径可以是传输光信号的路径,也可以是传输电信号的路径。其中,第二报文的srh可以包括该第一绕行sid和该一个或多个目标sid。例如,第二报文的srh可以包括段列表,段列表包括第一绕行sid和一个或多个目标sid。在段列表中,一个或多个目标sid可以在前,该第一绕行sid可以在后,例如,第一绕行sid可以是第二报文的srh中的最后一个sid。在一个示例性场景中,第一代理节点要指定第二报文先转发至中间节点1,再转发至中间节点2,最终转发至第二代理节点。其中,中间节点1对应的sid是sid1,中间节点2是sid2,那么第二报文的srh可以包含3个sid,其中,segmentslist(0)是sid1,segmentslist(1)是sid2,segmentslist(2)是第一绕行sid。通过这种sid的顺序,在第二报文的转发过程中,sid1是段列表中第一个被处理的sid,会由中间节点1根据sid1执行对应的操作。sid2是段列表中第二个被处理的sid,会由中间节点2根据sid2执行对应的操作。第一绕行sid是段列表中最后一个被处理的sid,会由第二代理节点根据第一绕行sid执行对应的操作。需要说明的一点是,最后一个sid通常是指段列表的segmentslist[0],即sid0。具体地,段列表通常表示为<segmentslist[0],segmentslist[1],segmentslist[2],……,segmentslist[n]>。段列表从路径的最后一段开始编码,即segmentslist[0]是路径最后一个段,segmentslist[1]是路径的倒数第二个段,segmentslist[n]是路径的倒数第(n+1)个段,依此类推,逆序压栈。在srv6中,每经过一个srv6节点,sl字段的取值减1,目的地址信息变换一次。sl和段列表共同决定ipv6的目的地址。如果sl值是n,则ipv6的目的地址的取值是segmentslist[n]的值;如果sl值是1,则ipv6的目的地址的取值就是segmentslist[1]的值;如果sl值是0,则ipv6da取值就是segmentslist[0]的值。其中,n为正整数或0。示例性地,参见图18,如果第一代理节点与第二代理节点之间存在中间节点1、中间节点2和中间节点3,则第二报文的srh中可以包括3个sid,分别是对应于中间节点1的sid6、对应于中间节点2的sid7和第一绕行sid。通过这种方式,可以指明目标转发路径为第一代理节点—中间节点1—中间节点2—第二代理节点。应理解,本实施例并不限定第一代理节点必须指定转发路径上的全部中间节点或完整链路,第一代理节点可以指定转发路径上的部分中间节点,将这部分中间节点对应的sid携带在第二报文的srh中,或者,第二代理节点可以指定转发转发路径上的部分链路,将这部分链路对应的sid携带在第二报文的srh中。例如,参见图19,第一代理节点可以指定第二报文经过节点n2,将节点n2对应的sid携带在第二报文的srh中,那么图19的三条转发路径(n1,n2,n3)、(n1,n4,n5,n3)、(n1,n6,n7,n8,n9,n3)中,只有转发路径(n1,n2,n3)经过了节点n2,那么无需在第二报文的srh中携带节点n1对应的sid和节点n3对应的sid,也可以通过指定第二报文要经过节点n2转发,来达到指定第二报文的目标转发路径为(n1,n2,n3)的效果。通过在第二报文的srh携带指明转发路径的sid,能够根据业务需求,来选择第二报文的转发路径,可以控制第二报文经过指定的目标转发路径传输,从而便于进行路径规划,实现流量调优的效果。因此,实现方式二可以适于第一代理节点与第二代理节点位于多跳ip链路,且具有指定转发第二报文的中间节点的业务需求的场景。第一代理节点可以通过在目的地址携带对应于下一个sr节点的sid,来指明第二报文要从本端转发至该sr节点,以使该第二报文经过该sr节点的转发,到达第二代理节点。例如,参见图18,图18是第一代理节点和第二代理节点位于多跳ip链路的示意,第一代理节点和第二代理节点的中间节点包括中间节点1、中间节点2和中间节点3,中间节点1、中间节点2和中间节点3均使能了sr功能。当第一代理节点要指定第二报文通过中间节点3转发至第二代理节点时,可以在第二报文的目的地址中,携带对应于中间节点3的sid。那么,当中间节点3接收到第二报文时,可以根据第二报文的目的地址,来查询本地sid表,确定第二报文的目的地址命中了本地sid表中的sid,则执行sid对应的操作,例如将第二报文转发给第二代理节点。应理解,第一代理节点和第二代理节点之间的中间节点的数量可以根据组网的需求设置,中间节点的数量可以更多或更少,例如可以仅为1个,或者可以为更多数量,本实施例对位于多跳ip链路场景下两个代理节点之间的中间节点的数量不做限定。在一些实施例中,将下一个sr节点的sid作为目的地址时,在第二报文中携带srh时,第二报文可以采用多种格式实现。例如,参见图14,该第二报文包括ipv6头、扩展头、srh和第二报文的载荷,该扩展头包括第一控制信息。又如,参见图15,第二报文可以包括ipv6头、srh和第二报文的载荷,第一绕行sid包括第一控制信息。在这种方式下,扩展头可以是第二报文的可选部分。也即是,第二报文可以例如图15所示的,不包括扩展头,也可以根据需求,在第二报文中设置扩展头来携带一些信息。又如,参见图16,第二报文可以包括ipv6头、srh和第二报文的载荷,第二报文的srh的tlv可以包括第一控制信息。在这种方式下,扩展头可以是第二报文的可选部分。也即是,第二报文可以例如图16所示的,不包括扩展头,也可以根据需求,在第二报文中设置扩展头来携带一些信息。又如,参见图17,第二报文可以包括ipv6头、srh和第二报文的载荷,ipv6头包括第一控制信息。也即是,第二报文可以例如图17所示的,不包括扩展头,也可以根据需求,在第二报文中设置扩展头来携带一些信息。应理解,虽然图17未示出第一控制信息在ipv6头所处的具体位置,ipv6头可以采用任意空闲位置来携带第一控制信息,本实施例对此不做限定。第一控制信息可以携带在第二报文中的任意位置。作为示例,第一控制信息的位置可以包括下述(1)至(4)中的任一种。(1)第一控制信息携带在第二报文的扩展头中。扩展头可以包括两种类型,一种是逐跳解析的扩展头(英文:hop-by-hopoptionheader),另一种是目的节点解析的扩展头(英文:destinationoptionheader)。按照协议的规定,如果报文携带了路由头(英文:routingheader),目的节点解析的扩展头可以包括两种位置,一种位置是,目的节点解析的扩展头在路由头之前,这种情况下,扩展头由路由头中指明的节点解析;另一种情况是,目的节点解析的扩展头在路由头之后,这种情况下,扩展头由报文的最终目的节点解析。在一个实施例中,第二报文中的扩展头可以是目的节点解析的扩展头,该目的节点解析的扩展头可以位于srh之前,第一控制信息可以携带在该目的节点解析的扩展头中。通过这种方式,由于第二报文中包括了第一报文对应的srh,而srh又是路由头的一种类型,可以让srh中指明的第二代理节点来解析扩展头,从而让第二代理节点通过读取到扩展头中的第一控制信息,从而根据第一控制信息来恢复srh。参见图20,图20是本申请实施例提供的一种扩展头的示意图,扩展头可以包括以下字段1至16中的一种或多种:1、下一个报文头类型(英文:nextheader):报文在扩展头之后还可以包括一个或多个扩展头或一个或多个高层头,nextheader用于指明报文中扩展头之后的扩展头或高层头的类型。nextheader的长度可以为1字节。2、扩展头的长度(英文:headerextendedlength,简称:hdrextlen):用于指明扩展头的长度。hdrextlen指示的长度不包括扩展头的前8字节,也即是,hdrextlen指示的长度是扩展头从第9个字节至最后一个字节的长度。hdrextlen可以采用8字节为单位。hdrextlen的取值可以设置为2。3、选项类型(英文:optiontype,简称:opttype)用于指明扩展头中选项的类型。选项类型的长度可以为1字节。其中,选项类型可以是标准化的实验类型,以便不同厂商之间互通,选项类型也可以是实验性的选项类型。例如,实验性选项类型的取值可以包括0x1e、0x3e、0x5e、0x7e、0x9e、0xbe、0xde或0xfe,按照协议的规定,选项类型中最高2个数位的2个比特定义了接收到未识别的选项时的处理动作,选项类型中的第3高数位的比特表示选项的数据在转发过程中是否允许被修改。本实施例中,扩展头的选项类型的取值可以设置为0x1e,该选项类型最高2个数位的2个比特是00,表示如果接收到该选项且不识别,则忽略该选项并继续处理报文的其余部分。选项类型中的第3高比特表示选项的数据在转发过程中允许被修改。4、选项的长度(英文:optionlength,简称:optlen):用于指明扩展头中选项的长度,例如在图20中,optlen指示的长度可以是扩展头从optlen之后的第1个字节至选项的最后一个字节的长度。optlen的取值可以设置为20。5、子选项类型(英文:suboptiontype,简称:subopttype):选项可以是嵌套的结构,一个选项中可以包括一个或多个子选项。子选项类型的取值可以设置为1,该取值表示子选项用于两个支持srv6sfc动态代理操作的节点之间要进行信息同步,即srh的同步。6、子选项长度(英文:suboptionlength,简称:suboptlen):用于指示子选项的数据部分的长度,suboptlen的长度为1字节,suboptlen可以以字节为单位。子选项长度的取值可以设置为20。7、保留字段(reserved1),长度为1字节。发送端可以将保留字段的取值设为0,接收端可以忽略该保留字段。8、目标板索引(英文:targetboard,简称:tb):生成缓存表项的单板的硬件索引,长度为1字节。可以在n-flag设置为1时设置tb,如果n-flag缺省,可以将tb设置为0。9、标志字段(flags):当前未定义的保留的标志字段,标志字段的长度可以为28比特,发送端可以将保留字段的取值设为0,接收端可以忽略该保留字段。10、第一标志:用于标识srh是否命中了本地的缓存表项,可以记为缓存丢失标志(英文:cachemissflag)、cm或cm-flag。第一标志的长度为1比特。如果第一标志的取值为0,表示srh已命中本地的缓存表项;如果第一标志的取值为1,表示srh未命中本地的缓存表项。第一代理节点在生成第二报文的过程中,可以将第一标志设置为1。11、第二标志:用于标识end.ad.sid关联的sf节点是否是nat类型的sf节点,即sf节点在处理报文的过程中,是否会对报文对应的流标识进行修改,可以记为nat标志(英文:networkaddresstranslationflag)、n、natflag或n-flag。第二标志的长度可以为1比特。如果end.ad.sid关联的sf节点是nat类型的sf节点,可以将第二标志的取值设置为1,如果第二标志缺省,可以将第二标志设置为0。其中,如果将第二标志的取值设置为1,可以设置tb和cache-index字段。12、第三标志:用于标识报文是否为复制出的报文,可以记为copyflag、c或c-flag。第三标志的长度可以为1比特。如果将第三标志的取值设置为1,可以表示报文是复制出的报文,通常是控制报文,例如是下述方法实施例提供的用于控制对端存储srh的报文,即第五报文。如果将第三标志的取值设置为0,可以表示报文不是复制出的报文,通常是数据报文。13、第四标志:用于标识报文是否为确认报文,可以记为acknowledge-flag、a或a-flag。第四标志的长度可以为1比特。如果将第四标志的取值设置为1,可以表示报文是确认报文,例如是下述方法实施例提供的表示确认接收到控制对端存储srh的报文。如果将第四标志的取值设置为0,可以表示报文不是确认报文。14、缓存索引(cacheindex):用于承载缓存表项的标识。缓存索引的长度为4字节。可以在第二标志设置为1时设置缓存索引,如果第二标志缺省,可以将缓存索引设置为0。15、任播索引(anycastindex)与任播end.ad.sid唯一对应的索引,长度为4字节。接收端可以对报文中的任播索引进行校验。16、保留字段(reserved2):长度为4字节。按照标准的要求,发送端必须(msut)将保留字段的取值设为0,接收端应该(should)忽略该保留字段。(2)第一控制信息携带在第一绕行sid中。参见图21,图21为本申请实施例提供的一种使用绕行sid来携带第一控制信息的示意图。绕行sid可以包括定位信息(locator)、功能信息(function)或者参数信息(arguments)中的一项或多项,第一控制信息可以携带在第一绕行sid的功能信息,也可以携带在第一绕行sid的参数信息。其中,该参数信息可以包含在功能信息中。通过这种方式,通过绕行sid本身即可实现控制对端代理节点存储srh的功能,从而减少了第一控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。(3)第一控制信息携带在第二报文的ip头中。例如,第一控制信息可以携带在第二报文的ipv6头中。其中,第一控制信息可以携带在ipv6头中第一绕行sid之外的其他部分中。此外,如果第二报文的载荷是ipv6报文,即第二报文的形式类似于ipinip报文的形式,包含外层的ipv6头和内层的ipv6头,第一控制信息可以携带在外层的ipv6头中。(4)第一控制信息携带在第二报文的srh中的tlv中。第二报文的srh可以包括一个或多个tlv,第一控制信息可以携带在tlv中。通过这种方式,通过srh本身即可实现控制第二代理节点存储srh的功能,从而减少了第一控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。在一个实施例中,第二报文可以还包括第二控制信息。第二控制信息用于指示转发节点对第二报文的合法性进行校验。例如,转发节点接收到第二报文后,可以从第二报文获取第二控制信息,对第二控制信息进行校验,如果第二控制信息校验通过,确认第二报文合法,则继续转发第二报文,如果第二控制信息校验不通过,确认第二报文不合法,则丢弃第二报文。通过这种方式,可以提高传输第二报文的安全性。需要说明的一点是,合法性校验是第二控制信息的功能的举例说明,在另一些实施例中,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文采用其他方式进行处理。例如,该第二控制信息可以是转发节点的某种功能的标识,转发节点识别第二控制信息后,会执行该功能对应的操作。又如,第二控制信息也可以是执行某种操作所需的输入参数,转发节点识别第二控制信息后,会根据第二控制信息来对第二报文进行处理。通过在第二报文中携带第二控制信息,在第二报文在第一代理节点与第二代理节点之间进行转发的过程中,能够通过第二报文的第二控制信息,指示中间的转发节点执行指定的功能或者对报文进行处理,便于扩展网络的功能,提高灵活性。第二控制信息也可以携带在第二报文中的任意位置。作为示例,第一控制信息的位置可以包括下述(1)至(2)中的任一种。(1)该第二控制信息携带在该第二报文的srh的tlv中。其中,如果第二报文的srh的tlv还携带了指示对端恢复srh的第一控制信息,第二控制信息和第一控制信息可以处于不同的位置。例如,第二报文的srh可以包括第一tlv和第二tlv,第一控制信息位于第一tlv,第二控制信息位于第二tlv。其中,第一tlv和第二tlv可以是并列的关系,也可以是嵌套的关系。比如说,第一tlv和第二tlv是同级的tlv;或者,第一tlv和第二tlv这两个tlv中,一个是父tlv,另一个是子tlv。当然,第一控制信息和第二控制信息也可以位于同一个tlv中,比如位于同一tlv的不同字段中。(2)该第二控制信息携带在该第二报文的ip头中。例如,第二控制信息可以携带在第二报文的外层的ipv6头中。其中,第二控制信息和第一控制信息可以携带在ipv6头的不同位置。生成第二报文可以包括多种实现方式,例如,以下结合图22、图23、图24和图25,通过实现方式一和实现方式二进行举例说明。实现方式一、参见图22、图23、图24和图25,第一代理节点可以生成一个新的ip头,在第一报文的基础上添加生成的ip头。具体地,实现方式一可以包括下述步骤一至步骤二。步骤一、第一代理节点生成该第二报文的ip头。第一代理节点生成的ip头可以是ipv6头。其中,ip头的目的地址可以为第一绕行sid,也可以是对应于下一个sr节点的sid。ip头的源地址可以为对应于第一代理节点的第二绕行sid,也可以为其他能够标识第一代理节点的信息,或者,ip头的源地址可以缺省。步骤二、第一代理节点向该第一报文封装该第二报文的ip头。第一代理节点可以通过执行压入(push)操作,从而在第一报文的基础上,添加一个ip头,得到包含第一报文以及ip头的报文,该报文为第二报文。其中,封装ip头的操作可以和封装隧道头(tunnelheader)的操作同理。可选地,参见图22,如果使用扩展头携带第一控制信息,则第一代理节点可以不仅执行步骤一以及步骤二,还执行以下步骤三。步骤三、第一代理节点生成扩展头,向第一报文封装扩展头。应理解,本实施例仅是以先描述步骤二,再描述步骤三为例进行描述,本实施例对步骤二以及步骤三的时间先后顺序并不做限定,即,对封装扩展头、封装ip头的先后顺序不做限定。在一个实施例中,也可以采用其他顺序来执行这三个步骤,例如先执行步骤三,再执行步骤二。当然,这两个步骤也可以并行执行,即,可以同时执行步骤二以及步骤三。从图22可以看出,可以通过在第一报文的基础上,添加两个信息,一个是用于将报文传输至第二代理节点的ipv6头,另一个是用于携带控制信息的扩展头,通过这种简单的操作,即可得到第二报文。通过这种方式来生成第二报文,达到的效果至少可以包括:通过对接收到的第一报文进行重新封装,添加ipv6头和扩展头,即可得到第二报文,相对于从0开始生成整个报文的方式而言,处理操作十分简单,因此生成报文的过程可以由代理节点的数据面(如转发芯片)执行,而不依赖于代理节点的控制面(如cpu),从而节省了cpu的处理资源。由于转发芯片可以独立的执行生成报文和转发报文的任务,也就减少了转发芯片与cpu要进行的交互,从而节省了转发芯片和cpu进行交互所需占用的处理资源,因此提高了转发芯片的转发性能。经实验,对转发芯片的微码配置上述报文生成逻辑,则转发芯片即可执行以实现步骤503,因此支持了微码架构,实用性强。应理解,封装扩展头是可选方式,在另一些实施例中,参见图23,可以在生成的ipv6头中的第一绕行sid中携带第一控制信息,并封装ipv6头。参见图24,可以在生成的srh中的tlv中携带第一控制信息,并封装ipv6头和srh。参见图25,可以在生成的ipv6头中携带第一控制信息,并封装ipv6头。在这几个例子中,可以不封装扩展头,也可以根据需求封装扩展头来携带一些需要的信息。可选地,虽然图中未示出,如果第一代理节点与sf节点建立了传输隧道,第一报文还可以包括该传输隧道对应的隧道头,则第一代理节点可以不仅执行步骤一和步骤二,还执行以下步骤四,或者,不仅执行步骤一、步骤二和步骤三,还执行以下步骤四。步骤四、第一代理节点剥离第一报文的隧道头。应理解,本实施例对步骤四和步骤一、步骤二以及步骤三的时间先后顺序也不做限定,例如,步骤四可以在步骤一、步骤二以及步骤三之前执行,又如,步骤四可以在步骤一、步骤二以及步骤三之间的某一时刻执行。实现方式二、参见图22、图23、图24和图25,第一代理节点可以对第一报文原有的ip头进行修改,使得第一报文的ip头更新为第二报文的ip头。具体地,第一代理节点可以将该第一报文的ip头更新为该第二报文的ip头。例如,第一代理节点可以将第一报文的ip头的目的地址修改为第一绕行sid,又如,第一代理节点可以将第一报文的ip头的目的地址修改为对应于下一个sr节点的sid。又如,第一代理节点可以将第一报文的ip头的源地址修改为对应于第一代理节点的第二绕行sid,又如,第一代理节点可以将第一报文的ip头的源地址修改为其他能够标识第一代理节点的信息。可选地,参见图22,如果使用扩展头携带第一控制信息,则第一代理节点可以不仅执行更新第一报文的ip头的步骤,还生成扩展头,向第一报文封装扩展头。应理解,实现方式二对更新ip头和生成扩展头这两个步骤的时间先后顺序并不做限定。可选地,虽然图中未示出,如果第一代理节点与sf节点建立了传输隧道,第一报文还可以包括该传输隧道对应的隧道头,则第一代理节点可以不仅执行更新第一报文的ip头的步骤,还剥离第一报文的隧道头。应理解,实现方式二对更新ip头和剥离隧道头这两个步骤的时间先后顺序并不做限定。步骤504、第一代理节点向第二代理节点发送第二报文。第一代理节点发送第二报文的转发路径可以包括以下转发路径一至转发路径二中的一种或多种:转发路径一、通过对等链路(peerlink)发送第二报文。参见图3,第一代理节点与第二代理节点之间的对等链路可以是第一链路,第一代理节点可以通过第一链路发送第二报文,第二代理节点可以通过第一链路接收第二报文。通过对等链路来传输第二报文的过程可以包括以下步骤1.1至步骤1.2:步骤1.1、第一代理节点通过对应于第一链路的第一出接口,向第二代理节点发送第二报文。第一出接口是指第一代理节点中对应于第一链路的出接口。第一代理节点可以预先接收配置指令,该配置指令用于指示第一链路与第一出接口之间的对应关系,第一代理节点可以从配置指令获取第一链路与第一出接口之间的对应关系,将第一链路与第一出接口之间的对应关系存储在路由表项中。第一代理节点生成第二报文后,可以选择对应于第一链路的第一出接口,通过第一出接口发送第二报文,以使第二报文通过第一链路传输至第二代理节点。示例性地,第一代理节点可以接收以下配置指令:[proxy1]segment-routingipv6[proxy1-segment-routing-ipv6]service-chainpeer-linkethernet2/0/0next-hopfe80::1上述配置指令中proxy1表示第一代理节点,第一行配置指令的含义是要配置ipv6的sr,第二行配置指令的含义是业务功能链中对等链路对应的出接口是2槽位0子板0号以太网口,下一跳是fe80::1。步骤1.2、第二代理节点通过对应于第一链路的第一入接口,从第一代理节点接收第二报文。第一入接口是指第二代理节点中对应于第一链路的入接口,第二报文可以通过第一链路,到达第二代理节点的第一入接口,从第一入接口进入至第二代理节点。在一个实施例中,第一代理节点可以采用指定出接口的方式,实现转发路径一。具体地,可以将第二报文的出接口指定为第一出接口,因此当要发送第二报文时,第一代理节点会默认通过第一出接口发送第二报文;或者,可以采用指定下一跳的方式,实现转发路径一。具体地,可以将第一代理节点的下一跳指定为第二代理节点,因此当要发送第二报文时,第一代理节点会默认将第二代理节点作为下一跳,通过第一出接口发送第二报文。转发路径二、通过路由节点转发。参见图3,通过路由节点转发的过程可以包括以下步骤2.1至步骤2.3:步骤2.1、第一代理节点通过对应于第二链路的第二出接口,向路由节点发送第二报文,第二出接口是指第一代理节点中对应于第二链路的出接口。第一代理节点可以预先接收配置指令,该配置指令用于指示第二链路与第二出接口之间的对应关系,第一代理节点可以从配置指令获取第二链路与第二出接口之间的对应关系,将第二链路与第二出接口之间的对应关系存储在路由表项中。第一代理节点生成第二报文后,可以选择对应于第二链路的第二出接口,通过第二出接口发送第二报文,以使第二报文通过第二链路传输至第二代理节点。步骤2.2、路由节点通过第三链路,将第二报文转发至第二代理节点。步骤2.3、第二代理节点通过对应于第三链路的第二入接口,从路由节点接收第二报文。第二入接口是指第二代理节点中对应于第三链路的入接口,第二报文可以通过第三链路,到达第二代理节点的第二入接口,从第二入接口进入至第二代理节点。在一个实施例中,第一代理节点可以优先使用转发路径一来传输第二报文,在一个实施例中,可以通过执行以下步骤(1)至步骤(3),实现优先使用转发路径一。步骤(1)第一代理节点对第一链路的状态进行检测,如果第一链路处于可用状态,则第一代理节点执行步骤(2),或者,如果第一链路处于不可用状态,则第一代理节点执行步骤(3)。其中,第一代理节点可以检测第一链路是否已部署且第一出接口的状态是否为开启(up),如果第一链路已部署且第一出接口的状态为up,则确认第一链路处于可用状态。如果第一链路未部署或第一出接口的状态为关闭(down),则确认第一链路处于不可用状态。步骤(2)第一代理节点通过对应于第一链路的第一出接口,向第二代理节点发送第二报文。步骤(3)第一代理节点通过对应于第二链路的第二出接口,向路由节点发送第二报文。通过优先使用转发路径一,使得第二报文优先通过对端链路传输至第二代理节点,那么由于转发路径一比转发路径二短,转发路径一经过的节点比转发路径二经过的节点少,能够减少传输第二报文的时延。步骤505、第二代理节点从第一代理节点接收第二报文,确定第一控制信息指示第二代理节点恢复第一报文对应的srh。第一代理节点与第二代理节点之间传输第二报文的具体流程可以根据组网的不同,包括多种实现方式。以下通过实现方式一至实现方式二进行举例说明。实现方式一、如果该第一代理节点与该第二代理节点位于一跳ip链路,则第一代理节点将第二报文从出接口发送后,第二报文可以通过第一代理节点与第二代理节点之间的链路,到达第二代理节点的入接口,第二代理节点可以通过入接口接收到第二报文。实现方式二、如果该第一代理节点与该第二代理节点位于多跳ip链路,则第一代理节点将第二报文从出接口发送后,第二报文可以通过第一代理节点与下一个节点之间的链路,到达下一个节点的入接口,下一个节点可以通过入接口接收到第二报文,将第二报文通过出接口发送出去,直至第二报文到达第二代理节点的入接口,则第二代理节点通过入接口接收到第二报文。在第一代理节点和第二代理节点之间的中间节点转发报文的过程中,转发节点可以识别第二报文的ipv6头的目的地址,根据目的地址查询本地sid表,当目标sid与本地sid表中的目标sid匹配时,执行目标sid对应的操作,例如选择目标sid对应的出接口,将第二报文通过该出接口转发至下一个中间节点。此外,中间节点可以对第二报文的srh中的sl减一,将第二报文的ipv6头的目的地址更新为减一后的sl对应的sid。例如,中间节点1接收到第二报文后,将目的地址从sid6更新为sid7,将sl从6更新为5;中间节点2接收到第二报文后,将目的地址从sid7更新为sid8,将sl从5更新为4;中间节点3接收到第二报文后,将目的地址从sid8更新为sid5,将sl从4更新为3。关于对第二报文执行的动作,第一代理节点可以读取第二报文的目的地址,第一代理节点可以根据第二报文的目的地址,查询本地sid表,判断目的地址与本地sid表中的sid是否匹配。当目的地址与本地sid表中的第一绕行sid匹配,即目的地址命中了本地sid表中的第一绕行sid时,第一代理节点可以确定第二报文是srv6报文,执行第一绕行sid对应的操作。其中,第一绕行sid对应的操作可以包括:检测第二报文是否包括第一控制信息,如果第二报文包括第一控制信息,则确定要恢复第一报文对应的srh,则执行步骤506至步骤508。步骤506、第二代理节点根据第二报文,查询第二代理节点的缓存,得到第一报文对应的srh。在一个实施例中,srh的查询方式可以包括下述查询方式一至查询方式三中的任一种:查询方式一、第二代理节点可以根据第二报文,获取第一报文对应的流标识,以第一报文对应的流标识为索引,查询缓存,得到第一报文对应的srh。其中,第二报文对应的流标识可以是第一报文对应的流标识。查询方式二、第二代理节点可以根据第二报文,获取第二缓存表项的标识,以第二缓存表项的标识为索引,查询缓存,得到第一报文对应的srh。其中,第二报文可以包括第二缓存表项的标识,这一查询方式可以具体参见下述图47所示实施例;或者,第二报文可以包括第一缓存表项的标识,可以将该第一缓存表项的标识映射至第二缓存表项的标识,这一查询方式可以具体参见下述图49所示实施例。查询方式三、第二代理节点可以根据第二报文,获取第二报文对应的流标识和vpn标识,根据第二报文对应的流标识、vpn标识和end.ad.sid,查询缓存,得到第一报文对应的srh,其中,第二报文对应的流标识可以是第一报文对应的流标识,第二报文可以包括vpn标识,该vpn标识可以映射至end.ad.sid,这一查询方式可以具体参见下述图51所示实施例。步骤507、第二代理节点根据第二报文和第一报文对应的srh,生成第三报文。第三报文:为已恢复srh的报文。参见图26,第三报文的格式可以如图26所示,第三报文可以是srv6报文。第三报文可以包括ipv6头、第一报文对应的srh以及第一报文的载荷。该ipv6头可以包括源地址以及目的地址,该srh可以包括段列表、sl以及一个或多个tlv,该段列表可以包括一个或多个sid。应理解,图26仅是第三报文的示意,本申请实施例中,第三报文中字段的数量、类型可以比图26所示的更多,或者比图26所示的更少。此外,图26所示的第三报文中的每个字段的位置以及长度可以根据实际需要进行适应性的改变,本实施例不对报文中每个字段的位置进行限定,也不对每个字段的长度进行限定。在一个实施例中,生成第三报文的方式可以包括多种实现方式,以下结合图26、图27和图28,通过实现方式一至实现方式二举例说明。实现方式一、第二代理节点在生成第三报文的过程中,可以剥离第二报文原有的ip头,具体来说,第三报文的生成过程可以包括下述步骤一至步骤二。步骤一、第二代理节点从该第二报文剥离该第二报文的ip头。具体地,第二代理节点可以通过执行sr中的弹出(pop)操作,来弹出第二报文的ip头,从而将ip头剥离,使得第一代理节点之前封装或修改的ip头从第二报文中去除。需要说明的是,第二报文可以包含多个ip头,第二代理节点可以剥离的ip头可以是第二报文外层的ip头,即,用于对第二报文路由转发的第二报文本身的ip头,可选地,第二代理节点可以不剥离第二报文内层的ip头,第二报文内层的ip头可以是第一报文的ip头。例如,在第一报文是ipv6报文的情况下,第二代理节点可以剥离外层的ipv6头,而不剥离内层的ipv6头,在第一报文是ipv4报文的情况下,第二代理节点可以剥离外层的ipv6头,而不剥离内层的ipv4头。通过剥离外层的ip头,而保留内层的ip头,可以令第一报文保持原有的ip头,通过原有的ip头进行路由转发。此外,可选地,第二代理节点还可以封装第三报文的ipv6头。其中,第三报文的ipv6头可以是第一报文对应的ipv6头。第三报文的ipv6头的目的地址可以是第二代理节点的下一个sr节点对应的sid,第三报文的ipv6头的源地址可以是对应于流分类器的sid或sr网络的头节点的sid,第三报文的ipv6头的源地址也可以缺省。其中,第一报文对应的ipv6头可以预先在第二代理节点上存储。例如,第一报文对应的ipv6头可以和第一报文对应的srh关联存储,比如存储在同一个缓存表项中。那么,第二代理节点在查询缓存的过程中,可以查询到第一报文对应的ipv6头和第一报文对应的srh,第二代理节点不仅封装第一报文对应的ipv6头,还封装第一报文对应的srh,使得第三报文的ipv6头是第一报文对应的ipv6头。可选地,参见图27,如果第一代理节点还封装了扩展头,则第二代理节点可以不仅剥离ip头,还剥离第一代理节点封装的扩展头。其中,第一代理节点可以先剥离ip头,再剥离扩展头,也可以先剥离扩展头,再剥离ip头,或者同时剥离ip头以及扩展头,本实施例对剥离ip头以及剥离扩展头的时间先后顺序并不做限定。可选地,参见图28,如果第一代理节点还封装了第二报文的srh,则第二代理节点可以不仅剥离ip头,还剥离第二报文的srh。其中,第一代理节点可以先剥离第二报文的ip头,再剥离第二报文的srh,也可以先剥离第二报文的srh,再剥离ip头,或者同时剥离ip头以及扩展头,本实施例对剥离ip头以及剥离第二报文的srh的时间先后顺序并不做限定。当然,由于第二报文包括扩展头和srh是可选方式,第一代理节点可以不执行封装剥离扩展头或srh的步骤,例如参见图29,其示出了第二报文不包括扩展头和srh的情况下,生成第三报文的示意图。可选地,如果第二报文是在第一报文的基础上封装了ip头得到的,第二代理节点剥离第二报文的ip头后,得到的可以是第一报文。其中,本实施例并不限定剥离ip头后得到的报文必须和sf节点向第一代理节点发送的第一报文完全相同。在一个实施例中,剥离第二报文的ip头后得到的报文可以和sf节点向第一代理节点发送的第一报文的主要内容相同,但存在细微的差异。例如,第二报文在传输过程中,可能会被中间的转发节点进行处理,导致第二报文所包含的第一报文的载荷或者第一报文的头部信息发生改变,而这些存在细微差异的情况也应涵盖在本申请实施例的保护范围之内。步骤二、第二代理节点封装该第一报文对应的srh,得到该第三报文。第二代理节点可以通过执行封装操作,从而在第一报文的基础上,添加第一报文对应的srh,从而让得到的第三报文不仅携带第一报文的载荷,还携带第一报文对应的srh。通过执行剥离的操作,第二代理节点能够将第一代理节点重新封装出的报文,恢复至sf节点向第一代理节点返回的报文,通过执行封装srh的操作,第二代理节点能够将sf节点返回的报文还原为包含srh的报文,从而实现了动态代理的功能。需要说明的一点是,步骤一至步骤二可以是第二报文的生成方法至少包括的步骤,应理解,在生成第二报文的过程中,可以不仅执行步骤一至步骤二,还执行其他步骤。即,第一代理节点在生成第三报文的过程中,还可以执行除了剥离ip头的步骤和封装srh的步骤之外的其他步骤,而不一定仅是执行剥离ip头的步骤和封装srh的步骤,在此不做一一列举。本实施例对是否执行其他步骤并不做限定。在一个实施例中,第二代理节点可以向第一报文封装第一报文对应的srh后,还对封装了srh的报文中的活跃sid进行更新,则得到的第三报文为活跃sid已更新的报文。其中,更新活跃sid的过程可以包括:判断srh是否包括待处理的sid,如果srh包括待处理的sid,则将报文的目的地址更新为下一个待处理的sid,对srh中的sl减一,使得减一后的sl指向下一个待处理的sid。其中,更新后的活跃sid可以是任意类型的sid,例如,更新后的活跃sid可以是end.ad.sid、end.dt4.sid等。实现方式二、第二代理节点在生成第三报文的过程中,可以不剥离第二报文原有的ip头,而是直接对第二报文原有的ip头进行修改。具体来说,第三报文的生成过程可以包括:第二代理节点将该第二报文的ip头更新为该第一报文的ip头,封装该第一报文对应的srh,得到该第三报文。第二代理节点可以将第二报文的ip头的目的地址更新为该第一报文的ip头的目的地址,例如,如果第二报文的ip头的目的地址是第一绕行sid,第一报文的ip头的目的地址是第一报文的载荷的目的设备的地址,第二代理节点可以将第二报文的ip头的目的地址,从第一绕行sid更新为第一报文的载荷的目的设备的地址。此外,第二代理节点还可以根据第一报文的ip头的其他字段,对应修改第二报文的ip头的其他字段,例如,将第二报文的ip头的源地址更新为该第一报文的ip头的源地址等,在此不做一一列举。应理解,本实施例对更新ip头的步骤和封装srh的步骤的时序不做限定。第一代理节点可以先将第二报文的ip头更新为该第一报文的ip头,再向已更新ip头的报文封装该第一报文对应的srh,也可以先向第二报文封装第一报文对应的srh,再将封装了srh的报文的ip头更新为该第一报文的ip头,或者可以同时执行更新ip头的步骤和封装srh的步骤。还应理解,可选地,第一代理节点在生成第三报文的过程中,还可以执行更新ip头的步骤和封装srh的步骤之外的其他步骤,而不一定仅是执行更新ip头的步骤和封装srh的步骤,在此不做一一列举。第一代理节点可以先剥离第二报文的ip头,再剥离第二报文的srh,也可以先剥离第二报文的srh,再剥离ip头,或者同时剥离ip头以及扩展头,本实施例对剥离ip头以及剥离第二报文的srh的时间先后顺序并不做限定。步骤508、第二代理节点向路由节点发送第三报文。在一个实施例中,第二代理节点可以根据第三报文的活跃sid,查询本地sid表,根据活跃sid在本地sid表中命中的sid,执行对应的转发操作。结合以上步骤505至步骤508,在一些可能的实施例中,以第一绕行sid记为s,第二代理节点记为n为例,根据第一绕行sid执行的操作可以如下:whennreceivesapacketdestinedtosandsisalocalend.adbsid,ndoes/注释:当n接收到目的地址为s的数据包,且s为n的本地sid表中的绕行sid时,n执行以下步骤/if(nosrh)or(nh=srhandsl=0/注释:如果外层的ipv6头(outeripv6header)不包含srh,或者外层的ipv6头的下一个报文头类型(nh)是srh且sl取值为0/popthe(outer)ipv6headeranditsextensionheaders/注释:弹出外层的ipv6头和ipv6头的一个或多个扩展头/restoresrv6headerfromthecacheusingtheinnerpacketandouterdestinationoptionheader/注释:使用内层数据包和外层的目的选项扩展头来恢复srh。updatetheactivesidoftherestoredsrv6packetandforwardtothenext-hop/注释:对恢复出的srv6报文的活跃sid进行更新,将更新后的srv6报文转发给下一跳在一个实施例中,可以预先对第二代理节点的转发规则进行配置,配置第二代理节点在接收到第二报文后,禁止(mustnot)使用第二报文本身对第一代理节点进行响应,从而避免第一代理节点接收到第二报文时重复执行生成第二报文和向第二代理节点发送第二报文的步骤,也就避免了第二报文在第一代理节点与第二代理节点之间形成转发环路。步骤509、路由节点从第二代理节点接收第三报文,转发第三报文。本实施例提供了一种将报文绕行至对端来恢复srh的方法,通过为end.ad.sid扩展了一种具有绕行功能的新的sid,本端代理节点未能从本地缓存中查找到srh的情况下,将这种新的sid以及用于指示恢复srh的控制信息携带在需要恢复srh的报文中,利用这种新的sid将报文传输至对端代理节点,从而指示对端代理节点来代替本端代理节点恢复srh,使得报文能够通过对端代理节点恢复对应的srh,进而通过srh继续在网络中转发,从而避免报文由于无法恢复srh而导致传输失败的问题。上述方法实施例描述了本端代理节点在发生缓存未命中(cachemiss)时,通过向对端代理节点发送报文,指示对端代理节点恢复srh的流程。本申请的一个示例性实施例中,还为缓存未命中的场景提供了实现缓存自愈的机制,如果本端代理节点未缓存srh,对端代理节点可以通过将报文的srh传输至本端代理节点,指示本端代理节点缓存srh,从而控制本端代理节点自动地重新学习到包含srh的缓存表项,那么本端代理节点后续再次从sf节点接收到报文后,在本地即可恢复srh,从而免去将报文绕行至对端代理节点,在对端代理节点恢复srh的流程。以下,结合图30实施例具体描述实现缓存自愈的报文传输流程。需要说明的是,图30实施例着重描述与图5实施例的区别之处,而与图5实施例同理的步骤以及其他特征还请参见图5实施例,在图30实施例不做赘述。参见图30,图30是本申请实施例提供的一种报文传输方法的流程图,该方法可以包括以下步骤:步骤3001、路由节点向第二代理节点发送第四报文。第四报文:是指载荷待被sf节点业务功能处理的报文。参见图31,图31是本申请实施例提供的一种第四报文的示意图。第四报文可以是srv6报文。第四报文可以包括ipv6头、srh以及载荷。该ipv6头可以包括源地址以及目的地址,该srh可以包括段列表、sl以及一个或多个tlv,该段列表可以包括一个或多个sid。第四报文的载荷可以是ipv4报文、ipv6报文或者以太网帧。其中,第四报文的目的地址可以用于承载段列表中的活跃sid(英文:activesid),该活跃sid也称活跃段(activesegment),为接收到报文的sr节点要处理的sid。在srmpls中活跃sid为标签栈的最外层标签,在ipv6中活跃sid为报文的目的地址。例如,如果段列表包括5个sid,分别是sid0、sid1、sid2、sid3以及sid4,而sl取值为2,则表明段列表中未被执行的sid有2个,分别是sid0以及sid1,段列表中当前被执行的sid是sid2,段列表中已被执行的sid有2个,分别是sid3以及sid4。本实施例中,第四报文的目的地址可以是end.ad.sid,即,第四报文的活跃sid可以是end.ad.sid。其中,第四报文的ipv6头中的源地址可以用于标识封装了srh的设备,例如源地址可以是流分类器的地址,或者源地址是头节点器的地址。可选地,第四报文的ipv6头也可以不携带源地址。应理解,图31仅是第四报文的示意,本申请实施例中,第四报文中字段的数量、类型可以比图31所示的更多,或者比图31所示的更少。此外,图31所示的第四报文中的每个字段的位置以及长度可以根据实际需要进行适应性的改变,本实施例不对报文中每个字段的位置进行限定,也不对每个字段的长度进行限定。end.ad.sid:用于指示第一代理节点或第二代理节点执行动态代理操作。动态代理操作也称end.ad操作,动态代理操作具体可以包括剥离报文中的srh、缓存报文中的srh以及将剥离了srh的报文发送出去等操作。end.ad.sid可以预先在第一代理节点或第二代理节点上进行配置,end.ad.sid可以预先存储在第一代理节点或第二代理节点的本地sid表中。end.ad.sid可以由第一代理节点或第二代理节点发布至网络中。流分类器可以接收发布的end.ad.sid,通过将end.ad.sid添加至报文中,以使携带end.ad.sid的报文转发至第一代理节点或第二代理节点后,触发第一代理节点或第二代理节点对报文执行动态代理操作。路由节点发送第四报文的方式可以是逐流(flow-based)的方式,也可以是逐包(packet-based)的方式,本实施例对发送第四报文的方式不做限定。步骤3002、第二代理节点从路由节点接收第四报文,第二代理节点在缓存中存储第四报文的srh。关于第二代理节点对第四报文执行的操作,在一个实施例中,第二代理节点可以读取第四报文的目的地址,第二代理节点可以根据第四报文的目的地址,查询本地sid表,判断目的地址与本地sid表中的sid是否匹配。当目的地址与本地sid表中的end.ad.sid匹配,即目的地址命中了本地sid表中的end.ad.sid时,第二代理节点可以确定第四报文是srv6报文,执行end.ad.sid对应的动态代理操作。在一个实施例中,第二代理节点可以检测缓存中是否已经存储了第四报文的srh,如果缓存中未存储第四报文的srh,则第二代理节点为第四报文的srh分配缓存表项,在分配的缓存表项中存储第四报文的srh。此外,如果检测到缓存中已存储第四报文的srh,可以免去存储第四报文的srh的步骤。其中,检测缓存中是否已经存储第四报文的srh的方式可以包括:对每个缓存表项中的srh与第四报文的srh进行比较,如果任一缓存表项中的srh与第四报文的srh一致,则确认该缓存表项已存储了第四报文的srh,如果每个缓存表项中的srh与第四报文的srh均不一致,则确认该缓存未存储第四报文的srh,要更新缓存,来存储第四报文的srh。在一个实施例中,可以对缓存表项中的srh的全部内容与第四报文的srh的全部内容进行比较,也可以对缓存表项中的srh的部分内容与第四报文的srh的部分内容进行比较,可以对缓存表项中的srh的哈希值与第四报文的srh的哈希值进行比较,本实施例对比较方式不做限定。在一个实施例中,第四报文的srh的存储方式可以包括下述存储方式一至存储方式三中的任一种:存储方式一、第二代理节点可以获取第四报文对应的流标识,以第四报文对应的流标识为索引,存储第四报文的srh。其中,第二代理节点可以采用键值存储的方式来存储第四报文的srh,则流标识为键(key),第四报文的srh为值(value)。流标识用于标识报文所属的数据流,同一条数据流中每个报文对应的流标识相同,流标识可以为报文中一个或多个字段的取值。作为示例,第四报文对应的流标识可以是第四报文的五元组、mac头信息或应用层信息。五元组可以包括报文的源ip地址、源端口号,目的ip地址、目的端口号和传输层协议号。mac帧头信息可以包括报文的源mac地址、目的mac地址、以太网类型(ethertype)以及vlan标签(vlantag)。应用层信息可以是报文的载荷中一个或多个字段的取值。存储方式二、第二代理节点可以获取缓存表项的标识,以缓存表项的标识为索引,存储第四报文的srh,其中,第二代理节点可以采用键值存储的方式来存储第四报文的srh,则缓存表项的标识为key,第四报文的srh为value。存储方式三、第二代理节点可以以第四报文对应的流标识和end.ad.sid为索引,存储第四报文的srh,其中,第二代理节点可以采用键值存储的方式来存储第四报文的srh,则流标识和end.ad.sid的组合为key,第四报文的srh为value。通过执行步骤3002,第四报文的srh能够存储在第二代理节点中,那么如果后续过程中,sf节点或者第一代理节点向第二代理节点发送了不包含srh的报文,第二代理节点可以利用预先的存储,找到第四报文的srh,从而恢复srh。步骤3003、第二代理节点根据端点动态代理sid、第四报文和对应于第一代理节点的第二绕行sid,生成第五报文。需要说明的是,在一个可选实施例中,步骤3003可以在上述步骤505之后执行,例如,第二代理节点通过接收第二报文,发现第一代理节点的缓存丢失,则在接收到第四报文时,触发第五报文的发送流程,从而通过第五报文,将srh同步至第一代理节点上,以使第一代理节点的缓存恢复srh,从而帮助第一代理节点实现缓存自愈。第五报文:用于将第一报文的srh传输至对端代理节点的报文。本实施例中,第五报文可以为控制报文。第五报文可以包括第二绕行sid、控制信息和第一报文的srh。第五报文的源地址可以是对应于第二代理节点的第一绕行sid,或者其他能够标识第二代理节点的信息。第五报文可以是srv6报文,第五报文可以包括ipv6头、srh以及载荷。该ipv6头可以包括第五报文的源地址以及第五报文的目的地址。第五报文的srh可以包括第一报文的srh中的每个sid以及第二绕行sid。第五报文的载荷可以为第一报文的载荷。需要说明的是,第五报文包括第一报文的载荷是可选方式,在另一个实施例中,第五报文可以不包括第一报文的载荷。其中,第五报文的ipv6头的源地址可以是对应于第一代理节点的第二绕行sid,第二绕行sid用于标识第五报文的源节点是第一代理节点。在一个可选的实施例中,可以预先在第二代理节点上,配置end.ad.sid对应的处理策略,该处理策略可以包括执行动态代理操作以及生成和发送第五报文的操作,因此第二代理节点接收到第四报文后,根据第四报文中的end.ad.sid,不仅会执行步骤3002、步骤3008以及步骤3009来提供动态代理服务,还会执行步骤3003至步骤3004以控制第一代理节点存储srh。通过这种方式,充分利用了srv6通过sid来进行编程的能力,扩展了end.ad.sid对应的操作。关于配置end.ad.sid的过程,在一个实施例中,可以预先对第二代理节点进行配置操作,第二代理节点可以接收配置指令,从配置指令获取end.ad.sid;第二代理节点可以对end.ad.sid进行存储,例如将end.ad.sid存储在第二代理节点的本地sid表中。同理地,可以预先对第一代理节点进行配置操作,第一代理节点可以接收配置指令,从配置指令获取end.ad.sid;第一代理节点可以对end.ad.sid进行存储,例如将end.ad.sid存储在第一代理节点的本地sid表中。其中,配置操作可以由用户在第二代理节点或第一代理节点上执行,也可以由sfc的控制面,例如sdn控制器或nfvm执行,本实施例对此不做限定。在一个实施例中,第二代理节点与第一代理节点可以是任播端点动态代理sid(英文:anycastend.ad.sid)的关系。任播(anycast)又称选播、泛播或任意播,为ipv6的一种通信方式,是指通过同一个地址来标识一组提供相同或相应服务的节点,使得以该地址为目的地址的报文能够被路由至这一组节点中的任一个节点。本实施例中,可以将同一个end.ad.sid分配给第二代理节点和第一代理节点,使得第二代理节点上配置的end.ad.sid和第一代理节点上配置的end.ad.sid相同。那么,如果路由节点接收到目的地址为end.ad.sid的报文,路由节点既可以将报文发送至第二代理节点,也可以将报文发送至第一代理节点,因此,报文既可以通过第二代理节点来被执行动态代理操作,也可以通过第一代理节点来被执行动态代理操作,从而便于实现双归接入的功能。此外,可以为任播end.ad.sid配置对应的任播索引(英文:anycast-index),任播索引用于标识同一组具有任播关系的节点的end.ad.sid,对于同一个end.ad.sid而言,第二代理节点上为end.ad.sid配置的任播索引和第一代理节点上为end.ad.sid配置的任播索引可以相同。示例性地,第二代理节点可以通过接收以下配置指令,将end.ad.sid配置为任播end.ad.sid,并配置end.ad.sid对应的任播索引。[proxy1]segment-routingipv6[proxy1-segment-routing-ipv6]locatort1ipv6-prefixa::164static32[proxy1-segment-routing-ipv6-locator]opcode::2end-adanycast-index10[proxy1-segment-routing-ipv6-locator-endad]encapsulationipipv4outboundethernet1/0/0next-hop1.1.1.1inboundethernet1/0/1上述配置指令中proxy1表示第二代理节点,第一行配置指令的含义是要配置ipv6的sr,第二行配置指令的含义是locator(定位信息)是t1,ipv6的前缀是a::164,静态路由是32。第三行配置指令的含义是配置ipv6的sr的locator,操作码是::2,end.ad.sid对应的任播索引是10。第四行配置指令的含义是配置ipv6的sr的end.ad.sid,封装出ipv4报文,以1槽位0子板0号以太网口为出接口,发送ipv4报文,下一跳的地址是1.1.1.1,入接口是1槽位0子板1号以太网口。上述配置指令体现的场景是,第四报文的载荷是ipv4报文,代理节点生成第三报文的方式是,获取第四报文承载的ipv4报文,作为第三报文。第三控制信息:用于指示第一代理节点存储第一报文对应的srh。在一个实施例中,第三控制信息可以包括第三标志以及第四标志。第三标志用于标识报文是否为复制出的报文,例如,第三标志可以记为复制标志(英文:copyflag,简称:c-flag)。第五报文可以包括复制标志字段,第三标志可以在该复制标志字段承载。例如第三标志的长度可以是1比特。可选地,在图30实施例中,第五报文可以是对第四报文的副本封装得到的报文,因此,第三标志可以设置为1,第三标志可以标识第五报文为复制出的报文。第四标志用于标识报文是否为确认报文,例如,第四标志可以记为确认标志(英文:copyacknowledgeflag,简称:a-flag)。第五报文可以包括确认标志字段,第四标志可以在该确认标志字段承载。例如第四标志的长度可以是1比特。可选地,在图30实施例中,第四标志可以设置为0,第四标志可以标识第五报文不为确认报文。第三控制信息可以携带在第五报文中的任意位置。作为示例,第三控制信息的位置可以包括下述(1)至(4)中的任一种。(1)第三控制信息携带在第五报文的扩展头中。在一个实施例中,第五报文中的扩展头可以是目的节点解析的扩展头,该目的节点解析的扩展头可以位于srh之前,第三控制信息可以携带在该目的节点解析的扩展头中。通过这种方式,由于第五报文中包括了第四报文的srh,而srh又是路由头的一种类型,可以让srh中指明的第一代理节点来解析扩展头,从而让第一代理节点通过读取到扩展头中的第三控制信息,从而根据第三控制信息来存储srh。(2)第三控制信息携带在第二绕行sid中。绕行sid可以包括定位信息、功能信息或者参数信息中的一项或多项,第三控制信息可以携带在第二绕行sid的功能部分,也可以携带在第二绕行sid的参数部分。通过这种方式,通过绕行sid本身即可实现控制对端代理节点存储srh的功能,从而减少了第三控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。(3)第三控制信息携带在第五报文的ip头中。例如,第三控制信息可以携带在第五报文的ipv6头中。其中,第三控制信息可以携带在ipv6头中第二绕行sid之外的其他部分中。此外,如果第五报文的载荷是ipv6报文,即第五报文的形式类似于ipinip报文的形式,包含外层的ipv6头和内层的ipv6头,第三控制信息可以携带在外层的ipv6头中。(4)第三控制信息携带在第五报文的srh中的tlv中。第五报文的srh可以包括一个或多个tlv,第三控制信息可以携带在tlv中。通过这种方式,通过srh本身即可实现控制第一代理节点存储srh的功能,从而减少了第三控制信息在报文中额外占用的字节,因此节省了报文的数据量,也就减少了传输报文的开销。第二报文的格式可以有多种,第二报文的格式可以因网络拓扑结构和/或第一代理节点对路径规划的需求而产生差异,还可以因携带控制信息的方式的不同而产生差异。以下结合附图,通过实现方式一和实现方式二进行举例说明。实现方式一、第五报文的目的地址可以是第二绕行sid,例如参见图32、图33、图34和图35,第五报文的ipv6头的目的地址(destinationaddress,da)字段可以携带第二绕行sid。这种方式可以适于多种场景,以下通过场景一至场景三举例说明:场景一、第一代理节点与第二代理节点位于一跳ip链路。位于一跳ip链路的具体概念还请参见上文,在此不做赘述。参见图13,图13是第一代理节点和第二代理节点位于一跳ip链路的示意。在srv6网络中,srv6报文的ipv6头中的目的地址通常用来标识下一个转发报文的sr节点。因此,如果第一代理节点与第二代理节点位于一跳ip链路,第一代理节点通过在目的地址中携带第二绕行sid,能够指明第五报文的下一个sr节点即为第二代理节点。场景二、第一代理节点与第二代理节点位于多跳ip链路,而第一代理节点与第二代理节点之间的中间节点未使能sr功能。对于未使能sr功能的中间节点而言,当中间节点接收到第五报文时,可以根据第五报文的目的地址(即第二绕行sid),查询路由fib,根据目的地址在路由fib中命中的表项来转发报文。场景三、第一代理节点与第二代理节点位于多跳ip链路,而没有指定转发第五报文的中间节点的业务需求。场景三可以包括多种情况,可以包含中间节点使能了sr功能的情况,也可以包含中间节点未使能sr功能的情况。例如,如果该多跳ip链路组成了多条转发路径,而第一代理节点没有指定经过哪条转发路径转发第五报文的需求,那么在该中间节点使能sr功能和未使能sr功能的情况下,均可以在目的地址中携带第二绕行sid。又如,如果该多跳ip链路组成的转发路径唯一,比如说第一代理节点与第二代理节点之间仅存在一个中间节点,那么在该中间节点使能sr功能和未使能sr功能的情况下,第一代理节点无需指定中间节点,仍可使得第五报文经过该中间节点转发至第二代理节点。其中,对于使能sr功能的中间节点而言,当中间节点接收到第五报文时,可以根据第五报文的目的地址,即第二绕行sid来查询本地sid表,即将第二绕行sid与本地sid表中的每个sid进行匹配。那么由于第二绕行sid不是中间节点发布的sid,没有存储在中间节点的本地sid表中,中间节点会确定第二绕行sid未命中本地sid表,则中间节点会按照传统的ip路由方式来转发第五报文,具体地,中间节点会根据第二绕行sid,查询路由fib,根据目的地址在路由fib中命中的表项来转发第五报文。根据携带第三控制信息的方式的不同,通过实现方式一来实现的第五报文的格式可以具体分为多种。以下结合图32至图35,通过实现方式1.1至实现方式1.4进行举例说明:实现方式1.1、参见图32,如果使用扩展头来携带第三控制信息,第五报文的格式可以如图32所示,第五报文包括ipv6头、扩展头、srh和载荷,其中,第五报文的扩展头包括第三控制信息,扩展头可以位于ipv6头和srh之间。实现方式1.2、参见图33,如果使用第二绕行sid(即图中的end.adb.sid)来携带第三控制信息,第五报文的格式可以如图33所示,第五报文包括ipv6头、srh和载荷,第五报文的第二绕行sid包括第三控制信息。通过对比图32和图33可以看出,实现方式1.2减少了第五报文的长度,能够实现对第五报文进行压缩的功能。实现方式1.3、参见图34,如果使用srh中的tlv来携带第三控制信息,第五报文的格式可以如图34所示,第五报文包括ipv6头、srh和载荷,其中,第五报文的srh包括tlv,tlv包括第三控制信息。实现方式1.4、参见图35,如果使用ipv6头来携带第三控制信息,第五报文的格式可以如图35所示,第五报文包括ipv6头、srh和载荷,其中,第五报文的ipv6头包括第三控制信息。实现方式二、第五报文的目的地址可以是对应于下一个sr节点的sid,例如参见图36、图37、图38和图39,第五报文的ipv6头的目的地址(da)字段可以携带对应于下一个sr节点的sid。其中,该对应于下一个sr节点的sid可以由该下一个sr节点发布至sr网络中,该对应于下一个sr节点的sid可以存储在下一个sr节点的本地sid表中。这种方式可以适于第一代理节点与第二代理节点位于多跳ip链路,且具有指定转发第五报文的中间节点的业务需求。第一代理节点可以通过在目的地址携带对应于下一个sr节点的sid,来指明第五报文要从本端转发至该sr节点,以使该第五报文经过该sr节点的转发,到达第二代理节点。例如,参见图18,图18是第一代理节点和第二代理节点位于多跳ip链路的示意,第一代理节点和第二代理节点的中间节点包括中间节点1、中间节点2和中间节点3,中间节点1、中间节点2和中间节点3均使能了sr功能。当第二代理节点要指定第五报文通过中间节点3转发至第一代理节点时,可以在第五报文的目的地址中,携带对应于中间节点3的sid。那么,当中间节点3接收到第五报文时,可以根据第五报文的目的地址,来查询本地sid表,确定第五报文的目的地址命中了本地sid表中的sid,则执行sid对应的操作,例如将第五报文转发给第一代理节点。根据携带第三控制信息的方式的不同,通过实现方式二来实现的第五报文的格式可以具体分为多种。以下结合图36、图37、图38和图39,通过实现方式2.1至实现方式2.4进行举例说明:实现方式2.1、参见图36,如果使用扩展头来携带第三控制信息,第五报文的格式可以如图36所示,第五报文包括ipv6头、扩展头、srh和载荷,第五报文的扩展头包括第三控制信息。实现方式2.2、参见图37,如果使用第二绕行sid(即图37中的end.adb.sid)来携带第三控制信息,第五报文的格式可以如图37所示,第五报文包括ipv6头、srh和载荷,第五报文的第二绕行sid包括第三控制信息。实现方式2.3、参见图38,如果使用srh中的tlv来携带第三控制信息,第五报文的格式可以如图38所示,第五报文包括ipv6头、srh和载荷,第五报文的srh中的tlv包括第三控制信息。实现方式2.4、参见图39,如果使用ipv6头来携带第三控制信息,第五报文的格式可以如图39所示,第五报文包括ipv6头、srh和载荷,第五报文的ipv6头包括第三控制信息。在一个实施例中,第五报文的生成过程可以包括下述步骤一至步骤三。步骤一、第二代理节点向第四报文的srh的段列表插入第二绕行sid。第二代理节点可以通过执行sr中的压入(push)操作,来将第二绕行sid插入段列表,使得插入第二绕行sid之后,段列表在包含原有的第四报文的每个sid的基础上,新增第二绕行sid。关于第二绕行sid在段列表中的插入位置,第二代理节点可以在srh中的活跃sid之后插入第二绕行sid,也即是,在end.ad.sid之后插入第二绕行sid。参见图40,图40是本申请实施例提供的一种插入第二绕行sid的示意图,图40的左侧示出了第四报文的段列表,图40的右侧示出了第五报文的段列表,在图40中,end.ad.sid为sid2,第二绕行sid为sid5,则第二代理节点在sid2之后插入了sid5。需要说明的一点是,上述描述是以从sid0至sid5的前后顺序进行描述的,sid0的位置称为前,sid5的位置称为后。而srv6节点在解析srh时,通常按照逆序的顺序读取srh中的每个sid,例如在图40中,第四报文的srh中第一个被读取并执行的sid是sid4,第二个被读取并执行的sid是sid3,之后是sid2,以此类推,最后一个被读取并执行的sid是sid0。步骤二、第二代理节点对第四报文的srh的sl进行更新。步骤三、第二代理节点对第四报文的目的地址进行更新,得到第五报文。通过执行更新sl的步骤,第二代理节点生成的第五报文的sl会大于接收到的第四报文的sl。在srv6网络中,srv6报文的srh中的sl通常用来标识待处理的sid的数量,那么通过修改sl的取值,能够指明第二代理节点发出的第五报文相对于第二代理节点接收到的第四报文而言,srh包含了更多的待处理的sid,以便第二代理节点和/或第二代理节点与第二代理节点之间的中间节点在sl的指示下,对这些更多的sid进行处理。通过执行更新目的地址的操作,能够将第五报文的下一个待处理的sid从end.ad.sid更新为其他sid,以便第一代理节点和/或中间节点使用目的地址,查询本地sid表时,会执行该其他sid对应的操作。需要说明的是,上述步骤一至步骤三与srv6的正常转发操作有所区别。在srv6的通常情况下,srh中的每个sid是由头节点插入至srv6报文的,对于头节点之外的每个srv6节点而言,每当srv6节点接收到srv6报文时,仅是执行srh中活跃sid对应的操作,而不会向srh插入sid,也不会从srh删除sid,也就是说每个中间的srv6节点均不会改变srh中的sid。此外,srv6节点会对srh中的sl减一,即执行sl--,来表示本端执行了srh中的一个sid,因此srh中剩余的未被执行的sid减少了一个。而本实施例中,由于srh中的第二绕行sid是由第二代理节点插入至第四报文的,因此第二代理节点会对srh中的sl加一,即执行sl++,来表示srh中剩余的未被执行的sid增加了一个,该新增的未被执行的sid即为第二绕行sid,第二绕行sid要传输至第一代理节点,以使第一代理节点来执行第二绕行sid对应的操作。sl加一后,srh中的活跃sid会从end.ad.sid更新为第二绕行sid。应理解,本实施例仅是以先描述步骤一,再描述步骤二,最后描述步骤三为例进行描述,本实施例对步骤一、步骤二以及步骤三的时间先后顺序并不做限定。在一个实施例中,也可以采用其他顺序来执行这三个步骤,例如先执行步骤三,再执行步骤一,最后执行步骤二,又如先执行步骤二,再执行步骤一,最后执行步骤三。当然,这三个步骤也可以并行执行,即,可以同时执行步骤一、步骤二以及步骤三。在一个实施例中,如果控制信息携带在扩展头中,则第二代理节点可以不仅执行步骤一、步骤二以及步骤三,还执行以下步骤四。步骤四、第二代理节点生成扩展头,向第四报文封装扩展头。应理解,本实施例对步骤四和步骤一、步骤二以及步骤三的时间先后顺序也不做限定,例如,步骤四也可以在步骤一、步骤二以及步骤三之前执行。在一个实施例中,第二代理节点可以对第四报文进行复制,从而得到两份第四报文,一份是第四报文本身,另一份是第四报文的副本。第二代理节点可以利用其中一份第四报文来生成第五报文,利用另一份第四报文来生成第三报文。可选地,第二代理节点可以利用第四报文的副本来生成第五报文,利用第四报文本身来生成第三报文,第五报文中可以通过携带c-flag,来指明第五报文是为第四报文复制得出的报文。上述描述的第五报文的生成方式可以根据具体场景的不同,包括多种实现方式。以下通过实现方式一至实现方式二进行举例说明。实现方式一、第二代理节点将该第四报文的sl加一。上述步骤二可以是:将该第四报文的目的地址更新为该第一绕行sid。参见图40,图40的左侧示出了第四报文的sl,第四报文的sl取值为2,则表明段列表中未被执行的sid有2个,分别是sid0以及sid1,段列表中当前的活跃sid是sid2,段列表中已被执行的sid有2个,分别是sid3以及sid4。第二代理节点可以将sl加一,使得sl的取值从2更新为3,则如图40的右侧所示,第五报文的sl取值为3,则表明段列表中未被执行的sid有3个,分别是sid0、sid1以及sid2,段列表中当前的活跃sid是sid5,段列表中已被执行的sid有2个,分别是sid3以及sid4。此外,第二代理节点可以修改第四报文中ipv6头的目的地址,使得第四报文的目的地址从end.ad.sid更新为第二绕行sid。实现方式一可以应用在多种场景,例如第一代理节点与第二代理节点位于一跳ip链路,又如第一代理节点与第二代理节点位于多跳ip链路(off-link),而第一代理节点与第二代理节点之间的中间节点未使能sr功能,再如第一代理节点与第二代理节点位于多跳ip链路,而没有指定转发第五报文的中间节点的业务需求,本实施例对第二代理节点在何种场景下执行实现方式一不做限定。实现方式二、第二代理节点还可以向该第四报文的srh的段列表插入一个或多个目标sid,上述步骤一可以是:第二代理节点将该第四报文的sl加n,该n为大于1的正整数。上述步骤二可以是:第二代理节点将该第四报文的目的地址更新为该一个或多个目标sid中对应于下一个sr节点的sid。示例性地,参见图41,如果第一代理节点与第二代理节点之间存在中间节点1、中间节点2和中间节点3,则第二代理节点插入的一个或多个目标sid可以是3个sid,分别是对应于中间节点3的sid8、对应于中间节点2的sid7和对应于中间节点1的sid6。例如,图41的左侧示出了第四报文的sl,第四报文的sl取值为2,则表明段列表中未被执行的sid有2个,分别是sid0以及sid1,段列表中当前的活跃sid是sid2,段列表中已被执行的sid有2个,分别是sid3以及sid4。第二代理节点可以将sl的取值从2更新为6,则如图41的右侧所示,第五报文的sl取值为6,则表明段列表中未被执行的sid有6个,分别是sid0、sid1、sid2、sid5、sid6、sid7,段列表中当前的活跃sid是sid8,段列表中已被执行的sid有2个,分别是sid3以及sid4。通过这种方式,可以指明目标转发路径为第二代理节点—中间节点3—中间节点2—中间节点2。需要说明的是,将分别对应于每个节点的sid作为目标sid仅是示例,如果目标转发路径是松散路径,第一代理节点插入的一个或多个目标sid可以是对应于部分中间节点的sid。实现方式二可以应用在多种场景,例如第一代理节点与第二代理节点位于多跳ip链路,且具有指定转发第五报文的中间节点的业务需求,本实施例对第一代理节点在何种场景下执行实现方式二不做限定。在一些可能的实施例中,第二代理节点可以通过插入目标sid来进行流量规划。例如,参见图42,图42是本申请实施例提供的一种通过目标sid进行流量规划的示意图。在图42中,第一代理节点与第二代理节点之间存在节点n1、节点n2、节点n3至节点n9这10个转发节点,第一代理节点与第二代理节点之间包括3条路径,分别是(n1,n2,n3)、(n1,n4,n5,n3)、(n1,n6,n7,n8,n9,n3),可以通过目标sid,控制第五报文从这3条路径中的一条指定的路径传输至第一代理节点。示例性地,如果路径(n1,n2,n3)的带宽最大,要将第五报文通过路径(n1,n2,n3)传输,可以将节点n3发布的对应于链路(n2,n3)的sid作为目标sid,将该目标sid携带在第五报文的段列表中。那么,节点n3接收到报文时,根据目标sid查询本地sid表,会查询到与链路(n2,n3)绑定的出接口1,选择出接口1来发送第五报文,使得第五报文通过出接口1发送出去后,会到达节点n2,进而通过(n2,n1)到达第一代理节点。通过这种方式,达到的效果至少可以包括:能够根据业务需求,来选择第五报文的转发路径,可以控制第五报文经过指定的目标转发路径传输,从而便于进行路径规划,实现流量调优的效果。此外,第二代理节点可以修改第四报文中ipv6头的目的地址,使得第四报文的目的地址从end.ad.sid更新为对应于下一个sr节点的sid。需要说明的一点是,上述上述描述的实现方式一至实现方式二仅是示例,在另一些实施例中,第五报文的生成方式可以采用其他实现方式,例如可以采用绑定的sid(英文:bindingsid,简称:bsid)来标识目标转发路径,则第二代理节点可以向第四报文的srh的段列表插入第二绕行sid和bsid,将第四报文的ipv6头的目的地址更新为bsid,将第四报文的sl加2,。下一个sr节点接收到第五报文时,使用bsid查询本地sid表后,可以执行end.b6.insert操作(srv6中的一种插入操作),向第五报文插入一个新的srh,或者执行end.b6.encaps操作(srv6中的一种封装操作),向第五报文插入一个包含srh的外层ipv6头。通过bsid,能够减少srh的深度,达到压缩srh的功能。基于上述步骤一至步骤四,参见图43、图44、图45和图46,图43是本申请实施例提供的一种第四报文演变至第五报文的示意图,图43适于描述使用扩展头来携带第三控制信息的情况。从图43可以看出,可以通过在第四报文的基础上,添加两个信息,一个是用于将报文传输至第一代理节点的第二绕行sid,另一个是用于携带第三控制信息的扩展头,通过这种简单的操作,即可得到第五报文。此外,可选地,可以添加目标sid来指示目标转发路径。图44适于描述使用绕行sid来携带第三控制信息的情况。从图44可以看出,可以通过在第四报文的基础上,添加第二绕行sid,即可得到第五报文。图45适于描述使用tlv来携带第三控制信息的情况。从图45可以看出,可以通过在第四报文的基础上,添加第二绕行sid,并向srh中的tlv写入第三控制信息,即可得到第五报文。图46适于描述使用ip头来携带第三控制信息的情况。从图46可以看出,可以通过在第四报文的基础上,添加第二绕行sid,并向ipv6头写入第三控制信息,即可得到第五报文。通过这种方式来生成第五报文,达到的效果至少可以包括:通常情况下,代理节点缓存的每个srh是由代理节点的数据面(如转发芯片)在转发报文的过程中,从报文中动态学习得到的,为了避免影响数据面的转发性能,通常不会让数据面将srh发送给cpu。对于代理节点的cpu而言,由于cpu未得到srh,就无法生成包含srh的报文,cpu也就无法将srh通过报文备份至第二代理节点。而对于代理节点的数据面而言,由于数据面通常只能执行简单的处理操作,让数据面根据srh从0开始生成整个报文的复杂度很高,难度很大,可行性不高。由此可见,如何能将srh备份到第二代理节点上,并且通过数据面就能实现是一个极大的技术难点。而通过提出上述报文生成方法,对接收到的第四报文进行复制,插入一个sid(第二绕行sid),封装扩展头,即可得到第五报文,相对于从0开始生成整个报文的方式而言,处理操作十分简单,因此生成报文的过程可以由数据面执行,而不依赖于控制面,从而成功克服了这一技术难点。经实验,对转发芯片的微码配置上述报文生成逻辑,则转发芯片即可执行以实现生成第五报文的步骤,因此支持了微码架构,实用性强。在一个实施例中,生成第五报文的触发条件可以包括以下条件(1)至条件(3)中的一种或多种。条件(1)检测到缓存表项生成。第二代理节点可以对缓存进行检测,如果缓存中原本不包括缓存表项,而接收到第四报文后,缓存中新增了缓存表项,则检测到缓存表项生成,那么第二代理节点会生成第五报文,发送第五报文。条件(2)检测到缓存表项更新。第二代理节点可以对缓存中的缓存表项进行检测,如果缓存表项被执行了写操作,使得缓存表项发生更新,那么第二代理节点会生成第五报文,发送第五报文。通过以上述条件(1)或条件(2)来触发第五报文的转发流程,达到的效果至少可以包括:一方面,每当第二代理节点接收到一个新的srh时,由于新的srh会触发缓存表项的生成,从而触发第五报文的转发,因此能够通过第五报文的转发,将新的srh及时传输给第一代理节点,从而保证新的srh被实时同步至第一代理节点。另一方面,对于之前已经存储过的srh而言,由于已存储的srh不会触发缓存表项的生成,也就不会触发第五报文的转发,因此免去了为传输这种srh生成第五报文的处理开销以及传输第五报文的网络开销。在一个示例性场景中,一条具有n个数据包的数据流到达了第二代理节点,当第二代理节点接收到数据流的第一个第四报文时,该第一个第四报文的srh对于第二代理节点而言是新的srh,则第二代理节点会生成缓存表项,来存储第一个第四报文的srh。此时满足了条件(1),会触发第二代理节点生成第五报文和发送第五报文,则第一个第四报文的srh会通过第五报文传输至第一代理节点,使得第一个第四报文的srh也在第一代理节点上进行存储。而当第二代理节点接收到数据流的第二个第四报文、第三个第四报文至最后一个第四报文中的任意第四报文时,由于同一条数据流的每个第四报文的srh通常是相同的,这些第四报文的srh对于第二代理节点而言是已经存储过的srh,则第二代理节点不会生成缓存表项,则由于不满足条件(1),第二代理节点不会生成第五报文和发送第五报文,从而免去了转发(n-1)个第五报文带来的开销。此外,当第二代理节点或者第一代理节点接收到数据流的每个第四报文时,均可以向该第四报文封装第一个第四报文的srh来恢复报文。其中,n为正整数。条件(3)检测到当前时间点到达第五报文的发送周期。第二代理节点可以周期性发送第五报文,具体地,第二代理节点可以为第五报文设置发送周期,每当时间经过一个发送周期,则生成第五报文,发送第五报文。通过这种方式,第二代理节点可以定期将第四报文的srh通过第五报文同步至第一代理节点,以使第一代理节点能够定期刷新缓存的srh,从而提升同步srh的可靠性。步骤3004、第二代理节点向第一代理节点发送第五报文。发送第五报文的转发路径和发送第二报文的转发路径可以同理,例如可以包括通过对等链路(peerlink)发送第五报文、通过路由节点转发第五报文,本实施例在此不做赘述。可选地,可以通过以下方式一至方式二中的任一种,来实现第五报文的传输可靠性。方式一、重复发送。第二代理节点可以生成多个第五报文,该多个第五报文可以是相同的,第二代理节点可以向第一代理节点连续发送多个第五报文,第一代理节点从第二代理节点连续接收多个第五报文。通过这种方式,第四报文的srh通过多个第五报文中的任一个第五报文均可以传输至第一代理节点,因此降低了srh在传输过程中发生丢失的概率,并且实现起来较为简单,可行性高。方式二、确认机制。可以为第五报文设计对应的确认(acknowledge,ack)报文,让第五报文的接收端通过返回ack报文来通知第五报文的发送端,其已接收到了第五报文。在一个实施例中,基于确认机制的报文传输流程可以包括以下步骤一至步骤四:步骤一、第一代理节点根据第一绕行sid、第二绕行sid和第五报文,生成第六报文。第六报文为第五报文对应的ack报文,第六报文表示确认接收到了第五报文,通过将第六报文转发给第二代理节点,能够将第一代理节点接收到第五报文的事件通知给第二代理节点。第六报文的封装格式可以和第五报文类似,相区别的是,第六报文的目的地址为对应于第二代理节点的第一绕行sid。其中,第六报文可以携带第四标志,第六报文中的第四标志可以表示第六报文为确认报文。例如,第六报文可以包括扩展头,扩展头中携带c-flag和a-flag,c-flag设置为1,a-flag设置为1。在一个实施例中,第一代理节点可以对第五报文进行重新封装,得到第六报文。具体而言,第六报文的生成过程可以包括:第一代理节点将第五报文中的源地址更新为第二绕行sid;第一代理节点将第五报文的目的地址从第二绕行sid更新为第一绕行sid;第一代理节点修改第五报文中的第四标志的取值,得到第六报文。其中,更新源地址、更新目的地址、修改第四标志这三个步骤可以采用任意顺序组合,本实施例对这三个步骤的时序不做限定。通过这种方式生成第六报文,达到的效果至少可以包括:第一代理节点可以通过对接收到的第五报文修改源地址、目的地址和第四标志,即可得到第五报文,相对于从0开始生成整个报文的方式而言,处理操作十分简单,因此生成报文的过程可以由数据面执行,而不依赖于控制面,从而提供了一种不依赖于cpu等控制面,而是通过转发引擎等数据面即可实现的ack报文生成方式,经实验,对转发芯片的微码配置上述报文生成逻辑,则转发芯片即可执行以实现第六报文的生成步骤,因此支持了微码架构,实用性强。步骤二、第一代理节点向第二代理节点发送第六报文。步骤三、当接收到第六报文时,第二代理节点确定第一代理节点接收到了第五报文。在一些实施例中,第一代理节点可以从第六报文获取第一控制信息,确定第一控制信息表示接收到了第五报文。例如,第一代理节点可以识别第六报文中第一标志的取值和第二标志的取值,如果第三标志的取值设置为1且第四标志的取值设置为1,则确定控制信息表示接收到了第五报文。步骤四、当未接收到第六报文时,第二代理节点向第一代理节点重传第五报文。通过第六报文的转发流程,第二代理节点能够通过是否接收到第六报文,确认第一代理节点是否接收到了srh,在第一代理节点未得到srh的情况下,通过重传来保证将srh传输给第一代理节点,从而保证了传输srh的可靠性。步骤3005、第一代理节点从第二代理节点接收第五报文,确定第三控制信息指示第一代理节点存储第四报文的srh。关于对第五报文执行的动作,第一代理节点可以读取第五报文的目的地址,第一代理节点可以根据第五报文的目的地址,查询本地sid表,判断目的地址与本地sid表中的sid是否匹配。当目的地址与本地sid表中的第二绕行sid匹配,即目的地址命中了本地sid表中的第二绕行sid时,第一代理节点可以确定第五报文是srv6报文,执行第二绕行sid对应的操作。在一些可能的实施例中,第二代理节点可以识别第五报文中的第三标志的取值和第四标志的取值,如果第三标志的取值设置为1且第四标志设置为0,则确定第三控制信息指示存储第一报文的srh。第二绕行sid对应的操作可以包括:检测第五报文是否包括第三控制信息,如果从第五报文识别出第三控制信息,则确定要存储第四报文的srh,根据第五报文,获取第四报文的srh,存储第四报文的srh。需要说明的是,第三控制信息对应的操作与end.ad.sid对应的操作均包含存储第四报文的srh的步骤,而第三控制信息对应的操作与end.ad.sid对应的操作相区别的是,end.ad.sid对应的操作包含将第四报文的载荷转发至sf节点的步骤,而第三控制信息对应的操作可以不包含将第四报文的载荷转发至sf节点的步骤,以避免第二代理节点和第一代理节点均将第四报文的载荷转发至sf节点后,导致sf节点对同一份报文的载荷重复进行处理的情况。步骤3006、第一代理节点解析第五报文,得到第四报文的srh。第五报文的srh可以包括第四报文的srh的每个sid,还可以包括第四报文的srh中sid之外的其他信息,第一代理节点可以根据第五报文的srh,获取第四报文的srh。具体地,可以通过执行以下步骤一至步骤二,得到第四报文的srh。步骤一、第一代理节点从第五报文的srh中的段列表,删除第二绕行sid。本步骤可以视为步骤3003中第五报文的生成过程中步骤一的逆过程。具体地,第一代理节点可以通过执行sr中的弹出(pop)操作,来将第二绕行sid从段列表删除,使得删除第二绕行sid之后,段列表恢复至原有的第四报文的段列表。其中,第一代理节点可以删除srh中的活跃sid,也即是,删除end.ad.sid之后的第二绕行sid。参见图40,图40的左侧示出了第四报文的段列表,图40的右侧示出了第五报文的段列表,在图40中,end.ad.sid为sid2,第二绕行sid为sid5,则第一代理节点可以将sid2之后的sid5删除,从而将段列表从右侧恢复至左侧。步骤二、第一代理节点将第五报文的srh中的sl减一,得到第四报文的srh。本步骤可以视为步骤3003中第五报文的生成过程中步骤二的逆过程。例如,参见图40,图40的右侧示出了第五报文的sl,第五报文的sl取值为3,则表明段列表中未被执行的sid有3个,分别是sid0、sid1以及sid2,段列表中当前的活跃sid是sid5,段列表中已被执行的sid有2个,分别是sid3以及sid4。第一代理节点可以将sl减一,使得sl的取值从3更新为2,则如图40的左侧所示,第四报文的sl取值为2,则表明段列表中未被执行的sid有2个,分别是sid0以及sid1,段列表中当前的活跃sid是sid2,段列表中已被执行的sid有2个,分别是sid3以及sid4。此外,对于第二代理节点指定转发第五报文的中间节点的场景,由于第五报文的sl在传输过程中可以由中间节点进行递减,则第二代理节点接收到的第五报文相对于第二代理节点发送的第五报文可以由于sl的更新而产生差异,第二代理节点接收到的第五报文的sl可以小于第二代理节点发送的第五报文的sl。例如参见图41,第二代理节点发送第五报文时第五报文的sl为6,而由于中间节点1将sl从6更新为5,中间节点2将sl从5更新为4,中间节点3将sl从4更新为3,则第二代理节点接收到的第五报文的sl为3。需要说明的是,上述步骤一至步骤二与srv6的正常转发操作有所区别。在srv6的通常情况下,srh中的每个sid是由头节点插入至srv6报文的,对于头节点之外的每个srv6节点而言,每当srv6节点接收到srv6报文时,仅是执行srh中活跃sid对应的操作,而不会向srh压入sid,也不会弹出srh中的sid,也就是说每个中间的srv6节点均不会改变srh中的sid。而本实施例中,由于第五报文的srh中的第二绕行sid是由第二代理节点插入的,第二绕行sid不是第四报文的srh原本就包括的sid,因此第一代理节点会从第五报文的srh中删除第二绕行sid,从而剥离第二绕行sid的封装,将第五报文的srh还原至第四报文的srh。通过这种方式,一方面,从路由节点的角度而言,由于第一代理节点得到的报文的srh和路由节点之前发送给第二代理节点的报文的srh基本保持一致,因此后续如果第一代理节点接收到处理后的报文,第一代理节点恢复出的srh能和路由节点之前发送的srh基本保持一致,那么第一代理节点将恢复srh的报文返回给路由节点后,路由节点得到的报文的srh与之前发送的报文的srh基本保持一致,从而避免srh由于不被sf节点识别而丢失的情况,实现了第一代理节点的代理功能。另一方面,从sf节点的角度而言,sf节点选择将处理后的报文转发至第二代理节点或者第一代理节点后,由于第二代理节点与第一代理节点存储的srh基本保持一致,因此第二代理节点以及第一代理节点中的任一个节点接收到报文后,向报文恢复的srh基本保持一致,从而保证第二代理节点与第一代理节点功能的对等性,满足基于两个代理节点实现双归属的架构。应理解,这里所说的两个报文的srh基本保持一致,是指两个报文的srh的主要内容保持一致,而并不限定两个报文的srh必须完全相同。在一个实施例中,两个报文的srh可以存在细微的差异,例如,两个报文的srh中段列表相同,而两个报文的srh中sl有所区别,比如由于end.ad.sid被第二代理节点执行使得sl减少了1;又如,srh的tlv包含的一些参数由于被两个代理节点识别处理,或者被两个代理节点之间的中间节点识别处理,使得tlv的内容发生了改变,这些存在细微差异的情况也应涵盖在本申请实施例的保护范围之内。步骤3007、第一代理节点在缓存中存储第四报文的srh。在一个实施例中,第一代理节点可以检测缓存中是否已经存储了第四报文的srh,如果缓存中未存储第四报文的srh,则第一代理节点为第四报文的srh分配缓存表项,得到缓存表项,在分配的缓存表项中存储第四报文的srh。此外,如果检测到缓存中已存储第四报文的srh,第一代理节点可以免去存储第四报文的srh的步骤。结合以上步骤3005至步骤3007,在一些可能的实施例中,以第二绕行sid记为s,第一代理节点记为n为例,根据第二绕行sid执行的操作可以如下:whennreceivesapacketdestinedtosandsisalocalend.adbsid,ndoes/注释:当n接收到目的地址为s的数据包,且s为n发布的绕行sid时,n执行以下步骤/decrementsl/注释:将sl减一/updatetheipv6dawithsrh[sl]/注释:使用srh[sl]更新ipv6的目的地址/lookupthelocalsidtableusingtheupdatedda/注释:使用更新后的目的地址查询本地sid表。forwardaccordinglytothematchedentry/注释:根据本地sid表中的匹配条目执行转发操作。其中,将sl减一后,srh[sl]会对应end.ad.sid,则使用srh[sl]更新目的地址后,目的地址会更新为end.ad.sid,那么使用end.ad.sid查询本地sid表,会找到end.ad.sid对应的匹配条目。本地sid表中end.ad.sid对应的匹配条目可以用于指明end.ad.sid对应的操作,可以预先对end.ad.sid对应的匹配条目进行配置,使得end.ad.sid对应的操作包括:检测报文是否包含第三控制信息,如果报文中包含第三控制信息,则存储报文的srh,而不将报文的载荷转发给sf节点。在一个实施例中,可以预先对第一代理节点的转发规则进行配置,配置第一代理节点在接收到第五报文后,禁止(mustnot)使用第五报文本身对第二代理节点进行响应,从而避免第二代理节点接收到第五报文时重复执行生成第五报文和向第一代理节点发送第五报文的步骤,也就避免了第五报文在第二代理节点与第一代理节点之间形成转发环路。步骤3008、第二代理节点根据第四报文,生成第七报文。第七报文:用于将第四报文的载荷传输至sf节点的报文。第七报文可以是数据报文,第七报文可以包括第四报文的载荷且不包括第四报文的srh。关于第七报文的生成过程,第二代理节点可以从第四报文剥离srh,得到第七报文,以使第四报文的srh被移除,同时第四报文的载荷携带在第七报文中。可选地,第七报文还可以包括隧道头。具体而言,第二代理节点可以和sf节点建立传输隧道,则第二代理节点可以不仅剥离第四报文的srh,还生成该传输隧道对应的隧道头,封装隧道头,使得第七报文包括该隧道头。第七报文的隧道头可以是vxlan隧道头、gre隧道头或者ip-in-ip隧道头等。其中,第二代理节点可以先剥离第四报文的srh,再向剥离了srh的第四报文封装隧道头,也可以先向第四报文封装隧道头,再从封装了隧道头的第四报文剥离srh,本实施例对第七报文的生成过程中剥离srh与封装隧道头的时序不做限定。应理解,第七报文包括隧道头是可选方式,在另一个实施例中,第二代理节点可以将剥离了srh的第四报文直接作为第七报文,则第七报文也可以不包括隧道头。步骤3009、第二代理节点向sf节点发送第七报文。上述步骤3008至步骤3009带来的效果至少可以包括:一方面,第二代理节点能够将第四报文的载荷传输至sf节点,使得sf节点能够对载荷进行处理,从而通过处理报文来实现对应的业务功能;另一方面,通过避免将报文的srh传输至sf节点,从而避免sf节点由于不识别srh而导致报文处理失败的情况,因此实现了动态代理的功能。应理解,本实施例仅是以先描述第七报文的生成和发送过程,再描述第五报文的生成和发送过程为例进行描述,本实施例对生成第五报文与生成第七报文的先后顺序不做限定,对发送第五报文与发送第七报文的先后顺序也不做限定。在一个实施例中,步骤3003至步骤3004和步骤3008至步骤3009可以顺序执行。例如,可以先执行步骤3008至步骤3009,再执行步骤3003至步骤3004;也可以先执行步骤3003至步骤3004,再执行步骤3008至步骤3009。在另一个实施例中,可以同时执行步骤3003至步骤3004和步骤3008至步骤3009。步骤3010、sf节点从第二代理节点接收第七报文,对第七报文进行处理,得到第一报文。sf节点可以根据配置的业务策略,对第七报文进行业务功能处理。例如,sf节点可以对第七报文进行入侵检测,从而实现防火墙的业务功能。又如,sf节点可以修改第七报文的五元组、mac帧信息或应用层信息,从而实现nat的业务功能。再如,sf节点可以对第七报文进行负载均衡、用户认证等,本实施例对sf节点的处理方式不做限定。步骤3011、sf节点向第一代理节点发送第一报文。步骤3012、第一代理节点从sf节点接收第一报文,查询第一代理节点的缓存,得到第一报文对应的srh。第一代理节点可以根据第一报文,获取第一报文对应的srh的索引,根据索引,查询第一代理节点的缓存中的srh,找到第四报文的srh,该第四报文的srh即与第一报文对应的srh。在一个实施例中,srh的查询方式可以包括下述查询方式一至查询方式三中的任一种:查询方式一、第二代理节点可以根据第一报文,获取第一报文对应的流标识,以第一报文对应的流标识为索引,查询缓存,得到第一报文对应的srh。其中,第一报文可以包括流标识。查询方式二、第二代理节点可以根据第一报文,获取缓存表项的标识,以缓存表项的标识为索引,查询缓存,得到第一报文对应的srh,其中,第一报文可以包括缓存表项的标识例。查询方式三、、第二代理节点可以根据第一报文,获取第一报文对应的流标识和vpn标识,根据第一报文对应的流标识、vpn标识和end.ad.sid,查询缓存,得到第一报文的srh,其中,第一报文可以包括vpn标识,该vpn标识可以映射至end.ad.sid,。步骤3013、第一代理节点根据第一报文以及第一报文对应的srh,生成第三报文。步骤3014、第一代理节点向路由节点发送第三报文。步骤3015、路由节点从第一代理节点接收第三报文,转发第三报文。本实施例提供的方法,第二代理节点通过接收第一代理节点发来的第二报文,发现第一代理节点丢失了缓存的srh,则后续每当第二代理节点接收到包含srh的报文时,第二代理节点会将srh携带在第五报文,将第五报文发送给第一代理节点,那么第一代理节点可以通过第五报文,重新得到srh,从而重新缓存srh,如此,第一代理节点可以在缓存丢失后,自动、快速地重新学习到包含srh的缓存表项,从而实现了缓存自愈。如果第一代理节点后续接收到待恢复srh的报文,通过本地即可执行恢复srh的任务,实现动态代理功能,而不必将报文绕行转发至第二代理节点,从而避免了流量绕行带来的传输时延。上述方法实施例描述了报文传输的基本流程,本申请实施例提供的方法还可以支持nat的场景。在nat的场景下,可以通过执行本申请实施例提供的方法,来保证在sf节点修改了报文对应的流标识的情况下,代理节点根据已修改流标识的报文,仍能够查找到报文的srh,从而保证报文的srh得到恢复。以下,结合图47具体描述nat的场景下的报文传输流程。需要说明的是,图47实施例着重描述与图5实施例的区别之处,而与图5实施例同理的步骤以及其他特征还请参见图5实施例,在图47实施例不做赘述。参见图47,图47是本申请实施例提供的一种报文传输方法的流程图,如图47所示,该方法可以包括以下步骤:步骤4701、路由节点向第二代理节点发送第四报文。其中,第四报文可以包括第一报文对应的srh,例如,第四报文的srh可以就是第一报文对应的srh。步骤4702、第二代理节点从路由节点接收第四报文,确定sf节点的业务功能包括对流标识进行修改。在一个实施例中,第二代理节点可以读取第四报文的目的地址,第二代理节点可以根据第四报文的目的地址,查询本地sid表,判断目的地址与本地sid表中的sid是否匹配。当目的地址与本地sid表中的end.ad.sid匹配,即目的地址命中了本地sid表中的end.ad.sid时,第二代理节点可以确定第四报文是srv6报文,执行end.ad.sid对应的动态代理操作。关于确定sf节点的业务功能的过程,在一个实施例中,可以预先对第二代理节点可进行配置操作,第二代理节点可以接收配置指令,从配置指令获取sf节点的业务功能信息,该业务功能信息表示sf节点的业务功能包括对流标识进行修改,第二代理节点可以存储sf节点的业务功能信息,根据该业务功能信息,确定sf节点的业务功能包括对流标识进行修改。在另一个实施例中,也可以由第二代理节点可自动发现sf节点的业务功能包括对流标识进行修改,例如第二代理节点可以向sf节点发送能力查询请求,sf节点可以接收能力查询请求,响应于能力查询请求,向第二代理节点可发送业务功能信息,第二代理节点可以根据接收的业务功能信息,确定sf节点的业务功能包括对流标识进行修改。当然,还可以由流分类器或者网络的控制器将sf节点的业务功能信息发送给sf节点,本实施例对第二代理节点可如何确定sf节点的业务功能不做限定。本实施例中,第二代理节点可以通过确定sf节点的业务功能包括对流标识进行修改,执行后续步骤提供的方式,保证在sf节点修改了报文对应的流标识的情况下,代理节点根据已修改流标识的报文,仍能够查找到报文的srh,从而保证报文的srh得到恢复。步骤4703、第二代理节点以第二缓存表项的标识为索引,在第二缓存表项中存储第一报文对应的srh。第二缓存表项的标识用于在第二代理节点的缓存中唯一标识第二缓存表项。第二缓存表项的标识可以包括第二缓存表项的缓存索引(cacheindex),该缓存索引用于在第二代理节点的接口板中标识第二缓存表项。在一个实施例中,第二代理节点可以包括多个接口板,则第二缓存表项的标识还可以包括目标接口板(targetboard,tb)的标识,目标接口板为第二缓存表项所在的接口板,目标接口板的标识用于在第二代理节点的每个接口板中标识目标接口板。在一个实施例中,第二代理节点可以检测缓存中是否已经存储了第一报文对应的srh,如果缓存中未存储第一报文对应的srh,则第二代理节点为第一报文对应的srh分配缓存表项,得到第二缓存表项,在该第二缓存表项中存储第一报文对应的srh。此外,如果检测到缓存中已存储第一报文对应的srh,可以免去存储第一报文对应的srh的步骤。步骤4704、第二代理节点根据第四报文,生成第七报文。可选地,第七报文可以包括用于存储srh的缓存表项的标识,该缓存表项的标识可以携带在第七报文的载荷中。通过在第七报文中携带缓存表项的标识,使得sf节点接收到的报文会携带缓存表项的标识,那么sf节点对报文进行业务处理后,得到的报文也会携带缓存表项的标识,使得sf节点向代理节点返回的报文可以携带缓存表项的标识,因此代理节点可以利用返回的报文中的缓存表项的标识,查找到之前存储srh的缓存表项。本实施例中,第七报文包括的用于存储srh的缓存表项的标识可以是第二缓存表项的标识。步骤4705、第二代理节点向sf节点发送第七报文。步骤4706、sf节点从第二代理节点接收第七报文,对第七报文进行处理,得到第一报文。sf节点在处理报文的过程中,可以将第七报文包含的缓存表项的标识携带在第一报文中,使得第一报文包括用于缓存srh的缓存表项的标识。其中,第一报文包括的缓存表项的标识和第七报文包括的缓存表项的标识相同,缓存表项的标识可以携带在第一报文的载荷中。在本实施例中,第一报文可以包括第二缓存表项的标识。步骤4707、sf节点向第一代理节点发送第一报文。步骤4708、第一代理节点从sf节点接收第一报文,查询第一代理节点的缓存,未得到第一报文对应的srh。步骤4709、第一代理节点根据第一报文和对应于第二代理节点的第一绕行sid,生成第二报文。第一代理节点在生成报文的过程中,可以将第一报文包含的第二缓存表项的标识携带在第二报文中,则第二报文可以包括第一缓存表项的标识。此外,与图5实施例相区别,本实施例中,第一控制信息可以在指示第二代理节点恢复第一报文对应的srh的基础上,还用于指示第二代理节点以该第二缓存表项的标识为索引查询该第一报文对应的srh。例如,第一控制信息可以包括第二标志,该第二标志用于标识sf节点的业务功能包括对流标识进行修改,可以预先对第二代理节点进行配置,令第二代理节点如果确定控制信息包括第二标志,则以第二缓存表项的标识为索引查询该第一报文对应的srh。例如,该第二标志可以记为nat标志,该nat标志用于标识sf节点的业务功能包括nat。示例性地,参见图20,第二报文可以包括如图20所示的扩展头,其中,缓存索引字段以及tb字段用于携带第二缓存表项的标识,缓存索引字段的取值可以为第二缓存表项的标识中的缓存索引,tb字段的取值可以为第二缓存表项的标识中目标接口板的标识,n字段用于携带第二标志,例如,n字段的取值可以是1,表示sf节点是nat类型的sf,sf节点的业务功能包括修改流标识,因此识别出n字段的取值为1时,要以缓存表项的标识为索引查询缓存。步骤4710、第一代理节点向第二代理节点发送第二报文。步骤4711、第二代理节点从第一代理节点接收第二报文,确定第一控制信息指示第二代理节点恢复第一报文对应的srh和以第二缓存表项的标识为索引查询第一报文对应的srh。在一些可能的实施例中,第二代理节点可以识别第二报文中第一标志的取值和第二标志的取值,如果第一标志的取值设置为1、第二标志的取值设置为1,则确定控制信息指示存储第一报文的srh,且存储第一缓存表项的标识与第二缓存表项的标识之间的映射关系。步骤4712、第二代理节点以第二缓存表项的标识为索引,查询第二代理节点的缓存,从第二缓存表项得到第一报文对应的srh。示例性地,路由节点预先向第二代理节点发送了srv6报文,该srv6报文的载荷是ipv4报文,该srv6报文携带了srh1。第二代理节点从srv6报文剥离了srh1,将srh1存储在tb2中,srh1在tb2的缓存索引是cacheindex2,则第二缓存表项的标识为(tb2,cacheindex2)。第二代理节点可以在ipv4报文中携带(tb2,cacheindex2),发给sf节点,sf节点对ipv4报文处理后,将处理后的ipv4报文返回给第二代理节点,返回的ipv4报文仍携带(tb2,cacheindex2);第二代理节点接收到处理后的ipv4报文,以(tb2,cacheindex2)为索引,查询本地缓存,发现未命中本地缓存,则对ipv4报文重新封装,绕行转发给第二代理节点,绕行转发的ipv4报文仍携带(tb2,cacheindex2);第二代理节点接收到绕行转发的ipv4报文,以(tb2,cacheindex2)为索引,在tb2上查找cacheindex2对应的缓存表项,从该缓存表项中得到第一报文对应的srh。步骤4713、第二代理节点根据第二报文和第一报文对应的srh,生成第三报文。步骤4714、第二代理节点向路由节点发送第三报文。步骤4715、路由节点从第二代理节点接收第三报文,转发第三报文。参见图48,图48是本实施例提供的一种报文传输的示意图,该示意图示出了代理节点接入了业务功能为nat类型的sf节点下恢复srh的流程。相关技术中,srv6sfc的动态代理节点通常以报文的五元组为key,在缓存表项中存储报文的srh,当接收到sf节点返回的报文后,仍以报文的五元组为key,从缓存中查询对应的缓存表项。那么,如果sf节点的业务功能是nat,由于sf节点会在处理报文的过程中,修改报文的五元组,使得sf节点返回的报文的五元组会与之前接收的报文的五元组不一致,也就使得代理节点从sf节点接收的报文与之前向sf节点发送的报文的五元组不一致,那么代理节点根据接收到的报文查询缓存时,由于查询缓存时使用的key和在缓存中存储时使用的key不一致,导致查找不到srh,也就无法向报文恢复srh,进而导致报文传输失败。比如,代理节点之前以五元组1为key存储了srh,而报文的五元组被sf节点从五元组1修改为五元组2,代理节点以五元组2为key查询缓存时,会无法得到srh。本实施例提供的方法,代理节点通过以存储了srh的缓存表项的标识为key,来查询报文的srh,那么如果sf节点将修改了流标识的报文返回给代理节点,由于存储srh的缓存表项相对于代理节点来说通常是固定的,不会由于流标识的修改而改变,因此以缓存表项的标识为索引,能够查询到修改了流标识的报文的srh,从而向修改了流标识的报文恢复srh。基于这种方式,即使sf是nat功能的sf,使得报文在传输过程中流标识被改变,代理节点也能够恢复srh,因此可以让代理节点支持接入nat功能的sf,从而为实现了nat功能的sf提供动态代理功能。图47实施例提供了一种支持nat场景下恢复srh的方案,图47实施例中,第二代理节点缓存的srh是路由节点之前发给第二代理节点的。本申请实施例并不限定第二代理节点上srh的来源,在另一些实施例中,第二代理节点缓存的srh可以不是路由节点发给第二代理节点的,而是其他节点之前发给第二代理节点的。以第一代理节点将srh发给第二代理节点为例,以下通过图49实施例,对另一种nat场景下恢复srh的流程进行具体描述。参见图49,图49是本申请实施例提供的一种报文传输方法的流程图,如图49所示,该方法可以包括以下步骤:步骤4901、路由节点向第一代理节点发送第四报文。步骤4902、第一代理节点从路由节点接收第四报文,在第一缓存表项中存储第一报文对应的srh。第一缓存表项为该第一代理节点历史存储该第一报文对应的srh的缓存表项,在一个实施例中,第一代理节点可以检测缓存中是否已经存储了第一报文对应的srh,如果缓存中未存储第一报文对应的srh,则第一代理节点为第一报文对应的srh分配缓存表项,得到第一缓存表项,在该第一缓存表项中存储第一报文对应的srh。此外,如果检测到缓存中已存储第一报文对应的srh,可以免去存储第一报文对应的srh的步骤。其中,第一代理节点可以包括接口板,接口板可以包括转发表项存储器,第一缓存表项可以存储在转发表项存储器中。第一缓存表项的标识用于在第一代理节点的缓存中唯一标识第一缓存表项。第一缓存表项的标识可以包括第一缓存表项的缓存索引(cacheindex),该缓存索引用于在第一代理节点的接口板中标识第一缓存表项。在一个实施例中,第一代理节点可以包括多个接口板,则第一缓存表项的标识还可以包括目标接口板(targetboard,tb)的标识,目标接口板为第一缓存表项所在的接口板,目标接口板的标识用于在第一代理节点的每个接口板中标识目标接口板。步骤4903、第一代理节点向第二代理节点发送第一报文对应的srh和第一缓存表项的标识。关于发送srh和第一缓存表项的标识的触发条件,在一个实施例中,第一代理节点可以每当缓存了srh时,将srh以及用于缓存srh的缓存表项的标识同步给对端代理节点。如果第一代理节点从路由节点接收到第一报文对应的srh,第一代理节点可以为第一报文对应的srh分配缓存表项,得到第一缓存表项,在该第一缓存表项中存储第一报文对应的srh,可以在这一情况的触发下,执行步骤4903。关于发送srh以及第一缓存表项的标识的方法,在一个实施例中,第一代理节点可以根据端点动态代理sid、第一报文对应的srh和对应于第二代理节点的第一绕行sid,生成第五报文,向第二代理节点发送第五报文。本实施例中,第五报文用于将第一报文对应的srh传输至对端代理节点。第五报文可以包括第一报文对应的srh和第一缓存表项的标识。在一些实施例中,第五报文可以通过sid在网络中转发。具体地,第五报文可以是srv6报文,第五报文的目的地址可以为第一绕行sid,即,第五报文的活跃sid可以为第一绕行sid。其中,第五报文的srh可以包括第一报文对应的srh中的每个sid以及第一绕行sid。在一个可选的实施例中,可以预先在第一代理节点上,配置end.ad.sid对应的处理策略,该处理策略可以包括执行动态代理操作以及生成和发送第五报文的操作,因此第一代理节点接收到第一报文后,根据第一报文中的end.ad.sid,不仅会提供动态代理服务,还会执行控制第二代理节点存储srh的操作。通过这种方式,充分利用了srv6通过sid来进行编程的能力,扩展了end.ad.sid对应的操作。在一个实施例中,第一代理节点可以对第四报文进行重新封装,得到第五报文。具体地,第五报文的生成过程可以包括下述步骤一至步骤三。步骤一、第一代理节点向第四报文的srh的段列表插入第一绕行sid。步骤二、第一代理节点将第四报文的srh的sl加一。步骤三、第一代理节点将第四报文的目的地址更新为第一绕行sid,得到第五报文。在一个实施例中,第五报文可以包括第三控制信息,第三控制信息用于指示第二代理节点存储第一报文对应的srh。如果第三控制信息携带在扩展头中,则第一代理节点可以不仅执行步骤一、步骤二以及步骤三,还执行以下步骤四。步骤四、第一代理节点生成扩展头,向第四报文封装扩展头,扩展头包括第三控制信息。需要说明的一点是,第一代理节点生成第五报文的过程可以和第二代理节点生成第五报文的过程同理,具体细节可以参见步骤1303,在此不做赘述。步骤4904、第二代理节点从第一代理节点接收第一报文对应的srh和第一缓存表项的标识,第二代理节点确定sf节点的业务功能包括对流标识进行修改和第一控制信息还指示以该第一缓存表项的标识相映射的第二缓存表项的标识为索引查询该第一报文对应的srh。在一个实施例中,第二代理节点可以接收第五报文,解析第五报文,得到第五报文携带的第一报文对应的srh和第一缓存表项的标识。其中,第二代理节点对第五报文执行的动作可以和第一代理节点对第五报文执行的动作同理,具体细节可以参见上文,在此不做赘述。此外,确定sf节点的业务功能的过程与上述实施例同理,具体细节可以参见上文,在此不做赘述。其中,第二代理节点可以识别第二报文中第一标志的取值、第二标志的取值和第三标志的取值,如果n标志(natflag,即上文中的第二标志)的取值设置为1,c标志(cflag,复制标志,即上文中的第三标志)的取值设置为1、a标志(ackflag,即上文中的第四标志)的取值设置为0,则确定控制信息指示存储第一报文的srh,且存储第一缓存表项的标识与第二缓存表项的标识之间的映射关系。步骤4905、第二代理节点以第二缓存表项的标识为索引,在第二缓存表项中存储该第一报文对应的srh。步骤4906、第二代理节点存储第一缓存表项的标识与第二缓存表项的标识之间的映射关系。在一个实施例中,第二代理节点可以建立第一缓存表项的标识与第二缓存表项的标识之间的映射关系,存储该映射关系。示例性地,如果第一代理节点发来的第一缓存表项的标识为(tb1,cacheindex1),而第二代理节点将srh存储在tb2中,srh在tb2的缓存索引是cacheindex2,则第二缓存表项的标识为(tb2,cacheindex2),第二代理节点可以建立映射关系(tb1,cacheindex1,tb2,cacheindex2),存储映射关系(tb1,cacheindex1,tb2,cacheindex2)。步骤4907、第一代理节点根据第四报文,生成第七报文。第一代理节点生成第七报文的过程与上述实施例中第二代理节点生成第七报文的过程同理,相区别的是,本实施例中,第七报文包括的用于存储srh的缓存表项的标识为第一缓存表项的标识。步骤4908、第一代理节点向sf节点发送第七报文。步骤4909、sf节点从第一代理节点接收第七报文,对第七报文进行处理,得到第一报文。步骤4910、sf节点向第一代理节点发送第一报文。本实施例中,第一报文可以包括第一缓存表项的标识。步骤4911、第一代理节点从sf节点接收第一报文,查询第一代理节点的缓存,未得到第一报文对应的srh。步骤4912、第一代理节点根据第一报文和对应于第二代理节点的第一绕行sid,生成第二报文。第二报文还包括第一缓存表项的标识,第一控制信息可以在指示第二代理节点恢复第一报文对应的srh的基础上,第一控制信息还用于指示以第一缓存表项的标识相映射的第二缓存表项的标识为索引查询第一报文对应的srh。步骤4913、第一代理节点向第二代理节点发送第二报文。步骤4914、第二代理节点从第一代理节点接收第二报文,确定第一控制信息指示第二代理节点恢复第一报文对应的srh和以第一缓存表项的标识相映射的第二缓存表项的标识为索引查询第一报文对应的srh。步骤4915、第二代理节点根据第一缓存表项的标识,查询第一缓存表项的标识与第二缓存表项的标识之间的映射关系,得到第二缓存表项的标识。步骤4916、第二代理节点以第二缓存表项的标识为索引,查询第二代理节点的缓存,从第二缓存表项得到第一报文对应的srh。例如,如果第二报文中携带的缓存表项的标识为(tb1,cacheindex1),第二代理节点存储的映射关系包括(tb1,cacheindex1,tb2,cacheindex2),第二代理节点根据(tb1,cacheindex1),查询映射关系,可以得到本地缓存表项的标识为(tb2,cacheindex2),在tb2上查找cacheindex2对应的缓存表项,从该缓存表项中得到第一报文对应的srh。步骤4917、第二代理节点根据第二报文和第一报文对应的srh,生成第三报文。步骤4918、第二代理节点向路由节点发送第三报文。步骤4919、路由节点从第二代理节点接收第三报文,转发第三报文。参见图50,图50是本实施例提供的一种报文传输的示意图,该示意图示出了代理节点接入了业务功能为nat类型的sf节点下恢复srh的流程。本实施例提供的方法,代理节点通过维护本端的缓存表项与对端的缓存表项之间的映射关系,当第一代理节点未从本地缓存未找到srh时,可以将缓存表项的标识传输至第二代理节点,利用控制信息,指示第二代理节点结合映射关系,找到第二代理节点上存储srh的缓存表项,从而从该缓存表项找到报文的srh,从而向修改了流标识的报文恢复srh。基于这种方式,即使sf是nat功能的sf,使得报文在传输过程中流标识被改变,代理节点也能够恢复srh,因此可以让代理节点支持接入nat功能的sf,从而为实现了nat功能的sf提供动态代理功能。上述方法实施例描述了支持nat场景的报文传输流程。本申请实施例提供的方法还可以支持srv6vpn的场景,srv6vpn是指基于srv6隧道来传输vpn数据,在srv6vpn的场景下,业务链中的sf节点要对vpn数据进行处理,从而实现vpn业务。在这种场景下,代理节点可以支持实现vpn业务的sf节点,通过执行下述方法实施例,来为实现vpn业务的sf节点提供动态代理服务。以下通过图51所示的方法实施例,对vpn场景下的报文传输流程进行描述。需要说明的是,图51实施例着重描述与图5实施例的区别之处,而与图5实施例同理的步骤或者其他特征还请参见图5实施例,在图51实施例中不做赘述。参见图51,图51是本申请实施例提供的一种报文传输方法的流程图,该方法可以包括以下步骤:步骤5101、第二代理节点接收配置指令。步骤5102、第二代理节点根据配置指令,存储端点动态代理sid与vpn标识之间的映射关系。第二代理节点可以接入多个sf节点,该多个sf节点可以属于不同的vpn,因此,在第二代理节点为该多个sf节点共同提供动态代理服务的过程中,第二代理节点可以接收到待发往不同vpn的报文。而不同vpn的报文可能出现对应于相同的流标识的情况,这就导致如果以流标识为索引来存储srh,不同vpn的报文的srh的索引会相同,导致不同vpn的报文的srh会被存储在相同的位置,那么,一方面,无法达到不同vpn之间信息隔离的目的,影响安全性,另一方面,由于同一个索引在缓存中同时命中多个srh,导致无法确定向报文恢复哪一个srh,进而导致恢复srh失败。而本实施例中,可以预先为每个vpn的sf节点分配对应的end.ad.sid,不同vpn的sf节点对应的end.ad.sid不同。通过这种分配end.ad.sid的方式,end.ad.sid能够作为vpn的标识,发往不同vpn的sf节点的报文中携带的end.ad.sid会不同,通过不同的end.ad.sid,能够区分不同vpn的报文。例如,如果第二代理节点接入了10个sf节点,分别是sf节点0、sf节点1至sf节点9,这10个sf节点分别属于2个不同的vpn,其中sf节点0至sf节点5属于vpn1,sf节点6至sf节点9属于vpn2。在这一例子中,可以为10个sf节点分配2个end.ad.sid,其中,为sf节点0至sf节点5分配1个end.ad.sid,为sf节点6至sf节点9分配另1个end.ad.sid,通过报文中的end.ad.sid是这两个end.ad.sid中的哪一个,能够标识报文是发往哪个vpn的报文。例如,为sf节点0至sf节点5分配的end.ad.sid可以是a::1,为sf节点6至sf节点9分配的end.ad.sid可以是b::2,那么如果接收到的报文1和报文2,报文1携带的end.ad.sid是a::1,报文2携带的end.ad.sid是b::2,则表明报文1是vpn1对应的报文,报文2是vpn2对应的报文。由于发往不同vpn的sf节点的报文中携带的end.ad.sid不同,因此,通过以流标识和end.ad.sid为索引,来存储srh,不同vpn的报文的索引能够通过不同的end.ad.sid区别开,从而保证不同vpn的报文的srh得以分开存储,实现不同vpn的信息隔离,此外避免了同一个索引命中多个vpn的报文的情况,从而解决了上述技术问题。此外,第二代理节点接入的sf节点可以分别属于公网和vpn,可以为公网的sf节点和vpn的sf节点分别分配对应的end.ad.sid,公网的sf节点对应的end.ad.sid和vpn的sf节点对应的end.ad.sid不同。例如,如果第二代理节点接入的10个sf节点中,sf节点0至sf节点4属于公网,sf节点5至sf节点9属于vpn1。在这一例子中,可以为10个sf节点分配2个end.ad.sid,其中,为sf节点0至sf节点4分配1个end.ad.sid,为sf节点5至sf节点9分配另1个end.ad.sid,通过这种分配方式,以流标识和end.ad.sid为索引,来存储srh,能够保证公网的报文的srh与vpn的报文的srh得以分开存储,此外避免了同一个索引命中公网的报文以及vpn的报文的情况。在一个实施例中,可以在第二代理节点上进行配置操作,来配置为每个vpn的sf节点分配的end.ad.sid。第二代理节点可以接收配置指令,第二代理节点可以根据配置指令,存储端点动态代理sid与vpn标识之间的映射关系。其中,配置指令包括每个vpn中的sf节点对应的end.ad.sid。第二代理节点可以解析配置指令,得到配置指令携带的每个vpn中的sf节点对应的end.ad.sid。例如,如果第二代理节点接入了两个vlan中的sf节点,两个vlan分别通过vlanid100和vlanid200来标识,可以预先在第二代理节点上配置两个end.ad.sid,例如将a::1分配给vlanid100的vlan中的sf,将a::2分配给vlanid200的vlan中的sf,可以存储a::1与100之间的映射关系以及a::2与200之间的映射关系。当然,通过上述方式来存储end.ad.sid与vpn标识之间的映射关系仅是示例,第二代理节点也可以通过其他方式end.ad.sid与vpn标识之间的映射关系,例如自动学习end.ad.sid与vpn标识之间的映射关系,从控制器接收end.ad.sid与vpn标识之间的映射关系等。步骤5103、路由节点向第二代理节点发送第四报文。步骤5104、第二代理节点从路由节点接收第四报文,以第一报文对应的流标识和端点动态代理sid为索引,在第二缓存表项中存储第一报文对应的srh。第四报文包括第一报文对应的srh,第四报文的目的地址为end.ad.sid,第四报文对应的流标识为第一报文对应的流标识。以流标识为五元组为例,第四报文可以包括五元组,第四报文中的五元组和第一报文中的五元组相同。第四报文可以包括第一报文对应的srh,第一报文对应的srh可以包括end.ad.sid。第二代理节点可以获取第四报文对应的流标识,得到第一报文对应的流标识,此外,可以获取第四报文携带的end.ad.sid,以流标识和end.ad.sid为key,以第一报文对应的srh为值,对第一报文对应的srh进行缓存。步骤5105、第二代理节点根据第四报文,生成第七报文。第七报文对应的流标识为第一报文对应的流标识。其中,第七报文可以包括vpn标识。vpn标识用于标识业务功能节点所属的vpn,可以是vpn的id。例如,vpn标识可以是vlanid。在一个实施例中,第二代理节点可以和sf节点建立传输隧道,第二代理节点可以生成该传输隧道对应的隧道头,封装隧道头,使得第七报文包括该隧道头,vpn标识可以携带在隧道头中。步骤5106、第二代理节点向sf节点发送第七报文。步骤5107、sf节点从第二代理节点接收第七报文,对第七报文进行处理,得到第一报文。第一报文可以包括vpn标识,第一报文中的vpn标识和第七报文中的vpn标识相同。例如,第一报文可以包括隧道头,vpn标识可以携带在隧道头中。在一个实施例中,sf节点可以在处理第七报文的过程中,不剥离第七报文的隧道头,以使处理得到的第一报文包括第七报文的隧道头。步骤5108、sf节点向第一代理节点发送第一报文。步骤5109、第一代理节点从sf节点接收第一报文,查询第一代理节点的缓存,未得到第一报文对应的srh。步骤5110、第一代理节点根据第一报文和对应于第二代理节点的第一绕行sid,生成第二报文。第二报文对应的流标识为第一报文对应的流标识,第二报文可以包括vpn标识。其中,第一代理节点可以在将第一报文重新封装为第二报文的过程中,保持第一报文对应的流标识不变,使得生成的第二报文对应的流标识和第一报文对应的流标识相同。步骤5111、第一代理节点向第二代理节点发送第二报文。步骤5112、第二代理节点从第一代理节点接收第二报文,确定第一控制信息指示第二代理节点恢复第一报文对应的srh。步骤5113、第二代理节点根据vpn标识,查询端点动态代理sid与vpn标识之间的映射关系,得到vpn标识对应的端点动态代理sid。第二报文可以包括第一报文对应的流标识、vpn标识和载荷,第二代理节点可以从第二报文中获取vpn标识,根据vpn标识查询end.ad.sid与vpn标识之间的映射关系,从而找到与vpn标识对应于哪个end.ad.sid。例如,如果end.ad.sida::1与vlanid100之间具有映射关系,end.ad.sida::2与vlanid200之间具有映射关系,第二代理节点从第二报文中获取到vpn标识是100,则第二代理节点会根据100查询映射关系,得到对应的end.ad.sid是a::1。步骤5114、第二代理节点以第一报文对应的流标识和端点动态代理sid为索引,查询第二代理节点的缓存,得到第一报文对应的srh。步骤5115、第二代理节点根据第二报文和第一报文对应的srh,生成第三报文。步骤5116、第二代理节点向路由节点发送第三报文。步骤5117、路由节点从第二代理节点接收第三报文,转发第三报文。本实施例提供了一种支持srv6vpn场景下提供动态代理服务的方法,通过为每个vpn的sf节点分配对应的end.ad.sid,能够通过end.ad.sid来作为vpn的标识,因此代理节点通过以流标识和end.ad.sid为索引,来查询对应的srh,能够通过不同的end.ad.sid,将不同vpn的报文的srh的索引区别开,从而不同vpn的报文的srh得以分开存储,实现不同vpn的信息隔离,同时,避免通过同一个索引命中多个vpn的报文的srh的情况,保证查询的准确性。在上述方法实施例中,第一代理节点或第二代理节点可以通过状态机,来保持两个代理节点之间缓存表项的同步,以下对该状态机进行示例性描述。状态机可以记为peercache(对端缓存)状态机,状态机表示对端代理节点存储srh的状态。其中,第一代理节点的状态机表示第二代理节点存储srh的状态,第二代理节点的状态机表示第一代理节点存储srh的状态。对于第一代理节点或者第二代理节点中的任一个代理节点而言,代理节点可以为缓存中的每个缓存表项增加目标字段,将状态机当前的状态写入目标字段,在接收到第一报文时,根据缓存表项中目标字段的取值,来决定执行的动作。其中,该目标字段可以记为peercachestate(对端缓存状态)字段,该目标字段用于记录状态机当前的状态。状态机可以包括当前状态、下一状态、事件以及目标动作,第一代理节点可以根据检测到的事件以及状态机的当前状态,执行状态机中事件与当前状态对应的目标动作,将状态机切换为当前状态的下一状态。作为示例,状态机可以为第一状态机或者第二状态机中的任一种:参见图52,图52是本申请实施例提供的第一状态机的示意图,第一状态机适于通过重复发送来保证传输可靠性的情况,第一状态机提供的处理策略可以包括以下(1)至(9)中的一种或多种。应理解,下述第一状态机可以应用于第一代理节点,也可以应用于第二代理节点,对于第一代理节点而言,对端代理节点是指第二代理节点,对于第二代理节点而言,对端代理节点是指第一代理节点。(1)如果检测到第一事件,向对端代理节点连续发送多个第五报文,将状态机切换为第一状态。其中,第一事件为生成了第一缓存表项,第一事件在程序中可以记为localcachenew(本地增加了新的缓存表项)事件。第一状态表示第二缓存表项与第一缓存表项保持一致,第一状态在程序中可以记为缓存一致(cacheequal)状态。(2)如果检测到第二事件,向对端代理节点连续发送多个第五报文,将状态机切换为第一状态。其中,第二事件为更新了第一缓存表项,第二事件在程序中可以记为localcache_upd(直译为本地缓存更新,upd表示update,意为更新)事件。(3)如果检测到第三事件且状态机处于第二状态,向对端代理节点连续发送多个第五报文,将状态机切换为第一状态。其中,第三事件为接收了第四报文,第三事件在程序中可以记为localcachetouch(本地缓存被读取)事件。第二状态表示确定对端的缓存表项比本地的缓存表项更陈旧,或者对端的缓存表项比本地的缓存表项疑似更陈旧。在第二状态下,本地代理节点可以向对端代理节点发送第五报文,来更新对端代理节点的缓存表项中的srh。第二状态在程序中可以记为缓存更老(cache_older)状态。(4)如果检测到第四事件且状态机处于第一状态,删除第一缓存表项。第四事件为老化定时器超时,第四事件在程序中可以记为agingtimer_expired(老化定时器超时)事件。老化定时器超时表示第一缓存表项处于陈旧状态,可以清除第一缓存表项,来节省缓存空间。具体地,第一代理节点可以启动老化定时器,为第一缓存表项设置对应的老化标志(agingflag),该老化标志的取值可以是1或0。此外,第一代理节点可以通过老化定时器定期扫描第一缓存表项,如果扫描到第一缓存表项对应的老化标志为1,则将老化标志修改为0,如果扫描到第一缓存表项对应的老化标志为0,则删除第一缓存表项。其中,第一代理节点在转发报文的过程中,如果查询缓存时命中了第一缓存表项,则第一代理节点将第一缓存表项对应的老化标志设置为1,从而将第一缓存表项驻留在缓存中。(5)如果检测到第五事件且状态机处于第一状态,比较第五报文携带的srh与缓存已存储的srh是否一致,如果第五报文携带的srh与已存储的srh不一致,则将第五报文携带的srh存储在缓存表项中,从而更新缓存,并设置老化标志为1,保持状态机的当前状态不变。第五事件为接收到第五报文的事件,第五事件在程序中可以记为cachesync_recv(直译为缓存同步接收,sync表示synchronize,意为同步,含义是将srh同步至对端代理节点的缓存,recv表示receive,意为接收)事件。(6)如果检测到第五事件且状态机处于第二状态,比较第五报文中携带的srh与缓存已存储的srh是否一致,如果第五报文中携带的srh与已存储的srh不一致,则将第五报文中携带的srh存储在缓存表项中,从而更新缓存,并设置老化标志为1,将状态机切换为第一状态。(7)如果检测到第六事件且状态机处于第一状态,将状态机切换为第三状态。其中,第六事件为接收了第一报文,第六事件程序中可以记为cache_miss(缓存未命中)事件。第三状态表示确定对端的缓存表项丢失,要发送第五报文以使对端重新创建缓存表项,第三状态在程序中可以记为接收到包含缓存丢失标识的报文的(cachemiss_recv)状态。(8)如果检测到第三事件且状态机处于第三状态,向对端代理节点连续发送多个第五报文,将状态机切换为第一状态。(9)如果检测到第五事件且状态机处于第三状态,比较第五报文中携带的第四报文对应的srh与缓存已存储的srh是否一致,如果第五报文中携带的第四报文对应的srh与已存储的srh不一致,则将第五报文中携带的第四报文对应的srh存储在缓存表项中,从而更新缓存,并设置老化标志为1,将状态机切换为第一状态。参见图53,图53是本申请实施例提供的第二状态机的示意图,第二状态机适于通过确认机制来保证传输可靠性的情况,第二状态机提供的处理策略可以包括以下(1)至(13)中的一种或多种。需要说明的是,以下着重描述第二状态机与第一状态机的区别之处,而与第一状态机同理的特征还请参见第一状态机,以下不做赘述。(1)如果检测到第一事件,向对端代理节点发送一个第五报文,将状态机切换为第四状态。第四状态表示本地生成或更新了缓存表项,已经向对端代理节点发送了第五报文,等待对端代理节点对第五报文操作结果的确认,第四状态在程序中可以记为sync_start(直译为同步启动,sync表示synchronize,start意为启动)状态。(2)如果检测到第二事件且状态机处于第四状态,向对端代理节点发送一个第五报文,保持状态机的当前状态不变。(3)如果检测到第二事件且状态机处于第一状态,向对端代理节点发送一个第五报文,将状态机切换为第四状态。(4)如果检测到第三事件且状态机处于第四状态,将状态机切换为第一状态。(5)如果检测到第四事件且状态机处于第四状态,将状态机切换为第一状态。其中,在(4)和(5)下,可以不执行发送第五报文的动作,以避免两个代理节点同时处于第四状态,互相锁定。(6)如果检测到第五事件且状态机处于第一状态,比较第五报文中携带的srh与缓存已存储的srh是否一致,如果第五报文中携带的srh与已存储的srh不一致,则将第五报文中携带的srh存储在缓存表项中,从而更新缓存,并设置老化标志为1,保持状态机的当前状态不变。(7)如果检测到第四事件且状态机处于第一状态,将状态机切换为第二状态。(8)如果检测到第五事件且状态机处于第二状态,比较第五报文中携带的srh与缓存已存储的srh是否一致,如果第五报文中携带的srh与已存储的srh不一致,则将第五报文中携带的srh存储在缓存表项中,从而更新缓存,并设置老化标志为1,将状态机切换为第一状态。(9)如果检测到第三事件且状态机处于第二状态,向对端代理节点发送一个第五报文,将状态机切换为第四状态。(10)如果检测到第六事件且状态机处于第四状态,将状态机切换为第一状态。其中,第六事件为接收到第六报文,第六事件在程序中可以记为cachesync_ack(直译为缓存同步确认,sync表示synchronize,ack表示acknowledge,意为确认)事件。(11)如果检测到第六事件且状态机处于第一状态,将状态机切换为第三状态。(12)如果检测到第三事件且状态机处于第三状态,向对端代理节点发送一个第五报文,将状态机切换为第四状态。(13)如果检测到第五事件且状态机处于第三状态,比较第五报文中携带的第四报文对应的srh与缓存已存储的srh是否一致,如果第五报文中携带的第四报文对应的srh与已存储的srh不一致,则将第五报文中携带的第四报文对应的srh存储在缓存表项中,从而更新缓存,并设置老化标志(agingflag)为1,将状态机切换为第一状态。通过状态机的机制,达到的效果至少可以包括:通过状态机,能够实时根据对端代理节点缓存srh的状态来决定当前执行的动作,从而将srh及时传输给对端的代理节点,能够保证本地代理节点与对端代理节点之间的缓存表项保持同步,实现双归接入到同一个sf节点的代理节点之间srh的一致性。以上介绍了本申请实施例的报文传输方法,以下介绍第一代理节点和第二代理节点。图54是本申请实施例提供的一种第一代理节点的结构示意图,如图54所示,该第一代理节点包括:接收模块5401,用于执行接收第一报文的步骤,例如可以执行上述方法实施例中的步骤502、步骤3012、步骤4708、步骤4911或步骤5109;查询模块5402,用于执行查询缓存的步骤,例如可以执行上述方法实施例中的步骤502、步骤3012、步骤4708、步骤4911或步骤5109;生成模块5403,用于执行生成第二报文的步骤,例如可以执行上述方法实施例中的步骤503、步骤3013、步骤4709、步骤4912或步骤5110;发送模块5404,用于执行发送第二报文的步骤,例如可以执行上述方法实施例中的步骤504、步骤3014、步骤4710、步骤4913或步骤5111。可选地,第二报文包括ip头,ip头的目的地址为第一绕行sid。可选地,第二报文包括ip头和第二报文的srh,ip头的目的地址为一个或多个目标sid中对应于下一个分段路由sr节点的sid,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径,srh包括第一绕行sid和一个或多个目标sid。可选地,生成模块5403,用于生成第二报文的ip头;向第一报文封装第二报文的ip头。可选地,生成模块5403,用将第一报文的ip头更新为第二报文的ip头。可选地,第二报文还包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。可选地,第二控制信息携带在第二报文的srh的类型长度值tlv中;或,第二控制信息携带在第二报文的ip头中。可选地,第一控制信息携带在第二报文的扩展头中;或者,第一控制信息携带在第一绕行sid中;或者,第一控制信息携带在第二报文的互联网协议ip头中;或者,第一控制信息携带在第二报文的srh中的tlv中。可选地,第一报文由来自第二代理节点的报文经过业务功能处理后得到,第一报文包括第二缓存表项的标识,第二缓存表项为第二代理节点存储第一报文对应的srh的缓存表项;第二报文还包括第二缓存表项的标识,第一控制信息还用于指示第二代理节点以第二缓存表项的标识为索引查询第一报文对应的srh。可选地,第一报文由来自第一代理节点的报文经过业务功能处理后得到,第一报文包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项;第二报文包括第一缓存表项的标识,第一控制信息还用于指示第二代理节点以第一缓存表项的标识相映射的第二缓存表项的标识为索引,查询第一报文对应的srh。可选地,第一代理节点通过第一链路与第二代理节点相连,发送模块5404,用于通过对应于第一链路的第一出接口,向第二代理节点发送第二报文;或者,第一代理节点通过第二链路与路由节点相连,路由节点通过第三链路与第二代理节点相连,发送模块5404,用于通过对应于第二链路的第二出接口,向路由节点发送第二报文,第二报文由路由节点通过第三链路转发至第二代理节点。可选地,第一代理节点,还包括:检测模块,用于对第一链路的状态进行检测;发送模块5404,用于如果第一链路处于可用状态,通过对应于第一链路的第一出接口,向第二代理节点发送第二报文;或者,如果第一链路处于不可用状态,通过对应于第二链路的第二出接口,向路由节点发送第二报文。应理解,图54实施例提供的第一代理节点对应于上述方法实施例中的第一代理节点,第一代理节点中的各模块和上述其他操作和/或功能分别为了实现方法实施例中的第一代理节点所实施的各种步骤和方法,具体细节可参见上述方法实施例,为了简洁,在此不再赘述。需要说明的一点是,图54实施例提供的第一代理节点在传输报文时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将第一代理节点的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的第一代理节点与上述报文传输的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。图55是本申请实施例提供的一种第二代理节点的结构示意图,如图55所示,该第二代理节点包括:接收模块5501,用于执行接收第二报文的步骤,例如可以执行上述方法实施例中的步骤505、步骤3011、步骤4714或步骤5112;确定模块5502,用于执行确定该第一控制信息指示恢复srh的步骤,例如可以执行上述方法实施例中的步骤505、步骤3011、步骤4714或步骤5112;查询模块5503,用于执行查询缓存的步骤,例如可以执行上述方法实施例中的步骤506、步骤3012、步骤4716或步骤5114;生成模块2304,用于执行生成第三报文的步骤,例如可以执行上述方法实施例中的步骤507、步骤3013、步骤4717或步骤5115;发送模块5505,用于执行发送第三报文的步骤,例如可以执行上述方法实施例中的步骤508、步骤3014、步骤4718或步骤5116。可选地,第二报文包括互联网协议ip头,ip头的目的地址为第一绕行sid。可选地,第二报文包括ip头和第二报文的srh,ip头的目的地址为一个或多个目标sid中对应于下一个分段路由sr节点的sid,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径,srh包括第一绕行sid和一个或多个目标sid。可选地,生成模块2304,用于从第二报文剥离第二报文的ip头;封装第一报文对应的srh,得到第三报文。可选地,生成模块2304,用于将第二报文的ip头更新为第一报文的ip头;封装第一报文对应的srh,得到第三报文。可选地,第二报文的srh包括类型长度值tlv,tlv包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。可选地,第二控制信息携带在第二报文的srh的类型长度值tlv中;或,第二控制信息携带在第二报文的ip头中。可选地,第一控制信息携带在第二报文的扩展头中;或者,第一控制信息携带在第一绕行sid中;或者,第一控制信息携带在第二报文的ip头中;或者,第一控制信息携带在第二报文的srh中的tlv中。可选地,第二报文还包括第二缓存表项的标识,确定模块5502,还用于确定第一控制信息还指示以第二缓存表项的标识为索引查询第一报文对应的srh;查询模块5503,用于以第二缓存表项的标识为索引,查询第二代理节点的缓存,从第二缓存表项得到第一报文对应的srh。可选地,第二报文还包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项;确定模块5502,还用于确定第一控制信息还指示以第一缓存表项的标识相映射的第二缓存表项的标识为索引查询第一报文对应的srh;查询模块5503,还用于根据第一缓存表项的标识,查询第一缓存表项的标识与第二缓存表项的标识之间的映射关系,得到第二缓存表项的标识;查询模块5503,用于以第二缓存表项的标识为索引,查询第二代理节点的缓存,从第二缓存表项得到第一报文对应的srh。可选地,确定模块5502,还用于确定业务功能节点的业务功能包括对流标识进行修改。可选地,第二报文对应的流标识为第一报文对应的流标识,查询模块5503,用于以第一报文对应的流标识和端点动态代理sid为索引,查询第二代理节点的缓存,得到第一报文对应的srh。可选地,第二报文包括sf节点所属的虚拟专用网络vpn的vpn标识,查询模块5503,还用于根据vpn标识,查询端点动态代理sid与vpn标识之间的映射关系,得到vpn标识对应的端点动态代理sid。可选地,接收模块5501,还用于接收配置指令,配置指令包括每个vpn中的业务功能节点对应的端点动态代理sid;存储模块,还用于根据配置指令,存储端点动态代理sid与vpn标识之间的映射关系。可选地,接收模块5501,还用于接收第四报文,第四报文包括第一报文对应的srh,第四报文的目的地址为端点动态代理sid,第四报文对应的流标识为第一报文对应的流标识;存储模块,用于以第一报文对应的流标识和端点动态代理sid为索引,在第二缓存表项中存储第一报文对应的srh。可选地,第二代理节点通过第一链路与第一代理节点相连,接收模块5501,用于通过对应于第一链路的第一入接口,从第一代理节点接收第二报文;或者,第二代理节点通过第三链路与路由节点相连,路由节点通过第二链路与第一代理节点相连,接收模块5501,用于通过对应于第三链路的第二入接口,从路由节点接收第二报文,第二报文由第一代理节点通过第二链路发送至路由节点。应理解,图55实施例提供的第二代理节点对应于上述方法实施例中的第二代理节点,第二代理节点中的各模块和上述其他操作和/或功能分别为了实现方法实施例中的第二代理节点所实施的各种步骤和方法,具体细节可参见上述方法实施例,为了简洁,在此不再赘述。需要说明的一点是,图55实施例提供的第二代理节点在传输报文时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将第二代理节点的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的第二代理节点与上述报文传输的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。以上介绍了本申请实施例提供的第一代理节点和第二代理节点,以下介绍第一代理节点和第二代理节点可能的产品形态。应理解,但凡具备上述第一代理节点的特征的任何形态的产品,和但凡具备第二代理节点的特征的任何形态的产品,都落入本申请的保护范围。还应理解,以下介绍仅为举例,不限制本申请实施例的第一代理节点和第二代理节点的产品形态仅限于此。本申请实施例提供了一种代理节点,该代理节点可以是第一代理节点,也可以是第二代理节点。该代理节点包括处理器,该处理器用于执行指令,使得该代理节点执行上述各个方法实施例提供的报文传输方法。作为示例,该处理器可以是网络处理器(networkprocessor,简称np)、中央处理器(centralprocessingunit,cpu)、特定应用集成电路(application-specificintegratedcircuit,asic)或用于控制本申请方案程序执行的集成电路。该处理器可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。该处理器的数量可以是一个,也可以是多个。在一些可能的实施例中,该代理节点还可以包括存储器。存储器可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其它类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器和处理器可以分离设置,存储器和处理器也可以集成在一起。在一些可能的实施例中,该代理节点还可以包括收发器。收发器用于与其它设备或通信网络通信,网络通信的方式可以而不限于是以太网,无线接入网(ran),无线局域网(wirelesslocalareanetworks,wlan)等。在本申请实施例中,通信接口可以用于接收其他节点发送的报文,也可以向其他节点发送报文。在一些可能的实施例中,上述代理节点可以实现为网络设备,该网络设备中的网络处理器可以执行上述方法实施例的各个步骤。例如,该网络设备可以是路由器、交换机或防火墙等。参见图56,图56示出了本申请一个示例性实施例提供的网络设备的结构示意图,该网络设备可以配置为第一代理节点或第二代理节点。网络设备5600包括:主控板5610、接口板5630、交换网板5620和接口板5640。主控板5610用于完成系统管理、设备维护、协议处理等功能。交换网板5620用于完成各接口板(接口板也称为线卡或业务板)之间的数据交换。接口板5630和5640用于提供各种业务接口(例如,以太网接口、pos接口等),并实现数据包的转发。主控板5610、接口板5630和5640,以及交换网板5620之间通过系统总线与系统背板相连实现互通。接口板5630上的中央处理器5631用于对接口板进行控制管理并与主控板5610上的中央处理器5611进行通信。如果网络设备5600被配置为第一代理节点,物理接口卡5633接收第一报文,发送给网络处理器5632,网络处理器5632查询转发表项存储器534,未得到第一报文对应的分段路由头srh,则根据第一报文和对应于第二代理节点的第一绕行sid,生成第二报文,根据出接口等信息,在完成链路层封装后,将第二报文从物理接口卡5633发送出去,使得第二报文传输至第二代理节点。在一个实施例中,第二报文包括ip头,ip头的目的地址为第一绕行sid。在一个实施例中,第二报文包括ip头和第二报文的srh,ip头的目的地址为一个或多个目标sid中对应于下一个分段路由sr节点的sid,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径,srh包括第一绕行sid和一个或多个目标sid。在一个实施例中,网络处理器5632可以生成第二报文的ip头;向第一报文封装第二报文的ip头。在一个实施例中,第二报文还包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。在一个实施例中,第二控制信息携带在第二报文的srh的tlv中;或,第二控制信息携带在第二报文的ip头中。在一个实施例中,第一控制信息携带在第二报文的扩展头中;或者,第一控制信息携带在第一绕行sid中;或者,第一控制信息携带在第二报文的ip头中;或者,第一控制信息携带在第二报文的srh中的tlv中。在一个实施例中,第一报文由来自第二代理节点的报文经过业务功能处理后得到,第一报文包括第二缓存表项的标识,第二缓存表项为第二代理节点存储第一报文对应的srh的缓存表项;第二报文还包括第二缓存表项的标识,第一控制信息还用于指示第二代理节点以第二缓存表项的标识为索引查询第一报文对应的srh。在一个实施例中,第一报文由来自第一代理节点的报文经过业务功能处理后得到,第一报文包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项;第二报文包括第一缓存表项的标识,第一控制信息还用于指示第二代理节点以第一缓存表项的标识相映射的第二缓存表项的标识为索引,查询第一报文对应的srh。在一个实施例中,第一代理节点通过第一链路与第二代理节点相连,网络处理器5632选择物理接口卡5633中对应于第一链路的第一出接口,将第二报文从物理接口卡5633的第一出接口发送出去。在一个实施例中,第一代理节点通过第二链路与路由节点相连,路由节点通过第三链路与第二代理节点相连,网络处理器5632选择物理接口卡5633中通过对应于第二链路的第二出接口,将第二报文从物理接口卡5633的第二出接口发送出去,第二报文由路由节点通过第三链路转发至第二代理节点。在一个实施例中,网络处理器5632对第一链路的状态进行检测;如果第一链路处于可用状态,网络处理器5632选择物理接口卡5633中通过对应于第一链路的第一出接口,将第三报文从物理接口卡5633的第一出接口发送出去;或者,如果第一链路处于不可用状态,网络处理器5632择物理接口卡5633中通过对应于第二链路的第二出接口,将第三报文从物理接口卡5633的第二出接口发送出去。如果网络设备5600被配置为第二代理节点,物理接口卡5633接收第二报文,发送给网络处理器5632,网络处理器5632确定第一控制信息指示第二代理节点恢复第一报文对应的srh;根据第二报文,查询第二代理节点的缓存,得到第一报文对应的srh;根据第二报文和第一报文对应的srh,生成第三报文,第三报文包括第一报文对应的srh和第一报文的载荷。根据出接口等信息,在完成链路层封装后,将第三报文从物理接口卡5633发送出去,使得第三报文传输至第一代理节点。在一个实施例中,第二报文包括互联网协议ip头,ip头的目的地址为第一绕行sid。在一个实施例中,第二报文包括ip头和第二报文的srh,ip头的目的地址为一个或多个目标sid中对应于下一个分段路由sr节点的sid,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径,srh包括第一绕行sid和一个或多个目标sid。在一个实施例中,网络处理器5632从第二报文剥离第二报文的ip头;封装第一报文对应的srh,得到第三报文。在一个实施例中,网络处理器5632将第二报文的ip头更新为第一报文的ip头;封装第一报文对应的srh,得到第三报文。在一个实施例中,第二报文还包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。在一个实施例中,第二控制信息携带在第二报文的srh的类型长度值tlv中;或,第二控制信息携带在第二报文的ip头中。在一个实施例中,第一控制信息携带在第二报文的扩展头中;或者,第一控制信息携带在第一绕行sid中;或者,第一控制信息携带在第二报文的互联网协议ip头中;或者,第一控制信息携带在第二报文的srh中的tlv中。在一个实施例中,网络处理器5632确定第一控制信息还指示以第二缓存表项的标识为索引查询第一报文对应的srh;以第二缓存表项的标识为索引,查询转发表项存储器5634中的第二缓存表项,从第二缓存表项得到第一报文对应的srh。在一个实施例中,第二报文还包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项,网络处理器5632确定第一控制信息还指示以第一缓存表项的标识相映射的第二缓存表项的标识为索引查询第一报文对应的srh,网络处理器5632根据第一缓存表项的标识,查询转发表项存储器5634存储的第一缓存表项的标识与第二缓存表项的标识之间的映射关系,得到第二缓存表项的标识,以第二缓存表项的标识为索引,查询转发表项存储器5634,从转发表项存储器5634存储的第二缓存表项得到第一报文对应的srh。在一个实施例中,网络处理器5632确定业务功能节点的业务功能包括对流标识进行修改。在一个实施例中,第二报文对应的流标识为第一报文对应的流标识,网络处理器5632以第一报文对应的流标识和端点动态代理sid为索引,查询转发表项存储器534,得到转发表项存储器534存储的第一报文对应的srh。在一个实施例中,第二报文包括sf节点所属的vpn的vpn标识,网络处理器5632根据vpn标识,查询转发表项存储器534存储的端点动态代理sid与vpn标识之间的映射关系,得到vpn标识对应的端点动态代理sid。在一个实施例中,主控板5610上的中央处理器5611可以接收配置指令,根据配置指令,将端点动态代理sid与vpn标识之间的映射关系存储至转发表项存储器5634。在一个实施例中,物理接口卡5633接收第四报文,发送给网络处理器5632,网络处理器5632以第一报文对应的流标识和端点动态代理sid为索引,在转发表项存储器5634中的第二缓存表项中存储第一报文对应的srh。在一个实施例中,物理接口卡5633通过对应于第一链路的第一入接口,接收第二报文;或者,物理接口卡5633通过对应于第三链路的第二入接口,接收第二报文。应理解,本发明实施例中接口板5640上的操作与接口板5630的操作一致,为了简洁,不再赘述。应理解,本实施例的网络设备5600可对应于上述各个方法实施例中的第一代理节点或第二代理节点,该网络设备5600中的主控板5610、接口板5630和/或5640可以实现上述各个方法实施例中的第一代理节点或第二代理节点所具有的功能和/或所实施的各种步骤,为了简洁,在此不再赘述。值得说明的是,主控板可能有一块或多块,有多块的时候可以包括主用主控板和备用主控板。接口板可能有一块或多块,网络设备的数据处理能力越强,提供的接口板越多。接口板上的物理接口卡也可以有一块或多块。交换网板可能没有,也可能有一块或多块,有多块的时候可以共同实现负荷分担冗余备份。在集中式转发架构下,网络设备可以不需要交换网板,接口板承担整个系统的业务数据的处理功能。在分布式转发架构下,网络设备可以有至少一块交换网板,通过交换网板实现多块接口板之间的数据交换,提供大容量的数据交换和处理能力。所以,分布式架构的网络设备的数据接入和处理能力要大于集中式架构的设备。可选地,网络设备的形态也可以是只有一块板卡,即没有交换网板,接口板和主控板的功能集成在该一块板卡上,此时接口板上的中央处理器和主控板上的中央处理器在该一块板卡上可以合并为一个中央处理器,执行两者叠加后的功能,这种形态设备的数据交换和处理能力较低(例如,低端交换机或路由器等网络设备)。具体采用哪种架构,取决于具体的组网部署场景,此处不做任何限定。在一些可能的实施例中,上述代理节点可以实现为计算设备,该计算设备中的中央处理器可以执行上述方法实施例的各个步骤。例如,该计算设备可以是主机、服务器或个人计算机等。该计算设备可以由一般性的总线体系结构来实现。参见图57,图57示出了本申请一个示例性实施例提供的计算设备的结构示意图,该计算设备可以配置为第一代理节点或第二代理节点。计算设备5700包括:处理器5710、收发器5720、随机存取存储器5740、只读存储器5750以及总线5760。其中,处理器5710通过总线5760分别耦接收发器5720、随机存取存储器5740以及只读存储器5750。其中,当需要运行计算设备5700时,通过固化在只读存储器5750中的基本输入输出系统或者嵌入式系统中的bootloader引导系统进行启动,引导计算设备5700进入正常运行状态。如果计算设备5700被配置为第一代理节点,收发器5720接收第一报文,发送给处理器5710,处理器5710查询随机存取存储器5740,未得到第一报文对应的分段路由头srh,则根据第一报文和对应于第二代理节点的第一绕行sid,生成第二报文,根据出接口等信息,在完成链路层封装后,将第二报文从收发器5720发送出去,使得第二报文传输至第二代理节点。在一个实施例中,第二报文包括ip头,ip头的目的地址为第一绕行sid。在一个实施例中,第二报文包括ip头和第二报文的srh,ip头的目的地址为一个或多个目标sid中对应于下一个分段路由sr节点的sid,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径,srh包括第一绕行sid和一个或多个目标sid。在一个实施例中,处理器5710可以生成第二报文的ip头;向第一报文封装第二报文的ip头。在一个实施例中,第二报文还包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。在一个实施例中,第二控制信息携带在第二报文的srh的tlv中;或,第二控制信息携带在第二报文的ip头中。在一个实施例中,第一控制信息携带在第二报文的扩展头中;或者,第一控制信息携带在第一绕行sid中;或者,第一控制信息携带在第二报文的ip头中;或者,第一控制信息携带在第二报文的srh中的tlv中。在一个实施例中,第一报文由来自第二代理节点的报文经过业务功能处理后得到,第一报文包括第二缓存表项的标识,第二缓存表项为第二代理节点存储第一报文对应的srh的缓存表项;第二报文还包括第二缓存表项的标识,第一控制信息还用于指示第二代理节点以第二缓存表项的标识为索引查询第一报文对应的srh。在一个实施例中,第一报文由来自第一代理节点的报文经过业务功能处理后得到,第一报文包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项;第二报文包括第一缓存表项的标识,第一控制信息还用于指示第二代理节点以第一缓存表项的标识相映射的第二缓存表项的标识为索引,查询第一报文对应的srh。第二报文包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项,第一控制信息还用于指示第二代理节点以第一缓存表项的标识相映射的第二缓存表项的标识为索引,查询第一报文对应的srh。在一个实施例中,第一代理节点通过第一链路与第二代理节点相连,处理器5710选择收发器5720中对应于第一链路的第一出接口,将第二报文从收发器5720的第一出接口发送出去。在一个实施例中,第一代理节点通过第二链路与路由节点相连,路由节点通过第三链路与第二代理节点相连,处理器5710选择收发器5720中通过对应于第二链路的第二出接口,将第二报文从收发器5720的第二出接口发送出去,第二报文由路由节点通过第三链路转发至第二代理节点。在一个实施例中,处理器5710对第一链路的状态进行检测;如果第一链路处于可用状态,处理器5710选择收发器5720中通过对应于第一链路的第一出接口,将第三报文从收发器5720的第一出接口发送出去;或者,如果第一链路处于不可用状态,处理器5710择收发器5720中通过对应于第二链路的第二出接口,将第三报文从收发器5720的第二出接口发送出去。如果计算设备5700被配置为第二代理节点,收发器5720接收第二报文,发送给处理器5710,处理器5710确定第一控制信息指示第二代理节点恢复第一报文对应的srh;根据第二报文,查询第二代理节点的缓存,得到第一报文对应的srh;根据第二报文和第一报文对应的srh,生成第三报文,第三报文包括第一报文对应的srh和第一报文的载荷。根据出接口等信息,在完成链路层封装后,将第三报文从收发器5720发送出去,使得第三报文传输至第一代理节点在一个实施例中,第二报文包括互联网协议ip头,ip头的目的地址为第一绕行sid。在一个实施例中,第二报文包括ip头和第二报文的srh,ip头的目的地址为一个或多个目标sid中对应于下一个分段路由sr节点的sid,一个或多个目标sid用于指示目标转发路径,目标转发路径为第一代理节点至第二代理节点之间的路径,srh包括第一绕行sid和一个或多个目标sid。在一个实施例中,处理器5710从第二报文剥离第二报文的ip头;封装第一报文对应的srh,得到第三报文。在一个实施例中,处理器5710将第二报文的ip头更新为第一报文的ip头;封装第一报文对应的srh,得到第三报文。在一个实施例中,第二报文还包括第二控制信息,第二控制信息用于指示第一代理节点与第二代理节点之间的中间节点对第二报文的合法性进行校验。在一个实施例中,第二控制信息携带在第二报文的srh的类型长度值tlv中;或,第二控制信息携带在第二报文的ip头中。在一个实施例中,第一控制信息携带在第二报文的扩展头中;或者,第一控制信息携带在第一绕行sid中;或者,第一控制信息携带在第二报文的互联网协议ip头中;或者,第一控制信息携带在第二报文的srh中的tlv中。在一个实施例中,处理器5710确定第一控制信息还指示以第二缓存表项的标识为索引查询第一报文对应的srh;以第二缓存表项的标识为索引,查询转发表项存储器5634中的第二缓存表项,从第二缓存表项得到第一报文对应的srh。在一个实施例中,第二报文还包括第一缓存表项的标识,第一缓存表项为第一代理节点历史存储第一报文对应的srh的缓存表项,处理器5710确定第一控制信息还指示以第一缓存表项的标识相映射的第二缓存表项的标识为索引查询第一报文对应的srh,处理器5710根据第一缓存表项的标识,查询随机存取存储器5740存储的第一缓存表项的标识与第二缓存表项的标识之间的映射关系,得到第二缓存表项的标识,以第二缓存表项的标识为索引,查询随机存取存储器5740,从随机存取存储器5740存储的第二缓存表项得到第一报文对应的srh。在一个实施例中,处理器5710确定业务功能节点的业务功能包括对流标识进行修改。在一个实施例中,第二报文对应的流标识为第一报文对应的流标识,处理器5710以第一报文对应的流标识和端点动态代理sid为索引,查询随机存取存储器5740,得到随机存取存储器5740存储的第一报文对应的srh。在一个实施例中,第二报文包括sf节点所属的vpn的vpn标识,处理器5710根据vpn标识,查询随机存取存储器5740存储的端点动态代理sid与vpn标识之间的映射关系,得到vpn标识对应的端点动态代理sid。在一个实施例中,处理器5710可以接收配置指令,根据配置指令,将端点动态代理sid与vpn标识之间的映射关系存储至随机存取存储器5740。在一个实施例中,收发器5720接收第四报文,发送给处理器5710,处理器5710以第一报文对应的流标识和端点动态代理sid为索引,在随机存取存储器5740中的第二缓存表项中存储第一报文对应的srh。在一个实施例中,收发器5720通过对应于第一链路的第一入接口,接收第二报文;或者,收发器5720通过对应于第三链路的第二入接口,接收第二报文。本申请实施例的计算设备可对应于上述各个方法实施例中的第一代理节点或第二代理节点,并且,该计算设备中的处理器5710、收发器5720等可以实现上述各个方法实施例中的第一代理节点或第二代理节点所具有的功能和/或所实施的各种步骤和方法。为了简洁,在此不再赘述。在一些可能的实施例中,上述代理节点可以实现为虚拟化设备。例如,虚拟化设备可以是运行有用于发送报文功能的程序的虚拟机(英文:virtualmachine,vm),虚拟机部署在硬件设备上(例如,物理服务器)。虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。可以将虚拟机配置为第一代理节点或第二代理节点。例如,可以基于通用的物理服务器结合nfv技术来实现第一代理节点或第二代理节点。第一代理节点或第二代理节点为虚拟主机、虚拟路由器或虚拟交换机。本领域技术人员通过阅读本申请即可结合nfv技术在通用物理服务器上虚拟出具有上述功能的第一代理节点或第二代理节点。此处不再赘述。例如,虚拟化设备可以是容器,容器是一种用于提供隔离的虚拟化环境的实体,例如,容器可以是docker容器。可以将容器配置为第一代理节点或第二代理节点。例如,可以通过对应的镜像来创建出代理节点,例如可以通过proxy-container(提供代理服务的容器)的镜像,为proxy-container创建2个容器实例,分别是容器实例proxy-container1、容器实例proxy-container2,将容器实例proxy-container1提供为第一代理节点,将容器实例proxy-container2提供为第二代理节点。采用容器技术实现时,代理节点可以利用物理机的内核运行,多个代理节点可以共享物理机的操作系统。通过容器技术可以将不同的代理节点隔离开来。容器化的代理节点可以在虚拟化的环境中运行,例如可以在虚拟机中运行,容器化的代理节点可也可以直接在物理机中运行。例如,虚拟化设备可以是pod,pod是kubernetes(kubernetes是谷歌开源的一种容器编排引擎,英文简称为k8s)为部署、管理、编排容器化应用的基本单位。pod可以包括一个或多个容器。同一个pod中的每个容器通常部署在同一主机上,因此同一个pod中的每个容器可以通过该主机进行通信,并且可以共享该主机的存储资源和网络资源。可以将pod配置为第一代理节点或第二代理节点。例如,具体地,可以指令容器即服务(英文全称:containerasaservice,英文简称:caas,是一种基于容器的paas服务)来创建pod,将pod提供为第一代理节点或第二代理节点。当然,代理节点还可以是其他虚拟化设备,在此不做一一列举。在一些可能的实施例中,上述代理节点也可以由通用处理器来实现。例如,该通用处理器的形态可以是一种芯片。具体地,实现第一代理节点或者第二代理节点的通用处理器包括处理电路和与该处理电路内部连接通信的输入接口以及输出接口,该处理电路用于通过输入接口执行上述各个方法实施例中的报文的生成步骤,该处理电路用于通过输入接口执行上述各个方法实施例中的接收步骤,该处理电路用于通过输出接口执行上述各个方法实施例中的发送步骤。可选地,该通用处理器还可以包括存储介质,该处理电路用于通过该存储介质执行上述各个方法实施例中的存储步骤。作为一种可能的产品形态,本申请实施例中的第一代理节点或者第二代理节点,还可以使用下述来实现:一个或多个现场可编程门阵列(英文全称:field-programmablegatearray,英文简称:fpga)、可编程逻辑器件(英文全称:programmablelogicdevice,英文简称:pld)、控制器、状态机、门逻辑、分立硬件部件、任何其它适合的电路、或者能够执行本申请通篇所描述的各种功能的电路的任意组合。在一些可能的实施例中,上述代理节点还可以使用计算机程序产品实现。具体地,本申请实施例提供了一种计算机程序产品,当该计算机程序产品在第一代理节点上运行时,使得第一代理节点执行上述方法实施例中的报文传输方法。本申请实施例还提供了一种计算机程序产品,当该计算机程序产品在第二代理节点上运行时,使得第二代理节点执行上述方法实施例中的报文传输方法。应理解,上述各种产品形态的第一代理节点或者第二代理节点,分别具有上述方法实施例中第一代理节点或者第二代理节点的任意功能,此处不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和单元,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参见前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。该作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例中方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上该,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机程序指令。在计算机上加载和执行该计算机程序指令时,全部或部分地产生按照本申请实施例该的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如,数字视频光盘(digitalvideodisc,dvd)、或者半导体介质(例如固态硬盘)等。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1