PC经路由器访问服务器间数据包转发详细过程

PC经路由器访问服务器间数据包转发详细过程,第1张

首先我说明一点 DNS 是使用的TCP 或者UDP 的 53 端口。 大部分都是使用UDP传输的所以你看不到三次握手时正常的。
再就是如果你的PC没有网关的MAC地址缓存。因为要发送DNS请求。所以要查看路由表看网关是谁,然后发送请求网关的MAC地址,然后一个DNS请求数据包被封装上网关的MAC发出去。
到了路由器上做NAT出去。你哪再不是很清楚再单独问吧,要细细的写,累点,你要总结的话网上应该不少。。你可以看看。搜搜DNS工作过程啥的。
QQ:290304230

1、在Java项目中发布一个WebService服务,与Web服务相关的类,都位于Javaxjws包中。
@WebService 此注解用在类上指定将此类发布成一个WebService;
EndPoint 此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布。
2、发布WebService服务,HelloWebServicejava文件代码如下:
<span style="font-family:KaiTi_GB2312;font-size:18px;">package cntgbws;
importjavaxjwsWebMethod;
importjavaxjwsWebService;
importjavaxxmlwsEndpoint;
/
@WebService - 它是一个注解,用在类上指定将此类发布成一个ws
Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
@author xuemin

/
@WebService
public classHelloWebService {
publicString HelloWord(String name){
return"Hello: "+name;
}
/
添加exclude=true后,HelloWord2()方法不会被发布
@param name
@return
/
@WebMethod(exclude=true)
publicString HelloWord2(String name){
return"Hello: "+name;
}
publicstatic void main(String[] args) {
/
参数1:服务的发布地址
参数2:服务的实现者
/
Endpointpublish("服务发布地址",new HelloWebService());
}
}
</span>
注:@WebService 它是一个注解,用在类上指定将此类发布成一个ws,Endpoint 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。运行以上程序即可进行WebService发布。

ip nat inside source static tcp 1921681114 7788 5857165144 7788
如果不是TCP的就把TCP换成UDP。然后:
interface 内网接口
ip nat inside
interface 外网接口
ip nat outside

1 如何把自己的电脑改成服务器在外网可以访问
通常情况下,路由器都有防火墙功能,互联网用户只能访问到你的路由器WAN口(接ADSL的电话线口或路由宽带外网口),而访问不到内部服务器。要想让互联网用户访问到你建的服务器,就要在路由器上做一个转发设置,也就是端口映射设置,让互联网用户发送的请求到达路由器后,再转发到你建立的服务器或WEB站点。这就是端口映射。由于各个路由器厂商所取功能名称不一样,有的叫虚拟服务器,有的叫NAT设置(Bitet中常见问题)端口映射。

过程

· 外网访问:xxxxxxxxxxx:8080

· 路由器解析映射到本地站点或者服务器:192168xxxx:8080
开始设置首先

进入你的路由器管理界面,找到虚拟服务器(Virtual Server)这一条款,一般会在应用管理或者转发规则条目下找到(根据不同厂商位置不定),如果实在找不到,可能是你的路由器不支持该功能(只要不是太老旧,都会有虚拟服务器这一功能的)

然后

启用服务(一般默认关闭),点击添加

参数填写:

· 外部端口(就是外网访问的端口):一般填 8080

· 内部端口(就是路由解析映射的端口):8080

· IP地址填路由器分给你的本机ip:例如我的是1921681100

· 协议类型:根据你的需求自行选择

注意:原则上外部端口和内部端口是可以随意填写的(有些端口系统占用无法使用),只要自己理清外网访问会映射到本地主机的那个端口就行了

就好比你明明外部端口设置为8080,内部端口为8080,但是本地(也就是内部)跑了一个3000端口的服务,然后你还傻乎乎的外网访问8080端口,得到的只能是xxxxxxxxxx拒绝了我们的连接请求

建议:内外端口一致免得记忆,如需多个端口,多添加几条映射关系
2 怎么设置我的电脑,让外网能访问我的网站
在使用wifi,交换机、防火墙之后,电脑无法与外网直接通信,必须要经过网关的过滤之后才能通信,在一些特殊情况下,一些电脑需要完全的不经过网关,直接与外网通信,这就需要设置DMZ(非军事作战区) 即可完成外网直接通信,方法如下(以腾达N300 v2 Wifi 为例)

1 设置静态分配ip 比如106,然后在下面找到目标电脑的Mac地址 比如 B8:97:5A:66:A1:B4

2 点击确认保存

3 在wifi的特殊行为项里面的DMZ主机中填入改成静态分配的地址点击启用点击确定即可完成DMZ。

写在最前面:由于现在游戏基本上采用全球大区的模式,全球玩家在同一个大区进行游戏,传统的单服模式已经不能够满足当前的服务需求,所以现在游戏服务器都在往微服务架构发展。当前我们游戏也是利用微服务架构来实现全球玩家同服游戏。
玩家每次断线(包括切换网络/超时断线)后应该会重新连接服务器,重连成功的话可以继续当前情景继续游戏,但是之前写的底层重连机制一直不能生效,导致每次玩家断线后重连都失败,要从账号登陆开始重新登陆,该文章写在已经定位了重连问题是由SLB引起后,提出的解决方案。

每次重连后,客户端向SLB发送建立连接,SLB都会重新分配一个网关节点,导致客户端连接到其他网关,重连失败。

会话保持的作用是什么?

开启SLB会话保持功能后,SLB会记录客户端的IP地址,在一定时间内,自动将同一个IP的连接转发到上次连接的网关。
在网络不稳定的情况下,游戏容易心跳或者发包超时,开启会话保持,能解决大部分情况下的重连问题。
但是在切换网络的时候,手机网络从Wifi切换成4G,自身IP会变,这时候连接必定和服务器断开,需要重新建立连接。由于IP已经变化,SLB不能识别到是同一个客户端发出的请求,会将连接转发到其他网关节点。所以使用TCP连接的情况下,SLB开启会话保持并不能解决所有的重连问题。
另外某些时刻,手机频繁开启和断开WI-FI,有时候可能不会断开网络,这并不是因为4G切换WI-FI时网络没断开,从4G切换到Wi-Fi网络,因为IP变了,服务器不能识别到新的IP,连接肯定是断开的。这时候网络没断开,主要是因为现在智能手机会对4G和Wi-Fi网络做个权重判断,当Wi-Fi网络频繁打开关闭时,手机会判断Wi-Fi网络不稳定,所有流量都走4G。所以网络没断开是因为一直使用4G连接,才没有断开。想要验证,只需要切换Wi-Fi时,把4G网络关闭,这样流量就必定走Wi-Fi。

上面说过,四层的TCP协议主要是基于IP来实现会话保持。但是切换网络的时候客户端的IP会变。所以要解决切换网络时的重连问题,只有两个方法:1 当客户端成功连接网关节点后,记录下网关节点的IP,下次重连后不经过SLB,直接向网关节点发送连接请求。2使用 SLB的七层(>

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/13074198.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-29
下一篇2025-08-29

发表评论

登录后才能评论

评论列表(0条)

    保存