LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1171|回复: 9

在内网发出去外网的数据包的端口是怎样决定的呢?

[复制链接]
发表于 2006-1-10 13:23:26 | 显示全部楼层 |阅读模式
例如内网是192.168.0.2 路由内IP192.168.0.1
路由对外IP222.222.222.222,那么,我在192.168.0.2这台机上打开网页时,应该是通过80端口的吧,但是数据包通过222.222.222.222出去后,这个数据包端口会不会改变的呢?
发表于 2006-1-10 17:28:13 | 显示全部楼层
iptables回自己处理的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-10 17:42:12 | 显示全部楼层
Post by dancingpig
iptables回自己处理的

因为我现在在内网(城域网),这个内网是一个分得极其复杂的~~~要通过几次route才能出去外面,所以我想知道数据包经过这些route之后,最后出去的数据包的端口怎样修改了?有什么命令可以跟踪数据包的端口的(象traceroute之类的)
回复 支持 反对

使用道具 举报

发表于 2006-1-11 00:47:02 | 显示全部楼层
路由器不管你的端口号的,也不会对这些进行处理。
traceroute也不是对端口号处理的。路由器与traceroute都只关注IP。
端口是用来区分进程或不同的服务,IP地址用来区分主机。你指定连到服务器的80端口号,在服务器就只有使用80端口的进程接收处理数据,与中间网络传输过程无关(如果你使用NAT  或代理服务器上网除外)

楼主所说的打开一个网页,不是用80端口的。

HTTP80 FTP21 TELNET23等都只是对服务器而言,一般把这些端口当作默认的服务器服务端口,既然是默认的,服务器就不一定只能是这些端口,也可以用其他的,如你可以配你的服务器HTTP为21,FTP为80,但是如果不用默认的端口号时,会带来一些另外的麻烦。比如linuxsir将http改为23端口的服务,你上这个时候你上linuxsir的时就必须这样输入网址了www.linuxsir.cn:23
不然浏览器只会默认连到80端口去。

作为客户端,连接到一个服务器是任意指定端口的,这个可以由TCP/IP软件分配。如你连到linuxsir,一般用很大端口号,如60000。在linux下,1024下的端口号只能由root分配使用
回复 支持 反对

使用道具 举报

发表于 2006-1-11 01:07:57 | 显示全部楼层
Post by gklive
因为我现在在内网(城域网),这个内网是一个分得极其复杂的~~~要通过几次route才能出去外面,所以我想知道数据包经过这些route之后,最后出去的数据包的端口怎样修改了?有什么命令可以跟踪数据包的端口的(象traceroute之类的)


追踪端口号是没有必要的事,因为都是确定的。

楼主的意思可能是想知道NAT转换的过程。
NAT, network address translation,网络地址转换,一个很主要的目的是用来解决IPv4地址缺乏。

10.0.0.0-10.255.255.255    172.16.0.0-172.16.255.255   192.168.0.0-192.168.255.255  这一类叫私有地址,只能用在局域网中,如果在公网上,路由器是不会对这一类地址进行路由,源IP地址为这一类地址的数据包传到公网上只会被丢弃的。所以使用这一类的址址要想进入公网,必须在出局域网时对源地址进行转换。提供这种地址转换服务的主机就是NAT服务器。

NAT服务器一般有两个以上的地址,一个是局域网内的地址,一个公网上的地址; 如内网地址为192.168.1.1 外网地址为1.1.1.1的NAT 服务器。192.168.1.2的主机想连上1.1.1.2的主机80端口时,首先192.168.1.2发送一个数据包(目的IP地址为1.1.1.2,端口号为80;源IP地址为192.168.1.2,端口号假设为20000)到192.168.1.1,也就是NAT服务器,NAT 检查目的IP地址的端口号,然后把这个数据包的源IP地址改为1.1.1.1,源端口号改为一个可用的端口号如20001;  从1.1.1.1发送这个数据包到1.1.1.2的80端口, 1.1.1.2对此数据作出响应后,发回复数据包到1.1.1.1:20001, 也就是NAT 服务器, NAT服务器根据转发192.168.1.2数据包时建立的IP地址与端口转换关系,本例中为: 192.168.1.2:20000->1.1.1.1:20001把1.1.1.2发回来的数据转发给192.1.1.2:20000
数据交换过程就是这样完成了。因为每台主机实际连接到公网的端口号不多,所以NAT 服务器的65536个端口号可以分配给很多主机使用,从而节省公有IP的使用。这样了带来一个问题,如192.1.1.2这台主机只能先去连接别人,才能与人正常的通信,如果作为服务器运行时,如HTTP服务器,无法为公网上其他主机提供服务,因为其他主机无法知道NAT服务器是如何对地址端口号进行转换,从而不知如何连接这台主机。

如果你要查找这种转换关系,有两个方法:
1、你是NAT服务器的管理员
2、在公网上找一个服务器,连接到这个服务器,这样公网上服务器就知道NAT服务器在内网与外网两端是如何对这个数据包进行转换的。这个服务器返回有关信息即可。

两方都是局域网内两台主机,都通过NAT上网,是不能互相连接的,现在有些软件可以做到这样是因为有第三方(公网上的主机)的支持。
回复 支持 反对

使用道具 举报

发表于 2006-1-11 03:00:16 | 显示全部楼层
说的好,很清晰,也很详细。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-11 18:17:25 | 显示全部楼层
谢谢is02bing
我还想问下
因为我们内网是不可以相互直接访问的,但是如果通过外网的服务器连接起来,例如用QQ,我们在用QQ在传东西的时候速度6M/S(我们两个都在同一个内网),所以我想,我们这个时候应该是QQ服务器把我们直接连接起来
我的想法是,如果我在写一个服务器的程序在外网运行,写个客户端在网内,用udp,一起连上外网的服务器,这个时候服务器可不可把这个两数据包直接连接(我不知道怎样表达),
就是说,两个内网的借助外网的服务器,在我们两个第一次连接之后就把我们对外的IP:port告诉给对话,然后通过我们通过服务器给出来的ip:port直接连接起来,之后我们交换数据就不再通过外网的服务器.
我讲得乱,不知大家有没有明白我的意思呢??
回复 支持 反对

使用道具 举报

发表于 2006-1-11 21:07:09 | 显示全部楼层
明白拉,完全可以实现
回复 支持 反对

使用道具 举报

发表于 2006-1-12 04:19:00 | 显示全部楼层
Post by gklive
谢谢is02bing
我还想问下
因为我们内网是不可以相互直接访问的,但是如果通过外网的服务器连接起来,例如用QQ,我们在用QQ在传东西的时候速度6M/S(我们两个都在同一个内网),所以我想,我们这个时候应该是QQ服务器把我们直接连接起来
我的想法是,如果我在写一个服务器的程序在外网运行,写个客户端在网内,用udp,一起连上外网的服务器,这个时候服务器可不可把这个两数据包直接连接(我不知道怎样表达),
就是说,两个内网的借助外网的服务器,在我们两个第一次连接之后就把我们对外的IP:port告诉给对话,然后通过我们通过服务器给出来的ip:port直接连接起来,之后我们交换数据就不再通过外网的服务器.
我讲得乱,不知大家有没有明白我的意思呢??


传输似乎不经过QQ服务器的。所以就是你们自己连接,当然快了。

第二个问题,我觉得是可以的,如果你知道对方IP的话,直接连接也可以,不过问题就是接受方要能接受到对方发送的包。

回答得有点怪怪的感觉,还是等 is02bing 来说吧。
回复 支持 反对

使用道具 举报

发表于 2006-1-12 13:28:42 | 显示全部楼层
我也遇到这样的问题

我试过直接到内网的IP跟我的朋友直接连接,(试过用ftp, samba之些啦),都不能访问~~应该是route里掉了目的地址是内网IP的数据包(这个是我自己猜想的),所以只可以通过外网的服务器给我们连接起来
因为我们在同一个内网,所以对外的IP都是一样的,只有用不同的port来区分,但是我想问下,这个port是在一段时间内对应内网的某一台主机还是只是对应当前的请求连接呢??如果是对应主机就可以用gklive之前的想法(自己实现服务器端程序和客户端程序),但是如果是对应当前的一个请求连接的话,一但当前请求完成,这个port就不再对应之前的内网主机啦,这时,gklive之前猜想的程序就不能这么容易就实现了吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表