[GH-ISSUE #3941] [Feature Request] 打洞代码参数使用疑惑 #3129

Closed
opened 2026-05-05 14:01:28 -06:00 by gitea-mirror · 2 comments
Owner

Originally created by @liangdd2 on GitHub (Jan 18, 2024).
Original GitHub issue: https://github.com/fatedier/frp/issues/3941

Describe the feature request

看frp的源码遇到的问题。能够理解nathole.go的注释。frp打洞分为5种模式。关于analysis.go定义的这些打洞参数,有文档可以学习参考吗。或者关键字称为什么,好去搜索。例如第0种模式mode0Behaviors——receiver ttl是7但为什么也有ttl是4的,有什么区别呢,什么时候用。sender延迟发送我能理解,ttl也可,只要路由器打洞就可以了,不需要包到达对方。想知道这些参数的使用场景有何不同
`// mode 0, both EasyNAT, PublicNetwork is always receiver
// sender | receiver, ttl 7
// receiver, ttl 7 | sender
// sender | receiver, ttl 4
// receiver, ttl 4 | sender
// sender | receiver
// receiver | sender
// sender, sendDelayMs 5000 | receiver
// sender, sendDelayMs 10000 | receiver
// receiver | sender, sendDelayMs 5000
// receiver | sender, sendDelayMs 10000
mode0Behaviors = []lo.Tuple2[RecommandBehavior, RecommandBehavior]{
lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 7}),
lo.T2(RecommandBehavior{Role: DetectRoleReceiver, TTL: 7}, RecommandBehavior{Role: DetectRoleSender}),
lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 4}),
lo.T2(RecommandBehavior{Role: DetectRoleReceiver, TTL: 4}, RecommandBehavior{Role: DetectRoleSender}),
lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver}),
lo.T2(RecommandBehavior{Role: DetectRoleReceiver}, RecommandBehavior{Role: DetectRoleSender}),
lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 5000}, RecommandBehavior{Role: DetectRoleReceiver}),
lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 10000}, RecommandBehavior{Role: DetectRoleReceiver}),
lo.T2(RecommandBehavior{Role: DetectRoleReceiver}, RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 5000}),
lo.T2(RecommandBehavior{Role: DetectRoleReceiver}, RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 10000}),
}

// mode 1, HardNAT is sender, EasyNAT is receiver, port changes is regular
// sender | receiver, ttl 7, portsRangeNumber max 10
// sender, sendDelayMs 2000 | receiver, ttl 7, portsRangeNumber max 10
// sender | receiver, ttl 4, portsRangeNumber max 10
// sender, sendDelayMs 2000 | receiver, ttl 4, portsRangeNumber max 10
// sender | receiver, portsRangeNumber max 10
// sender, sendDelayMs 2000 | receiver, portsRangeNumber max 10
mode1Behaviors = []lo.Tuple2[RecommandBehavior, RecommandBehavior]{
	lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 7, PortsRangeNumber: 10}),
	lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 2000}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 7, PortsRangeNumber: 10}),
	lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 4, PortsRangeNumber: 10}),
	lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 2000}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 4, PortsRangeNumber: 10}),
	lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, PortsRangeNumber: 10}),
	lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 2000}, RecommandBehavior{Role: DetectRoleReceiver, PortsRangeNumber: 10}),
}`

Describe alternatives you've considered

No response

Affected area

  • Docs
  • Installation
  • Performance and Scalability
  • Security
  • User Experience
  • Test and Release
  • Developer Infrastructure
  • Client Plugin
  • Server Plugin
  • Extensions
  • Others
Originally created by @liangdd2 on GitHub (Jan 18, 2024). Original GitHub issue: https://github.com/fatedier/frp/issues/3941 ### Describe the feature request 看frp的源码遇到的问题。能够理解nathole.go的注释。frp打洞分为5种模式。关于analysis.go定义的这些打洞参数,有文档可以学习参考吗。或者关键字称为什么,好去搜索。例如第0种模式mode0Behaviors——receiver ttl是7但为什么也有ttl是4的,有什么区别呢,什么时候用。sender延迟发送我能理解,ttl也可,只要路由器打洞就可以了,不需要包到达对方。想知道这些参数的使用场景有何不同 `// mode 0, both EasyNAT, PublicNetwork is always receiver // sender | receiver, ttl 7 // receiver, ttl 7 | sender // sender | receiver, ttl 4 // receiver, ttl 4 | sender // sender | receiver // receiver | sender // sender, sendDelayMs 5000 | receiver // sender, sendDelayMs 10000 | receiver // receiver | sender, sendDelayMs 5000 // receiver | sender, sendDelayMs 10000 mode0Behaviors = []lo.Tuple2[RecommandBehavior, RecommandBehavior]{ lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 7}), lo.T2(RecommandBehavior{Role: DetectRoleReceiver, TTL: 7}, RecommandBehavior{Role: DetectRoleSender}), lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 4}), lo.T2(RecommandBehavior{Role: DetectRoleReceiver, TTL: 4}, RecommandBehavior{Role: DetectRoleSender}), lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver}), lo.T2(RecommandBehavior{Role: DetectRoleReceiver}, RecommandBehavior{Role: DetectRoleSender}), lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 5000}, RecommandBehavior{Role: DetectRoleReceiver}), lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 10000}, RecommandBehavior{Role: DetectRoleReceiver}), lo.T2(RecommandBehavior{Role: DetectRoleReceiver}, RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 5000}), lo.T2(RecommandBehavior{Role: DetectRoleReceiver}, RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 10000}), } // mode 1, HardNAT is sender, EasyNAT is receiver, port changes is regular // sender | receiver, ttl 7, portsRangeNumber max 10 // sender, sendDelayMs 2000 | receiver, ttl 7, portsRangeNumber max 10 // sender | receiver, ttl 4, portsRangeNumber max 10 // sender, sendDelayMs 2000 | receiver, ttl 4, portsRangeNumber max 10 // sender | receiver, portsRangeNumber max 10 // sender, sendDelayMs 2000 | receiver, portsRangeNumber max 10 mode1Behaviors = []lo.Tuple2[RecommandBehavior, RecommandBehavior]{ lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 7, PortsRangeNumber: 10}), lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 2000}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 7, PortsRangeNumber: 10}), lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 4, PortsRangeNumber: 10}), lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 2000}, RecommandBehavior{Role: DetectRoleReceiver, TTL: 4, PortsRangeNumber: 10}), lo.T2(RecommandBehavior{Role: DetectRoleSender}, RecommandBehavior{Role: DetectRoleReceiver, PortsRangeNumber: 10}), lo.T2(RecommandBehavior{Role: DetectRoleSender, SendDelayMs: 2000}, RecommandBehavior{Role: DetectRoleReceiver, PortsRangeNumber: 10}), }` ### Describe alternatives you've considered _No response_ ### Affected area - [ ] Docs - [ ] Installation - [ ] Performance and Scalability - [ ] Security - [ ] User Experience - [ ] Test and Release - [ ] Developer Infrastructure - [ ] Client Plugin - [ ] Server Plugin - [ ] Extensions - [X] Others
gitea-mirror 2026-05-05 14:01:28 -06:00
Author
Owner

@fatedier commented on GitHub (Jan 18, 2024):

不如还是自行检索学习相关的底层知识以及做测试研究吧。

这里不负责科普和教学,如果以后有时间,也许会写点在 blog 里。如果每个人都要问为什么代码这么写,为什么这么设计,真没有这么多精力。

更倾向于,自己研究和学习,发现 bug 或者有改进的点,直接提出解决或优化方案。

<!-- gh-comment-id:1898114467 --> @fatedier commented on GitHub (Jan 18, 2024): 不如还是自行检索学习相关的底层知识以及做测试研究吧。 这里不负责科普和教学,如果以后有时间,也许会写点在 blog 里。如果每个人都要问为什么代码这么写,为什么这么设计,真没有这么多精力。 更倾向于,自己研究和学习,发现 bug 或者有改进的点,直接提出解决或优化方案。
Author
Owner

@github-actions[bot] commented on GitHub (Feb 9, 2024):

Issues go stale after 21d of inactivity. Stale issues rot after an additional 7d of inactivity and eventually close.

<!-- gh-comment-id:1935146292 --> @github-actions[bot] commented on GitHub (Feb 9, 2024): Issues go stale after 21d of inactivity. Stale issues rot after an additional 7d of inactivity and eventually close.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#3129
No description provided.