Chinaunix

标题: TCP发送端口如何选择? [打印本页]

作者: lkjxing    时间: 2009-04-07 18:51
标题: TCP发送端口如何选择?
我写了一个程序,使用TCP传输文件,发送端选择了一个随机的端口(本机的端口)建立连接然后发送文件。\r\n我的问题是如果本机防火墙打开了,防火墙会不会阻挡这个连接出去?\r\n如果阻挡了,防火墙该如何设置?\r\n还有啊这个发送端口是否除了发送数据外还接收ACK,FIN等报文啊?如果本机防火墙没开这个端口,应答报文还能回来么?\r\n\r\n如果我固定一个发送端口(本机的端口)的话,该怎样设计才能并发发送文件?求提供个思路。\r\n\r\n另外当前的传输软件发送端口是随机的普遍还是固定的多啊?
作者: xinglp    时间: 2009-04-07 18:58
你想多了,直接试试看呢. \r\n防火墙对本地发起连接占用的端口限制不大,
作者: lkjxing    时间: 2009-04-07 19:02
标题: 回复 #2 xinglp 的帖子
恩,我试过了,随机是可以(只用了本机的防火墙,不是硬件防火墙)。但是被总工鄙视了,说应该固定的,否则不安全。。。。。
作者: llxxtnt    时间: 2009-04-07 19:57
如果你的发起端在防火墙内,不用担心防火墙,即使硬件防火墙也不用担心,防火墙没那么傻\r\n除非是接收端在防火墙内,才要关心防火墙问题\r\n\r\n另外,随机port哪里不安全了,现在大量使用的http client,ftp client,telnet client等等,都是随机port,怎么就不安全了?
作者: ssffzz1    时间: 2009-04-07 20:27
不会吧。你总工这还鄙视啊,搞没搞过IP数据啊。\r\n\r\n你看标准的网络程序那个源端口不是自动选择的。没问题的防火墙有相应的策略。
作者: lkjxing    时间: 2009-04-07 21:07
标题: 回复 #5 ssffzz1 的帖子
顶楼上,希望有人能从TCP实现原理或防火墙实现原理上给我解释下,这个防火墙后的随机端口是如何收到ACK的?(貌似是因为基于状态的防火墙??)
作者: llxxtnt    时间: 2009-04-07 22:49
你防火墙的port本来是关闭的,这个关闭是单向的,只能出,不能进\r\n现在,你从某个port发出去一个包,就把这个port打开了,可以出,也可以进了\r\n但是这个进是有条件的,不是任何ip任何port来的包都可以进,而是只有某个特定ip的特定port来的包才能进,并且他还必须是发向你的\r\n举个例子说,你从20000 port向192.168.2.100:80发了一个syn包,那么就把防火墙的20000 port打开了,但是他只允许来自于192.168.2.100:80,dest ip是你的包进入\r\n当你们的通信结束,发fin包,防火墙关闭port
作者: llxxtnt    时间: 2009-04-07 23:15
我大概猜到你们总工的意思了\r\n他的意思是说,你们的防火墙不仅仅把进来的方向关掉,出去的方向都是要关掉的,只留一个特定的port,那么在这种情况下,你就必须要固定port了\r\n这有在非常严格的环境中才采用这种方法的,一般没有必要把出去的方向都关掉
作者: kentchoi    时间: 2009-04-08 08:16
国内的税务行业好像整套系统的原端口是固定的,\r\n所以这里的防火墙也要求,能够对源端口进行过滤。。。
作者: ssffzz1    时间: 2009-04-08 09:05
感觉固定源端口基本没啥大意义。不过要固定就固定吧。看起来安全些。
作者: ssffzz1    时间: 2009-04-08 17:03
我考虑的是源端口固定会不会冲突。\r\n\r\n1、如果我的这个端口已经被其他程序占用了(源随机选择的程序),会如何?\r\n2、如果我开了2个这样的客户端,会如何?
作者: kentchoi    时间: 2009-04-08 17:25
如果采用了 CS 结构,就不让一台pc运行两个client程序进程,\r\n\r\n端口冲突吗。。。源IP,源端口- 目的IP,目的端口 成了一个session,只要这个条件不冲突应该不会有影响吧。\r\n\r\n没看过实际的程序是怎么跑的,,,只是瞎分析的。
作者: ssffzz1    时间: 2009-04-08 17:45
我说的1 ,是说这个端口被别的程序占用了。而不是你的这个客户端程序。\r\n\r\n15楼我已经写过了。
作者: lkjxing    时间: 2009-04-08 20:03
OK,在不考虑并发的情况下,我想知道如果固定端口的话对安全性有无益处?
作者: llxxtnt    时间: 2009-04-08 23:56
标题: 回复 #16 xinglp 的帖子
不对,一个port被占用后,别的进程就不能再用这个port了,跟你的对方ip没有关系\r\n\r\n12楼讲的问题肯定是存在的,用固定端口,肯定就只能开一个client(其实也可以开多个client,每个client只在发送数据的时候打开port,用完就释放,这样可以轮流用)\r\n但是,一般这种固定port的做法肯定是在对安全要求非常严格的环境下使用的,那么我们可以认为,在这种严格的环境中,不可能有什么乱七八糟的进程,正好一不小心就恰好占用了你的port,所以不用担心这个问题\r\n如果实在不行,还有个做法,比如说,第一个client使用10000 port,第二个进程发现10000 port被使用了,就用10001 port,第三个client发现,10000和10001都被使用了,就用10002...\r\n然后,防火墙把10000-10005 port都打开,这样就可以同时开5个client
作者: llxxtnt    时间: 2009-04-09 00:04
标题: 回复 #18 lkjxing 的帖子
对安全当然是有益处的\r\n但固定port主要是为了应对防火墙双向关闭\r\n不过,一般来说防火墙都是单向关闭的,除非是对安全要求非常高
作者: ssffzz1    时间: 2009-04-09 09:04
标题: 回复 #21 xinglp 的帖子
呵呵,客户端发起连接和服务器监听,对端口来说都是一样的。socket并不加以区分的。
作者: lkjxing    时间: 2009-04-09 13:10
恩,我的测试结果是使用固定端口情况下,即使是前一个连接已经断掉后,也不能立刻使用该端口建立下一次连接,需要等一段时间。\r\n\r\n查资料后,貌似是前一次关闭连接后会进入2MLS等待时间。\r\n\r\n这样,如果我要传输多次数据(比如多个文件),是否只能在同一个连接里实现了?
作者: llxxtnt    时间: 2009-04-09 13:51
标题: 回复 #23 lkjxing 的帖子
你可以加结束标志,就把多组数据分开了
作者: cheveu    时间: 2009-04-10 10:48
有没有可能是为了QoS能精确识别业务,才固定源端口的?
作者: ssffzz1    时间: 2009-04-10 10:52
估计不是流。QOS可以直接大TOS标记啊。
作者: llxxtnt    时间: 2009-04-10 22:29
标题: 回复 #25 cheveu 的帖子
对方的port是固定的,如果只是为了QoS,从对方port就可以识别了啊,没必要client端也固定port
作者: llxxtnt    时间: 2009-04-10 22:34
标题: 回复 #26 ssffzz1 的帖子
如果没记错,tos已经不再使用了\r\n现在用dscp
作者: ssffzz1    时间: 2009-04-11 05:00
TOS和DSCP难道用的不是一个字段吗?\r\n\r\nDSCP无非是用到了前面3个保留的bit而已了。\r\n设备对此的处理还是一样的。
作者: ssffzz1    时间: 2009-04-15 12:55
MX记录IP监听25端口\r\n\r\n胡喷。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2