精华内容
下载资源
问答
  • WGET常用命令 WGET下载HTTPS链接
    2021-01-17 15:17:12

    wget是linux最常用的下载命令, 通常的运用要领是: “wget 空格+要下载文件的url路径”。

    比方 : [linux]#

    wget http://www.test.com/xxxx/xxx.tar.gz

    其中-c参数, 支持断点续传, 下载大文件时,假如不注意终止了, 能够继续运用命令接着下载。

    比方 : [linux]# wget -c http://www.test.com/xxxx/xxx.tar.gz

    直接使用wget下载github.com HTTPS链接,报错

    [linux]#wget https://github.com/mitsuhiko/flask/archive/master.zip

    [root@11_09 ~]# wget https://github.com/mitsuhiko/flask/archive/master.zip

    --2013-08-18 12:55:24-- https://github.com/mitsuhiko/flask/archive/master.zip

    Resolving github.com... 204.232.175.90

    Connecting to github.com|204.232.175.90|:443... connected.

    ERROR: cannot verify github.com's certificate, issued by `/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV CA-1':

    Unable to locally verify the issuer's authority.

    To connect to github.com insecurely, use `--no-check-certificate'.

    Unable to establish SSL connection.      增加一个选项--no-check-certificate

    [linux]# wget --no-check-certificate https://github.com/mitsuhiko/flask/archive/master.zip

    可又增加一个问题,保存下来的文件是master,未知是什么格式。再增加一个选项-O xxx。

    [linux]# wget -O master.zip --no-check-certificate https://github.com/mitsuhiko/flask/archive/master.zip      保存下来的是master.zip,与预想一致。配合-c参数,实现断点续传,PERFECT。

    最络结果:[linux]#wget -c -O master.zip --no-check-certificate https://github.com/mitsuhiko/flask/archive/master.zip

    ------------------------------------------------------------------

    HTTPS (SSL/TLS) Options(HTTPS (SSL)参数选项)

    --certificate=file

    可选的客户段端证书

    --private-key=file

    对此证书可选的“密钥文档”

    --private-key-type=type

    对此证书可选的“密钥类型“

    --egd-file=file

    EGD socket文档名

    --ca-directory=directory

    CA散列表所在的目录

    --ca-certificate=file

    包含CA的文档

    --certificate-type=[ PEM(默认),DER ]

    Client-Cert类型:PEM,DER

    --no-check-certificate

    不用检查服务器的证书

    --secure-protocol=[ auto,SSLv2,SSLv3,TLSv1 ]

    选择SSL协议:auto,SSLv2,SSLv3,TLSv1

    FTP Options(FTP参数选项)

    --ftp-user

    登录ftp的用户名(注意:最好方法是在.netrc或.wgetrc文件中定义)

    --ftp-password

    登录ftp的密码(注意:最好方法是在.netrc或.wgetrc文件中定义)

    --no-remove-listing

    不删除“.listing”文档

    --no-glob

    关闭所有通配符的ftp文档名

    --no-passive-ftp

    禁用“被动”传输模式

    --retr-symlinks

    在递归模式中,下载链接所指示的文档(排除连接目录的)

    wget

    使用详解

    1、下载单个文件

    wget url+filename

    下载过程中同时可以看到四项信息

    已经下载的比例

    已经下载的大小

    当前下载的速度

    剩余的时间

    2、使用一个大写O做参数表示另存为

    wget -O save_name url

    这种方法适用于对应链接中没有显式文件名的情况。

    例如:wget -O xx.zip http://www.vim.org/scripts/download_script.php?src_id=7701

    再用不带-O参数的下载一次。

    ls -al

    总计 132

    drwxr-xr-x 2 root root 4096 07-12 10:43 .

    drwxr-xr-x 4 root root 4096 07-11 16:26 ..

    -rw-r--r-- 1 root root 50243 07-12 10:43 download_script.php?src_id=7701

    -rw-r--r-- 1 root root 50243 07-12 10:43 xx.zip

    我们发现,下载的大小都是一样。但是不带-O参数的,文件名还要转换一次。不如用-O参数方便。

    mv "download_script.php?src_id=7701" yy.zip

    3、指定下载速率

    方法是使用wget --limit-rate

    wget程序默认是使用所有的带宽,如果

    是在生产服务器上下载很大的文件就不可接受了。

    为了避免这种情况使用--limit-rate参数

    wget --limit-rate=200k http://www.openss7.org/repos/tarballs/strx25-0.9.2.1.tar.bz2

    4、断点下载

    使用wget -c完成未完成的下载

    下载到一半需要停下来干别的事情,用^c就可以停顿住。

    回来后,继续下载可以加一个-c参数。

    注意:如果不加入-c,那么下载的文件会多出一个.1的后缀。

    5、在后台下载

    方法:加一个-b的参数

    wget -b url/filename为后台下载。下载经过写入到wget-log文件中。

    用tail -f wget-log查看下载日志

    6、模拟在浏览器下下载

    有的网站不允许客户在非浏览器环境下下载。使用--user-agent来设置

    wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" URL-TO-DOWNLOAD

    7、测试下载链接

    方法:使用--spider

    试图做计划下载时候,需要先检查一下下载链接是否有效。

    wget --spider DOWNLOAD-URL

    如果返回OK,则表示下载链接是正确的!

    例如

    wget --spider "http://ip138.com/ips.asp?ip=58.251.193.137&action=2"

    Spider mode enabled. Check if remote file exists.

    --2010-07-12 11:36:32-- http://ip138.com/ips.asp?ip=58.251.193.137&action=2

    正在解析主机 ip138.com... 221.5.47.136

    Connecting to ip138.com|221.5.47.136|:80... 已连接。

    已发出 HTTP 请求,正在等待回应... 200 OK

    长度:7817 (7.6K) [text/html]

    Remote file exists and could contain further links,

    but recursion is disabled -- not retrieving.

    8、增加尝试次数

    方法:--tries=1000

    如果网速有问题,下载大文件的时候可能会发生错误,

    默认wget尝试20次链接。

    如果尝试75次,可以

    wget --tires=75 DOWNLOAD-URL

    9、下载多个文件使用wget -i

    将多个下载链接写入到一个download-file-list.txt文件中,而后用

    wget -i download-file-list.txt

    10、下载整站

    方法:用--mirror参数

    当你要下载一个完整站点并实现本地浏览的时候,

    wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL

    参数讲解:

    --mirror:设置这个参数用来建立本地镜像

    -p:下载所有html文件适合显示的元素

    --convert-links:下载完成后,将文档链接都转换成本地的

    -P ./LOCAL-DIR:保存所有的文件和目录到指定文件夹下

    11、下载时候禁止下载指定类型的文件

    例如下载站点时候,不打算下载gif动画图片。

    wget --reject=gif WEBSITE-TO-BE-DOWNLOADED

    12、记录下载日志

    方法:使用小写字母o

    wget -o xx.html.log -O xx.html "http://ip138.com/ips.asp?ip=58.251.193.137&action=2"

    检查一下日志:

    [root@localhost opt]# cat xx.html.log

    --2010-07-12 11:57:22-- http://ip138.com/ips.asp?ip=58.251.193.137&action=2

    正在解析主机 ip138.com... 221.5.47.136

    Connecting to ip138.com|221.5.47.136|:80... 已连接。

    已发出 HTTP 请求,正在等待回应... 200 OK

    长度:7817 (7.6K) [text/html]

    Saving to: `xx.html'

    0K ....... 100% 65.5K=0.1s

    2010-07-12 11:57:22 (65.5 KB/s) - `xx.html' saved [7817/7817]

    13、是第9条的增强版。可以限制下载容量

    wget -Q5m -i FILE-WHICH-HAS-URLS

    当下载的文件达到5兆的时候,停止下载。

    注意:如果不是对一个文件下载链接清单,对单个文件,

    这个限制不会生效的。

    14、和第11条正好相反,

    这条技巧是讲述如何仅仅下载指定类型的文件

    从一个网站中下载所有的pdf文件

    wget -r -A.pdf http://url-to-webpage-with-pdfs/

    15、使用wget完成ftp下载

    匿名ftp下载类似于http下载

    wget ftp-url即可。

    如果是需要输入用户名和密码,则是

    wget --ftp-user=USERNAME --ftp-password=PASSWORD DOWNLOAD-URL

    更多相关内容
  • 物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口端口号的...
  • TCP/IP 端口号大全

    2013-11-26 10:17:59
    1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 ...11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言

    http://www.douban.com/group/topic/7647051
    1 tcpmux TCP 端口服务多路复用
    5 rje 远程作业入口
    7 echo Echo 服务
    9 discard 用于连接测试的空服务
    11 systat 用于列举连接了的端口的系统状态
    13 daytime 给请求主机发送日期和时间
    17 qotd 给连接了的主机发送每日格言
    18 msp 消息发送协议
    19 chargen 字符生成服务;发送无止境的字符流
    20 ftp-data FTP 数据端口
    21 ftp 文件传输协议(FTP)端口;有时被文件服务协议(FSP)使用
    22 ssh 安全 Shell(SSH)服务
    23 telnet Telnet 服务
    25 smtp 简单邮件传输协议(SMTP)
    37 time 时间协议
    39 rlp 资源定位协议
    42 nameserver 互联网名称服务
    43 nicname WHOIS 目录服务
    49 tacacs 用于基于 TCP/IP 验证和访问的终端访问控制器访问控制系统
    50 re-mail-ck 远程邮件检查协议
    53 domain 域名服务(如 BIND)
    63 whois++ WHOIS++,被扩展了的 WHOIS 服务
    67 bootps 引导协议(BOOTP)服务;还被动态主机配置协议(DHCP)服务使用
    68 bootpc Bootstrap(BOOTP)客户;还被动态主机配置协议(DHCP)客户使用
    69 tftp 小文件传输协议(TFTP)
    70 gopher Gopher 互联网文档搜寻和检索
    71 netrjs-1 远程作业服务
    72 netrjs-2 远程作业服务
    73 netrjs-3 远程作业服务
    73 netrjs-4 远程作业服务
    79 finger 用于用户联系信息的 Finger 服务
    80 http 用于万维网(WWW)服务的超文本传输协议(HTTP)
    88 kerberos Kerberos 网络验证系统
    95 supdup Telnet 协议扩展
    101 hostname SRI-NIC 机器上的主机名服务
    102 iso-tsap ISO 开发环境(ISODE)网络应用
    105 csnet-ns 邮箱名称服务器;也被 CSO 名称服务器使用
    107 rtelnet 远程 Telnet
    109 pop2 邮局协议版本2
    110 pop3 邮局协议版本3
    111 sunrpc 用于远程命令执行的远程过程调用(RPC)协议,被网络文件系统(NFS)使用
    113 auth 验证和身份识别协议
    115 sftp 安全文件传输协议(SFTP)服务
    117 uucp-path Unix 到 Unix 复制协议(UUCP)路径服务
    119 nntp 用于 USENET 讨论系统的网络新闻传输协议(NNTP)
    123 ntp 网络时间协议(NTP)
    137 netbios-ns 在红帽企业 Linux 中被 Samba 使用的 NETBIOS 名称服务
    138 netbios-dgm 在红帽企业 Linux 中被 Samba 使用的 NETBIOS 数据报服务
    139 netbios-ssn 在红帽企业 Linux 中被 Samba 使用的NET BIOS 会话服务
    143 imap 互联网消息存取协议(IMAP)
    161 snmp 简单网络管理协议(SNMP)
    162 snmptrap SNMP 的陷阱
    163 cmip-man 通用管理信息协议(CMIP)
    164 cmip-agent 通用管理信息协议(CMIP)
    174 mailq MAILQ
    177 xdmcp X 显示管理器控制协议
    178 nextstep NeXTStep 窗口服务器
    179 bgp 边界网络协议
    191 prospero Cliffod Neuman 的 Prospero 服务
    194 irc 互联网中继聊天(IRC)
    199 smux SNMP UNIX 多路复用
    201 at-rtmp AppleTalk 选路
    202 at-nbp AppleTalk 名称绑定
    204 at-echo AppleTalk echo 服务
    206 at-zis AppleTalk 区块信息
    209 qmtp 快速邮件传输协议(QMTP)
    210 z39.50 NISO Z39.50 数据库
    213 ipx 互联网络分组交换协议(IPX),被 Novell Netware 环境常用的数据报协议
    220 imap3 互联网消息存取协议版本3
    245 link LINK
    347 fatserv Fatmen 服务器
    363 rsvp_tunnel RSVP 隧道
    369 rpc2portmap Coda 文件系统端口映射器
    370 codaauth2 Coda 文件系统验证服务
    372 ulistproc UNIX Listserv
    389 ldap 轻型目录存取协议(LDAP)
    427 svrloc 服务位置协议(SLP)
    434 mobileip-agent 可移互联网协议(IP)代理
    435 mobilip-mn 可移互联网协议(IP)管理器
    443 https 安全超文本传输协议(HTTP)
    444 snpp 小型网络分页协议
    445 microsoft-ds 通过 TCP/IP 的服务器消息块(SMB)
    464 kpasswd Kerberos 口令和钥匙改换服务
    468 photuris Photuris 会话钥匙管理协议
    487 saft 简单不对称文件传输(SAFT)协议
    488 gss-http 用于 HTTP 的通用安全服务(GSS)
    496 pim-rp-disc 用于协议独立的多址传播(PIM)服务的会合点发现(RP-DISC)
    500 isakmp 互联网安全关联和钥匙管理协议(ISAKMP)
    535 iiop 互联网内部对象请求代理协议(IIOP)
    538 gdomap GNUstep 分布式对象映射器(GDOMAP)
    546 dhcpv6-client 动态主机配置协议(DHCP)版本6客户
    547 dhcpv6-server 动态主机配置协议(DHCP)版本6服务
    554 rtsp 实时流播协议(RTSP)
    563 nntps 通过安全套接字层的网络新闻传输协议(NNTPS)
    565 whoami whoami
    587 submission 邮件消息提交代理(MSA)
    610 npmp-local 网络外设管理协议(NPMP)本地 / 分布式排队系统(DQS)
    611 npmp-gui 网络外设管理协议(NPMP)GUI / 分布式排队系统(DQS)
    612 hmmp-ind HMMP 指示 / DQS
    631 ipp 互联网打印协议(IPP)
    636 ldaps 通过安全套接字层的轻型目录访问协议(LDAPS)
    674 acap 应用程序配置存取协议(ACAP)
    694 ha-cluster 用于带有高可用性的群集的心跳服务
    749 kerberos-adm Kerberos 版本5(v5)的“kadmin”数据库管理
    750 kerberos-iv Kerberos 版本4(v4)服务
    765 webster 网络词典
    767 phonebook 网络电话簿
    873 rsync rsync 文件传输服务
    992 telnets 通过安全套接字层的 Telnet(TelnetS)
    993 imaps 通过安全套接字层的互联网消息存取协议(IMAPS)
    994 ircs 通过安全套接字层的互联网中继聊天(IRCS)
    995 pop3s 通过安全套接字层的邮局协议版本3(POPS3)
    表 C-1. 著名端口
    以下端口是 UNIX 特有的,涉及了从电子邮件到验证不等的服务。在方括号内的名称(如 [service])是服务的守护进程名称或它的常用别名。
    端口号码 / 层 名称 注释
    512/tcp exec 用于对远程执行的进程进行验证
    512/udp biff [comsat] 异步邮件客户(biff)和服务(comsat)
    513/tcp login 远程登录(rlogin)
    513/udp who [whod] 登录的用户列表
    514/tcp shell [cmd] 不必登录的远程 shell(rshell)和远程复制(rcp)
    514/udp syslog UNIX 系统日志服务
    515 printer [spooler] 打印机(lpr)假脱机
    517/udp talk 远程对话服务和客户
    518/udp ntalk 网络交谈(ntalk),远程对话服务和客户
    519 utime [unixtime] UNIX 时间协议(utime)
    520/tcp efs 扩展文件名服务器(EFS)
    520/udp router [route, routed] 选路信息协议(RIP)
    521 ripng 用于互联网协议版本6(IPv6)的选路信息协议
    525 timed [timeserver] 时间守护进程(timed)
    526/tcp tempo [newdate] Tempo
    530/tcp courier [rpc] Courier 远程过程调用(RPC)协议
    531/tcp conference [chat] 互联网中继聊天
    532 netnews Netnews
    533/udp netwall 用于紧急广播的 Netwall
    540/tcp uucp [uucpd] Unix 到 Unix 复制服务
    543/tcp klogin Kerberos 版本5(v5)远程登录
    544/tcp kshell Kerberos 版本5(v5)远程 shell
    548 afpovertcp 通过传输控制协议(TCP)的 Appletalk 文件编制协议(AFP)
    556 remotefs [rfs_server, rfs] Brunhoff 的远程文件系统(RFS)
    表 C-2. UNIX 特有的端口
    表 C-3列举了由网络和软件社区向 IANA 提交的要在端口号码列表中正式注册的端口。
    端口号码 / 层 名称 注释
    1080 socks SOCKS 网络应用程序代理服务
    1236 bvcontrol [rmtcfg] Garcilis Packeten 远程配置服务器[a]
    1300 h323hostcallsc H.323 电话会议主机电话安全
    1433 ms-sql-s Microsoft SQL 服务器
    1434 ms-sql-m Microsoft SQL 监视器
    1494 ica Citrix ICA 客户
    1512 wins Microsoft Windows 互联网名称服务器
    1524 ingreslock Ingres 数据库管理系统(DBMS)锁定服务
    1525 prospero-np 无特权的 Prospero
    1645 datametrics [old-radius] Datametrics / 从前的 radius 项目
    1646 sa-msg-port [oldradacct] sa-msg-port / 从前的 radacct 项目
    1649 kermit Kermit 文件传输和管理服务
    1701 l2tp [l2f] 第2层隧道服务(LT2P) / 第2层转发(L2F)
    1718 h323gatedisc H.323 电讯守门装置发现机制
    1719 h323gatestat H.323 电讯守门装置状态
    1720 h323hostcall H.323 电讯主持电话设置
    1758 tftp-mcast 小文件 FTP 组播
    1759 mtftp 组播小文件 FTP(MTFTP)
    1789 hello Hello 路由器通信端口
    1812 radius Radius 拨号验证和记帐服务
    1813 radius-acct Radius 记帐
    1911 mtp Starlight 网络多媒体传输协议(MTP)
    1985 hsrp Cisco 热备用路由器协议
    1986 licensedaemon Cisco 许可管理守护进程
    1997 gdp-port Cisco 网关发现协议(GDP)
    2049 nfs [nfsd] 网络文件系统(NFS)
    2102 zephyr-srv Zephyr 通知传输和发送服务器
    2103 zephyr-clt Zephyr serv-hm 连接
    2104 zephyr-hm Zephyr 主机管理器
    2401 cvspserver 并行版本系统(CVS)客户 / 服务器操作
    2430/tcp venus 用于 Coda 文件系统(codacon 端口)的 Venus 缓存管理器
    2430/udp venus 用于 Coda 文件系统(callback/wbc interface 界面)的 Venus 缓存管理器
    2431/tcp venus-se Venus 传输控制协议(TCP)的副作用
    2431/udp venus-se Venus 用户数据报协议(UDP)的副作用
    2432/udp codasrv Coda 文件系统服务器端口
    2433/tcp codasrv-se Coda 文件系统 TCP 副作用
    2433/udp codasrv-se Coda 文件系统 UDP SFTP 副作用
    2600 hpstgmgr [zebrasrv] HPSTGMGR;Zebra 选路

    2601 discp-client [zebra] discp 客户;Zebra 集成的 shell
    2602 discp-server [ripd] discp 服务器;选路信息协议守护进程(ripd)
    2603 servicemeter [ripngd] 服务计量;用于 IPv6 的 RIP 守护进程
    2604 nsc-ccs [ospfd] NSC CCS;开放式短路径优先守护进程(ospfd)
    2605 nsc-posa NSC POSA;边界网络协议守护进程(bgpd)
    2606 netmon [ospf6d] Dell Netmon;用于 IPv6 的 OSPF 守护进程(ospf6d)
    2809 corbaloc 公共对象请求代理体系(CORBA)命名服务定位器
    3130 icpv2 互联网缓存协议版本2(v2);被 Squid 代理缓存服务器使用
    3306 mysql MySQL 数据库服务
    3346 trnsprntproxy Trnsprnt 代理
    4011 pxe 执行前环境(PXE)服务
    4321 rwhois 远程 Whois(rwhois)服务
    4444 krb524 Kerberos 版本5(v5)到版本4(v4)门票转换器
    5002 rfe 无射频以太网(RFE)音频广播系统
    5308 cfengine 配置引擎(Cfengine)
    5999 cvsup [CVSup] CVSup 文件传输和更新工具
    6000 x11 [X] X 窗口系统服务
    7000 afs3-fileserver Andrew 文件系统(AFS)文件服务器
    7001 afs3-callback 用于给缓存管理器回电的 AFS 端口
    7002 afs3-prserver AFS 用户和组群数据库
    7003 afs3-vlserver AFS 文件卷位置数据库
    7004 afs3-kaserver AFS Kerberos 验证服务
    7005 afs3-volser AFS 文件卷管理服务器
    7006 afs3-errors AFS 错误解释服务
    7007 afs3-bos AFS 基本监查进程
    7008 afs3-update AFS 服务器到服务器更新器
    7009 afs3-rmtsys AFS 远程缓存管理器服务
    9876 sd 会话指引器
    10080 amanda 高级 Maryland 自动网络磁盘归档器(Amanda)备份服务
    11371 pgpkeyserver 良好隐私(PGP) / GNU 隐私卫士(GPG)公钥服务器
    11720 h323callsigalt H.323 调用信号交替
    13720 bprd Veritas NetBackup 请求守护进程(bprd)
    13721 bpdbm Veritas NetBackup 数据库管理器(bpdbm)
    13722 bpjava-msvc Veritas NetBackup Java / Microsoft Visual C++ (MSVC) 协议
    13724 vnetd Veritas 网络工具
    13782 bpcd Vertias NetBackup
    13783 vopied Veritas VOPIED 协议
    22273 wnn6 [wnn4] 假名/汉字转换系统[c]
    26000 quake Quake(以及相关的)多人游戏服务器
    26208 wnn6-ds
    33434 traceroute Traceroute 网络跟踪工具
    注:
    a. /etc/services 中的注释如下:端口1236被注册为“bvcontrol”,但是它也被 Gracilis Packeten 远程配置服务器使用。正式名称被列为主要名称,未注册的名称被列为别名。
    b. 在 /etc/services 中的注释:端口 2600 到 2606 被 zebra 软件包未经注册而使用。主要名称是被注册的名称,被 zebra 使用的未注册名称被列为别名。
    c. /etc/services 文件中的注释:该端口被注册为 wnn6,但是还在 FreeWnn 软件包中使用了未注册的“wnn4”。

    表 C-3. 注册的端口
    表 C-4显示了一个和数据报传递协议(DDP)有关的端口列表。DDP 在 AppleTalk 网络上被使用。
    端口号码 / 层 名称 注释
    1/ddp rtmp 路由表管理协议
    2/ddp nbp 名称绑定协议
    4/ddp echo AppleTalk Echo 协议
    6/ddp zip 区块信息协议
    表 C-4. 数据报传递协议端口
    表 C-5是和 Kerberos 网络验证协议相关的端口列表。在标记的地方,v5 代表 Kerberos 版本5协议。注意,这些端口没有在 IANA 注册。
    端口号码 / 层 名称 注释
    751 kerberos_master Kerberos 验证
    752 passwd_server Kerberos 口令(kpasswd)服务器
    754 krb5_prop Kerberos v5 从属传播
    760 krbupdate [kreg] Kerberos 注册
    1109 kpop Kerberos 邮局协议(KPOP)
    2053 knetd Kerberos 多路分用器
    2105 eklogin Kerberos v5 加密的远程登录(rlogin)
    表 C-5. Kerberos(工程 Athena/MIT)端口
    表 C-6是一个未注册的端口列表。这些端口可能被安装在你的红帽企业 Linux 系统上的服务或协议使用,或者它们是在红帽企业 Linux 和运行其它操作系统的机器通信所必需的端口。
    端口号码 / 层 名称 注释
    15/tcp netstat 网络状态(netstat)
    98/tcp linuxconf Linuxconf Linux 管理工具
    106 poppassd 邮局协议口令改变守护进程(POPPASSD)
    465/tcp smtps 通过安全套接字层的简单邮件传输协议(SMTPS)
    616/tcp gii 使用网关的(选路守护进程)互动界面
    808 omirr [omirrd] 联机镜像(Omirr)文件镜像服务
    871/tcp supfileserv 软件升级协议(SUP)服务器
    901/tcp swat Samba 万维网管理工具(SWAT)
    953 rndc Berkeley 互联网名称域版本9(BIND 9)远程名称守护进程配置工具
    1127 sufiledbg 软件升级协议(SUP)调试
    1178/tcp skkserv 简单假名到汉字(SKK)日文输入服务器
    1313/tcp xtel 法国 Minitel 文本信息系统
    1529/tcp support [prmsd, gnatsd] GNATS 错误跟踪系统
    2003/tcp cfinger GNU Finger 服务
    2150 ninstall 网络安装服务
    2988 afbackup afbackup 客户-服务器备份系统
    3128/tcp squid Squid 万维网代理缓存
    3455 prsvp RSVP 端口
    5432 postgres PostgreSQL 数据库
    4557/tcp fax FAX 传输服务(旧服务)
    4559/tcp hylafax HylaFAX 客户-服务器协议(新服务)
    5232 sgi-dgl SGI 分布式图形库
    5354 noclog NOCOL 网络操作中心记录守护进程(noclogd)
    5355 hostmon NOCOL 网络操作中心主机监视
    5680/tcp canna Canna 日文字符输入界面
    6010/tcp x11-ssh-offset 安全 Shell(SSH)X11 转发偏移
    6667 ircd 互联网中继聊天守护进程(ircd)
    7100/tcp xfs X 字体服务器(XFS)
    7666/tcp tircproxy Tircproxy IRC 代理服务
    8008 http-alt 超文本传输协议(HTTP)的另一选择
    8080 webcache 万维网(WWW)缓存服务
    8081 tproxy 透明代理
    9100/tcp jetdirect [laserjet, hplj] Hewlett-Packard (HP) JetDirect 网络打印服务
    9359 mandelspawn [mandelbrot] 用于 X 窗口系统的并行 Mandelbrot 生成程序
    10081 kamanda 使用 Kerberos 的 Amanda 备份服务
    10082/tcp amandaidx Amanda 备份服务
    10083/tcp amidxtape Amanda 备份服务
    20011 isdnlog 综合业务数字网(ISDN)登录系统
    20012 vboxd ISDN 音箱守护进程(vboxd)
    22305/tcp wnn4_Kr kWnn 韩文输入系统
    22289/tcp wnn4_Cn cWnn 中文输入系统
    22321/tcp wnn4_Tw tWnn 中文输入系统(台湾)
    24554 binkp Binkley TCP/IP Fidonet 邮寄程序守护进程
    27374 asp 地址搜索协议
    60177 tfido Ifmail FidoNet 兼容邮寄服务
    60179 fido FidoNet 电子邮件和新闻网络

    34人 喜欢

    • 

       2009-09-26 21:49:54

      端口:0
      服务:Reserved
      说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。

      端口:1
      服务:tcpmux
      说明:这显示有人在寻找SGI Irix机器。Irix是实现tcpmux的主要提供者,默认情况下tcpmux在这种系统中被打开。Irix机器在发布是含有几个默认的无密码的帐户,如:IP、GUEST UUCP、NUUCP、DEMOS 、TUTOR、DIAG、OUTOFBOX等。许多管理员在安装后忘记删除这些帐户。因此HACKER在INTERNET上搜索tcpmux并利用这些帐户。

      端口:7
      服务:Echo
      说明:能看到许多人搜索Fraggle放大器时,发送到X.X.X.0和X.X.X.255的信息。

      端口:19
      服务:Character Generator
      说明:这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时会发送含有垃圾字符的数据流直到连接关闭。HACKER利用IP欺骗可以发动DoS攻击。伪造两个chargen服务器之间的UDP包。同样Fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。

      端口:21
      服务:FTP
      说明:FTP服务器所开放的端口,用于上传、下载。最常见的攻击者用于寻找打开anonymous的FTP服务器的方法。这些服务器带有可读写的目录。木马Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade Runner所开放的端口。

      端口:22
      服务:Ssh
      说明:PcAnywhere建立的TCP和这一端口的连接可能是为了寻找ssh。这一服务有许多弱点,如果配置成特定的模式,许多使用RSAREF库的版本就会有不少的漏洞存在。

      端口:23
      服务:Telnet
      说明:远程登录,入侵者在搜索远程登录UNIX的服务。大多数情况下扫描这一端口是为了找到机器运行的操作系统。还有使用其他技术,入侵者也会找到密码。木马Tiny Telnet Server就开放这个端口。

      端口:25
      服务:SMTP
      说明:SMTP服务器所开放的端口,用于发送邮件。入侵者寻找SMTP服务器是为了传递他们的SPAM。入侵者的帐户被关闭,他们需要连接到高带宽的E-MAIL服务器上,将简单的信息传递到不同的地址。木马Antigen、Email Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都开放这个端口。

      端口:31
      服务:MSG Authentication
      说明:木马Master Paradise、Hackers Paradise开放此端口。

      端口:42
      服务:WINS Replication
      说明:WINS复制

      端口:53
      服务:Domain Name Server(DNS)
      说明:DNS服务器所开放的端口,入侵者可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其他的通信。因此防火墙常常过滤或记录此端口。

      端口:67
      服务:Bootstrap Protocol Server
      说明:通过DSL和Cable modem的防火墙常会看见大量发送到广播地址255.255.255.255的数据。这些机器在向DHCP服务器请求一个地址。HACKER常进入它们,分配一个地址把自己作为局部路由器而发起大量中间人(man-in-middle)攻击。客户端向68端口广播请求配置,服务器向67端口广播回应请求。这种回应使用广播是因为客户端还不知道可以发送的IP地址。

      端口:69
      服务:Trival File Transfer
      说明:许多服务器与bootp一起提供这项服务,便于从系统下载启动代码。但是它们常常由于错误配置而使入侵者能从系统中窃取任何 文件。它们也可用于系统写入文件。

      端口:79
      服务:Finger Server
      说明:入侵者用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误,回应从自己机器到其他机器Finger扫描。

      端口:80
      服务:HTTP
      说明:用于网页浏览。木马Executor开放此端口。

      端口:99
      服务:gram Relay
      说明:后门程序ncx99开放此端口。

      端口:102
      服务:Message transfer agent(MTA)-X.400 over TCP/IP
      说明:消息传输代理。

      端口:109
      服务:Post Office Protocol -Version3
      说明:POP3服务器开放此端口,用于接收邮件,客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交 换缓冲区溢出的弱点至少有20个,这意味着入侵者可以在真正登陆前进入系统。成功登陆后还有其他缓冲区溢出错误。

      端口:110
      服务:SUN公司的RPC服务所有端口
      说明:常见RPC服务有rpc.mountd、NFS、rpc.statd、rpc.csmd、rpc.ttybd、amd等

      端口:113
      服务:Authentication Service
      说明:这是一个许多计算机上运行的协议,用于鉴别TCP连接的用户。使用标准的这种服务可以获得许多计算机的信息。但是它可作为许多服务的记录器,尤其是FTP、POP、IMAP、SMTP和IRC等服务。通常如果有许多客户通过防火墙访问这些服务,将会看到许多这个端口的连接请求。记住,如果阻断这个端口客户端会感觉到在防火墙另一边与E-MAIL服务器的缓慢连接。许多防火墙支持TCP连接的阻断过程中发回RST。这将会停止缓慢的连接。

      端口:119
      服务:Network News Transfer Protocol
      说明:NEWS新闻组传输协议,承载USENET通信。这个端口的连接通常是人们在寻找USENET服务器。多数ISP限制,只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送SPAM。

      端口:135
      服务:Location Service
      说明:Microsoft在这个端口运行DCE RPC end-point mapper为它的DCOM服务。这与UNIX 111端口的功能很相似。使用DCOM和RPC的服务利用计算机上的end-point mapper注册它们的位置。远端客户连接到计算机时,它们查找end-point mapper找到服务的位置。HACKER扫描计算机的这个端口是为了找到这个计算机上运行Exchange Server吗?什么版本?还有些DOS攻击直接针对这个端口。

      端口:137、138、139
      服务:NETBIOS Name Service
      说明:其中137、138是UDP端口,当通过网上邻居传输文件时用这个端口。而139端口:通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于windows文件和打印机共享和SAMBA。还有WINS Regisrtation也用它。

      端口:143
      服务:Interim Mail Access Protocol v2
      说明:和POP3的安全问题一样,许多IMAP服务器存在有缓冲区溢出漏洞。记住:一种LINUX蠕虫(admv0rm)会通过这个端口繁殖,因此许多这个端口的扫描来自不知情的已经被感染的用户。当REDHAT在他们的LINUX发布版本中默认允许IMAP后,这些漏洞变的很流行。这一端口还被用于IMAP2,但并不流行。

      端口:161
      服务:SNMP
      说明:SNMP允许远程管理设备。所有配置和运行信息的储存在数据库中,通过SNMP可获得这些信息。许多管理员的错误配置将被暴露在Internet。Cackers将试图使用默认的密码public、private访问系统。他们可能会试验所有可能的组合。SNMP包可能会被错误的指向用户的网络。

      端口:177
      服务:X Display Manager Control Protocol
      说明:许多入侵者通过它访问X-windows操作台,它同时需要打开6000端口。

      端口:389
      服务:LDAP、ILS
      说明:轻型目录访问协议和NetMeeting Internet Locator Server共用这一端口。

      端口:443
      服务:Https
      说明:网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP。

      端口:456
      服务:[NULL]
      说明:木马HACKERS PARADISE开放此端口。

      端口:513
      服务:Login,remote login
      说明:是从使用cable modem或DSL登陆到子网中的UNIX计算机发出的广播。这些人为入侵者进入他们的系统提供了信息。

      端口:544
      服务:[NULL]
      说明:kerberos kshell

      端口:548
      服务:Macintosh,File Services(AFP/IP)
      说明:Macintosh,文件服务。

      端口:553
      服务:CORBA IIOP (UDP)
      说明:使用cable modem、DSL或VLAN将会看到这个端口的广播。CORBA是一种面向对象的RPC系统。入侵者可以利用这些信息进入系统。

      端口:555
      服务:DSF
      说明:木马PhAse1.0、Stealth Spy、IniKiller开放此端口。

      端口:568
      服务:Membership DPA
      说明:成员资格 DPA。

      端口:569
      服务:Membership MSN
      说明:成员资格 MSN。

      端口:635
      服务:mountd
      说明:Linux的mountd Bug。这是扫描的一个流行BUG。大多数对这个端口的扫描是基于UDP的,但是基于TCP的mountd有所增加(mountd同时运行于两个端口)。记住mountd可运行于任何端口(到底是哪个端口,需要在端口111做portmap查询),只是Linux默认端口是635,就像NFS通常运行于2049端口。

      端口:636
      服务:LDAP
      说明:SSL(Secure Sockets layer)

      端口:666
      服务:Doom Id Software
      说明:木马Attack FTP、Satanz Backdoor开放此端口

      端口:993
      服务:IMAP
      说明:SSL(Secure Sockets layer)

      端口:1001、1011
      服务:[NULL]
      说明:木马Silencer、WebEx开放1001端口。木马Doly Trojan开放1011端口。

      端口:1024
      服务:Reserved
      说明:它是动态端口的开始,许多程序并不在乎用哪个端口连接网络,它们请求系统为它们分配下一个闲置端口。基于这一点分配从端口1024开始。这就是说第一个向系统发出请求的会分配到1024端口。你可以重启机器,打开Telnet,再打开一个窗口运行natstat -a 将会看到Telnet被分配1024端口。还有SQL session也用此端口和5000端口。

      端口:1025、1033
      服务:1025:network blackjack 1033:[NULL]
      说明:木马netspy开放这2个端口。

      端口:1080
      服务:SOCKS
      说明:这一协议以通道方式穿过防火墙,允许防火墙后面的人通过一个IP地址访问INTERNET。理论上它应该只允许内部的通信向外到达INTERNET。但是由于错误的配置,它会允许位于防火墙外部的攻击穿过防火墙。WinGate常会发生这种错误,在加入IRC聊天室时常会看到这种情况。

      端口:1170
      服务:[NULL]
      说明:木马Streaming Audio Trojan、Psyber Stream Server、Voice开放此端口。

      端口:1234、1243、6711、6776
      服务:[NULL]
      说明:木马SubSeven2.0、Ultors Trojan开放1234、6776端口。木马SubSeven1.0/1.9开放1243、6711、6776端口。

      端口:1245
      服务:[NULL]
      说明:木马Vodoo开放此端口。

      端口:1433
      服务:SQL
      说明:Microsoft的SQL服务开放的端口。

      端口:1492
      服务:stone-design-1
      说明:木马FTP99CMP开放此端口。

      端口:1500
      服务:RPC client fixed port session queries
      说明:RPC客户固定端口会话查询

      端口:1503
      服务:NetMeeting T.120
      说明:NetMeeting T.120

      端口:1524
      服务:ingress
      说明:许多攻击脚本将安装一个后门SHELL于这个端口,尤其是针对SUN系统中Sendmail和RPC服务漏洞的脚本。如果刚安装了防火墙就看到在这个端口上的连接企图,很可能是上述原因。可以试试Telnet到用户的计算机上的这个端口,看看它是否会给你一个SHELL。连接到600/pcserver也存在这个问题。

      端口:1600
      服务:issd
      说明:木马Shivka-Burka开放此端口。

      端口:1720
      服务:NetMeeting
      说明:NetMeeting H.233 call Setup。

      端口:1731
      服务:NetMeeting Audio Call Control
      说明:NetMeeting音频调用控制。

      端口:1807
      服务:[NULL]
      说明:木马SpySender开放此端口。

      端口:1981
      服务:[NULL]
      说明:木马ShockRave开放此端口。

      端口:1999
      服务:cisco identification port
      说明:木马BackDoor开放此端口。

      端口:2000
      服务:[NULL]
      说明:木马GirlFriend 1.3、Millenium 1.0开放此端口。

      端口:2001
      服务:[NULL]
      说明:木马Millenium 1.0、Trojan Cow开放此端口。

      端口:2023
      服务:xinuexpansion 4
      说明:木马Pass Ripper开放此端口。

      端口:2049
      服务:NFS
      说明:NFS程序常运行于这个端口。通常需要访问Portmapper查询这个服务运行于哪个端口。

      端口:2115
      服务:[NULL]
      说明:木马Bugs开放此端口。

      端口:2140、3150
      服务:[NULL]
      说明:木马Deep Throat 1.0/3.0开放此端口。

      端口:2500
      服务:RPC client using a fixed port session replication
      说明:应用固定端口会话复制的RPC客户

    • 

       2009-09-26 21:50:56

      TELNET常用



      组件
      端口
      用途 :

      Administration Server
      390
      标准 HTTP 端口

      Application Server
      80
      标准 HTTP 端口

      443
      SSL 上的 HTTP

      3700
      标准 IIOP 端口

      4848
      Administration Server 端口

      7676
      标准 Message Queue 端口

      Calendar Server
      80
      标准 HTTP 端口

      389
      LDAP 端口

      443
      SSL 上的 HTTP

      57997
      ENS

      59779
      DWP

      Directory Proxy Server
      489
      LDAP 监听器

      Directory Server
      389
      标准 LDAP 监听器

      636
      SSL 上的 LDAPS

      Instant Messaging
      49909
      多路复用器端口

      49916
      安全模式,Netlet 输出端口

      49917
      安全模式,Netlet 输入端口

      49919
      Instant Messaging 服务器到服务器端口

      49999
      Instant Messaging 端口

      Message Queue
      80
      标准 HTTP 端口

      443
      SSL 上的 HTTP

      7676
      端口映射

      7677
      HTTP Tunnelling Servlet 端口

      Messaging Server
      25
      标准 SMTP 端口

      80
      Messaging Express (HTTP) 端口

      110
      标准 POP3 端口/MMP POP3 代理

      143
      标准 IMAP4 端口/MMP IMAP 代理

      443
      SSL 上的 HTTP

      992
      SSL 上的 POP3

      993
      SSL 上的 IMAP 或 SSL 上的 MMP IMAP 代理

      7997
      事件通知服务端口

      27442
      由用于产品内部通信的 Job Controller 所使用

      49994
      由用于产品内部通信的 Watcher 所使用

      Portal Server Secure Remote Access
      80
      标准 HTTP 端口

      443
      SSL 上的 HTTP

      10443
      Rewriter Proxy 端口

      10555
      Netlet Proxy 端口

      Sun Cluster
      23
      远程登录端口 23 用于 Sun Fire 15000 系统控制器

      161
      简单网络管理协议 (SNMP) 代理通信端口

      3000
      缺省 SunPlex 管理器端口

      5000 ... 5010
      将物理端口号增大 5000,控制台访问端口

      6789
      Sun 管理中心 Web 控制台

      Web Server
      80
      标准 HTTP 端口

      443
      SSL 上的 HTTP

      8888
      标准管理端口

    • 

       2009-09-26 21:53:28

      应用层网关服务
      Internet 连接共享 (ICS)/Internet 连接防火墙 (ICF) 服务的这个子组件对允许网络协议通过防火墙并在 Internet 连接共享后面工作的插件提供支持。应用层网关 (ALG) 插件可以打开端口和更改嵌入在数据包内的数据(如端口和 IP 地址)。文件传输协议 (FTP) 是唯一具有 Windows Server 2003 标准版和 Windows Server 2003 企业版附带的一个插件的网络协议。ALG FTP 插件旨在通过这些组件使用的网络地址转换 (NAT) 引擎来支持活动的 FTP 会话。ALG FTP 插件通过以下方式来支持这些会话:将所有通过 NAT 传递的、发往端口 21 的通信重定向到环回适配器上 3000 到 5000 范围内的专用侦听端口。然后,ALG FTP 插件监视并更新 FTP 控制通道通信,使 FTP 插件可以通过 FTP 数据通道的 NAT 转发端口映射。FTP 插件还更新 FTP 控制通道流中的端口。

      系统服务名称:ALG应用协议 协议 端口
      FTP 控制 TCP 21

      ASP.NET 状态服务
      ASP.NET 状态服务支持 ASP.NET 进程外会话状态。ASP.NET 状态服务在进程外存储会话数据。此服务使用套接字与 Web 服务器上运行的 ASP.NET 通信。

      系统服务名称:aspnet_state应用协议 协议 端口
      ASP.NET 会话状态 TCP 42424

      证书服务
      证书服务是核心操作系统的一部分。使用证书服务,企业可以充当它自己的证书颁发机构 (CA)。通过这种方法,企业可以颁发和管理程序和协议(如安全/多用途 Internet 邮件扩展 (S/MIME)、安全套接字层 (SSL)、加密文件系统 (EFS)、IPSec 以及智能卡登录)的数字证书。证书服务使用高于端口 1024 的随机 TCP 端口,依赖 RPC 和 DCOM 与客户机通信。

      系统服务名称:CertSvc应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      集群服务
      “集群”服务控制服务器集群操作并管理集群数据库。集群是充当单个计算机的独立计算机的集合。管理员、程序员和用户将集群看作一个系统。此软件在集群节点之间分发数据。如果一个节点失败了,其他节点将提供原来由丢失的节点提供的服务和数据。当添加或修复了某个节点后,集群软件将一些数据迁移到此节点。

      系统服务名称:ClusSvc应用协议 协议 端口
      集群服务 UDP 3343
      随机分配的高 TCP 端口 TCP 随机端口号

      计算机浏览器
      “计算机浏览器”系统服务维护网络上的最新计算机列表,并应程序的请求提供此列表。基于 Windows 的计算机使用计算机浏览器服务来查看网络域和资源。被指定为浏览器的计算机维护浏览列表,这些列表中包含网络上使用的所有共享资源。Windows 程序的早期版本(如“网上邻居”、net view 命令以及 Windows 资源管理器)都需要浏览功能。例如,当您在一台运行 Microsoft Windows 95 的计算机上打开“网上邻居”时,就会出现域和计算机的列表。为了显示此列表,计算机从被指定为浏览器的计算机上获取浏览列表的副本。

      系统服务名称:浏览器应用协议 协议 端口
      NetBIOS 数据报服务 UDP 138
      NetBIOS 名称解析 UDP 137
      NetBIOS 名称解析 TCP 137
      NetBIOS 会话服务 TCP 139

      DHCP 服务器
      “DHCP 服务器”服务使用动态主机配置协议 (DHCP) 自动分配 IP 地址。使用此服务,可以调整 DHCP 客户机的高级网络设置。例如,可以配置诸如域名系统 (DNS) 服务器和 Windows Internet 名称服务 (WINS) 服务器之类的网络设置。可以建立一个或更多的 DHCP 服务器来维护 TCP/IP 配置信息并向客户计算机提供此信息。

      系统服务名称:DHCPServer应用协议 协议 端口
      DHCP 服务器 UDP 67
      MADCAP UDP 2535

      分布式文件系统
      “分布式文件系统 (DFS)”服务管理分布在局域网 (LAN) 或广域网 (WAN) 上的逻辑卷,它对 Microsoft Active Directory 目录服务 SYSVOL 共享是必需的。DFS 是将不同的文件共享集成为一个逻辑命名空间的分布式服务。

      系统服务名称:Dfs应用协议 协议 端口
      NetBIOS 数据报服务 UDP 138
      NetBIOS 会话服务 TCP 139
      LDAP 服务器 TCP 389
      LDAP 服务器 UDP 389
      SMB TCP 445
      SMB UDP 445
      随机分配的高 TCP 端口 TCP 随机端口号

      分布式链接跟踪服务器
      “分布式链接跟踪服务器”系统服务存储信息,使得在卷之间移动的文件可以跟踪到域中的每个卷。“分布式链接跟踪服务器”服务运行在一个域中的所有域控制器上。此服务使“分布式链接跟踪服务器客户机”服务能够跟踪已移动到同一个域中另一个 NTFS 文件系统中某个位置的链接文档。

      系统服务名称:TrkSvr应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      分布式事务处理协调器
      “分布式事务处理协调器 (DTC)”系统服务负责协调跨计算机系统和资源管理器分布的事务,如数据库、消息队列、文件系统和其他事务保护资源管理器。通过 COM+ 配置事务组件时需要 DTC 系统服务。跨多个系统的消息队列(也称为 MSMQ)和 SQL Server 操作中的事务队列也需要 DTC 系统服务。

      系统服务名称:MSDTC应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      DNS 服务器
      “DNS 服务器”服务通过应答有关 DNS 名称的查询和更新请求来启用 DNS 名称解析。查找使用 DNS 标识的设备和服务以及在 Active Directory 中查找域控制器都需要 DNS 服务器。

      系统服务名称:DNS应用协议 协议 端口
      DNS UDP 53
      DNS UDP 53

      事件日志
      “事件日志”系统服务记录由程序和 Windows 操作系统生成的事件消息。事件日志报告中包含对诊断问题有用的信息。在事件查看器中查看报告。事件日志服务将程序、服务以及操作系统发送的事件写入日志文件。这些事件中不仅包含特定于源程序、服务或组件的错误,还包含诊断信息。可以通过事件日志 API 以编程方式查看日志,也可以通过 MMC 管理单元中的事件查看器查看日志。

      系统服务名称:Eventlog应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      Exchange Server
      Microsoft Exchange Server 包括几个系统服务。当 MAPI 客户机(如 Microsoft Outlook)连接到 Exchange 服务器时,客户机先连接到 TCP 端口 135 上的 RPC 终结点映射器(RPC 定位器服务)。RPC 终结点映射器告诉客户机使用哪些端口连接到 Exchange Server 服务。这些端口是动态分配的。Microsoft Exchange Server 5.5 使用两个端口:一个用于信息存储,一个用于目录。Microsoft Exchange 2000 Server 和 Microsoft Exchange Server 2003 使用三个端口:一个用于信息存储,两个用于系统助理。通过使用 RPC over HTTP,还可以使用 Microsoft Office Outlook 2003 连接到运行 Exchange Server 2003 的服务器。Exchange Server 还支持其他协议,如 SMTP、邮局协议 3 (POP3) 以及 IMAP。

      应用协议 协议 端口
      IMAP TCP 143
      IMAP over SSL TCP 993
      POP3 TCP 110
      POP3 over SSL TCP 995
      随机分配的高 TCP 端口 TCP 随机端口号
      RPC TCP 135
      RPC over HTTP TCP 593
      SMTP TCP 25
      SMTP UDP 25

      传真服务
      传真服务是一个与电话服务 API (TAPI) 兼容的系统服务,它提供传真功能。使用传真服务,用户可以使用本地传真设备或共享的网络传真设备,从他们的桌面程序发送和接收传真。

      系统服务名称:传真应用协议 协议 端口
      NetBIOS 会话服务 TCP 139 随机分配的高 TCP 端口 TCP 随机端口号
      SMB TCP 445
      SMB UDP 445

      文件复制
      文件复制服务 (FRS) 允许同时在许多服务器上自动复制和维护文件。FRS 是 Windows 2000 和 Windows Server 2003 中的自动文件复制服务,其功能是将 SYSVOL 共享复制到所有的域控制器。此外,还可以将 FRS 配置为在与容错 DFS 关联的备用目标之间复制文件。

      系统服务名称:NtFrs应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      Macintosh 文件服务器
      使用“Macintosh 文件服务器”系统服务,Macintosh 计算机用户可以在运行 Windows Server 2003 的计算机上存储和访问文件。如果此服务被关闭或被禁止,Macintosh 客户机将无法在此计算机上访问或存储文件。

      系统服务名称:MacFile应用协议 协议 端口
      Macintosh 文件服务器 TCP 548

      FTP 发布服务
      FTP 发布服务提供 FTP 连接。默认情况下,FTP 控制端口为 21。不过,通过“Internet 信息服务 (IIS) 管理器”管理单元可以配置此系统服务。默认数据端口(即主动模式 FTP 使用的端口)自动设置为比控制端口低一个端口。因此,如果将控制端口配置为端口 4131,则默认数据端口为端口 4130。大多数 FTP 客户机都使用被动模式 FTP。这表示客户机最初使用控制端口连接到 FTP 服务器,FTP 服务器分配一个介于 1025 和 5000 之间的高 TCP 端口,然后客户机打开另一个 FTP 服务器连接以传递数据。可以使用 IIS 元数据库配置高端口的范围。

      系统服务名称:MSFTPSVC应用协议 协议 端口
      FTP 控制 TCP 21
      FTP 默认数据 TCP 20
      随机分配的高 TCP 端口 TCP 随机端口号

      HTTP SSL
      HTTP SSL 系统服务使 IIS 能够执行 SSL 功能。SSL 是一个开放式标准,用于建立加密的通信通道以帮助防止拦截重要信息(如信用卡号码)。尽管此服务旨在处理其他 Internet 服务,但它主要用于启用万维网 (WWW) 上的加密电子金融交易。通过“Internet 信息服务 (IIS) 管理器”管理单元可以配置用于此服务的端口。

      系统服务名称:HTTPFilter应用协议 协议 端口
      HTTPS TCP 443

      Internet 身份验证服务
      Internet 验证服务 (IAS) 对正在连接到网络的用户执行集中式身份验证、授权、审核以及计帐。这些用户可以在 LAN 连接上,也可以在远程连接上。IAS 实现 Internet 工程任务组 (IETF) 标准远程身份验证拨入用户服务 (RADIUS) 协议。

      系统服务名称:IAS应用协议 协议 端口
      旧式 RADIUS UDP 1645
      旧式 RADIUS UDP 1646
      RADIUS 计帐 UDP 1813
      RADIUS 身份验证 UDP 1812

      Internet 连接防火墙 (ICF)/Internet 连接共享 (ICS)
      此系统服务为家庭网络或小型办公室网络上的所有计算机提供 NAT、寻址以及名称解析服务。当启用 Internet 连接共享功能时,您的计算机就变成网络上的“Internet 网关”,然后其他客户计算机可以共享一个 Internet 连接,如拨号连接或宽带连接。此服务提供基本的 DHCP 服务和 DNS 服务,但它也适用于功能完备的 Windows DHCP 服务或 DNS 服务。当 ICF 和 Internet 连接共享充当网络上其他计算机的网关时,它们在内部网络接口上为专用网络提供 DHCP 服务和 DNS 服务。它们不在面向外部的接口上提供这些服务。

      系统服务名称:SharedAccess应用协议 协议 端口
      DHCP 服务器 UDP 67
      DNS UDP 53
      DNS TCP 53

      IPSec 服务
      IPSec 服务有助于在 TCP/IP 网络上的客户机和服务器之间提供端到端安全性。IPSec 服务管理 Internet 协议安全 (IPSec) 策略、启动 Internet 密钥交换 (IKE) 以及协调 IPSec 策略设置与 IP 安全驱动程序。使用 net start 或 net stop 策略代理命令可以控制此服务。

      系统服务名称:PolicyAgent应用协议 协议 端口
      IPSec ISAKMP 500

      Kerberos 密钥分发中心
      当您使用 Kerberos 密钥分发中心 (KDC) 系统服务时,用户可以使用 Kerberos 版本 5 身份验证协议登录到网络。与在 Kerberos 协议的其他实现中一样,KDC 是一个提供两个服务的进程:身份验证服务和票证授予服务。身份验证服务颁发票证授予票证,票证授予服务颁发用于连接到自己的域中的计算机的票证。

      系统服务名称:kdc应用协议 协议 端口
      Kerberos TCP 88
      Kerberos UDP 88

      许可证记录
      “许可证记录”系统服务是一个工具,当初设计它是为了帮助用户管理服务器客户机访问许可证 (CAL) 模型中授权的 Microsoft 服务器产品的许可证。许可证记录是随 Microsoft Windows NT Server 3.51 引入的。默认情况下,Windows Server 2003 中禁用许可证服务。由于原来设计上的限制以及不断发展的许可证条款,许可证记录可能无法提供关于购买的 CAL 总数相对于特定服务器上或整个企业内使用的 CAL 总数的精确视图。许可证记录报告的 CAL 可能与最终用户许可协议 (EULA) 的解释以及产品使用权限 (PUR) 冲突。Windows 操作系统的将来版本中将不包括许可证记录。Microsoft 仅建议 Microsoft Small Business Server 系列操作系统的用户在服务器上启用此服务。

      系统服务名称:LicenseService应用协议 协议 端口
      NetBIOS 数据报服务 UDP 138
      NetBIOS 会话服务 TCP 139
      SMB TCP 445
      SMB UDP 445

      本地安全机构
      “本地安全机构”系统服务提供核心操作系统安全机制。它将通过 RPC 服务分配的随机 TCP 端口用于域控制器复制。

      系统服务名称:LSASS应用协议 协议 端口
      全局编录服务器 TCP 3269
      全局编录服务器 TCP 3268
      LDAP Server TCP 389
      LDAP Server UDP 389
      LDAP SSL TCP 636
      LDAP SSL UDP 636
      随机分配的高 TCP 端口 TCP 随机端口号


      消息队列
      “消息队列”系统服务是一个消息处理结构和开发工具,用于创建 Windows 分布式消息处理程序。这些程序可以跨异构网络通信,并且可以在可能暂时无法彼此连接的计算机之间发送消息。消息队列对提供安全性、提高路由效率、支持在事务内发送消息、基于优先级的消息处理以及有保障的邮件传递都有帮助。

      系统服务名称:MSMQ应用协议 协议 端口
      MSMQ TCP 1801
      MSMQ UDP 1801
      MSMQ-DCs TCP 2101
      MSMQ-Mgmt TCP 2107
      MSMQ-Ping UDP 3527
      MSMQ-RPC TCP 2105
      MSMQ-RPC TCP 2103
      RPC TCP 135

      信使
      “信使”系统服务向用户和计算机、管理员以及 Alerter 服务发送消息或接收来自它们的消息。此服务与 Windows Messenger 无关。如果禁用信使服务,发送给当前登录到网络上的计算机或用户的通知就无法收到。此外,net send 命令和 net name 命令不再起作用。

      系统服务名称:信使应用协议 协议 端口
      NetBIOS 数据报服务 UDP 138

      Microsoft Exchange MTA 堆栈
      在 Microsoft Exchange 2000 Server 和 Microsoft Exchange Server 2003 中,消息传输代理 (MTA) 常常用于在混合模式环境中基于 Exchange 2000 Server 的服务器和基于 Exchange Server 5.5 的服务器之间提供向后兼容的消息传输服务。

      系统服务名称:MSExchangeMTA应用协议 协议 端口
      X.400 TCP 102

      Microsoft Operations Manager 2000
      Microsoft Operations Manager (MOM) 2000 通过提供全面的事件管理、主动的监视和警告、报告以及趋势分析来提供企业级操作管理。安装了 MOM 2000 Service Pack 1 (SP1) 之后,MOM 2000 不再使用明文通信通道,MOM 代理和 MOM 服务器之间的所有通信都在 TCP 端口 1270 上加密。MOM 管理员控制台使用 DCOM 连接到服务器。这意味着管理网络上的 MOM 服务器的管理员必须能够访问随机高 TCP 端口。

      系统服务名称:one point应用协议 协议 端口
      MOM-Clear TCP 51515
      MOM-Encrypted TCP 1270

      Microsoft POP3 服务
      Microsoft POP3 服务提供电子邮件传输服务和检索服务。管理员可以使用此服务在邮件服务器上存储和管理电子邮件帐户。在邮件服务器上安装了 Microsoft POP3 服务后,用户就可以使用支持 POP3 协议的电子邮件客户程序(如 Microsoft Outlook)连接到邮件服务器并且可以检索电子邮件。

      系统服务名称:POP3SVC应用协议 协议 端口
      POP3 TCP 110

      MSSQLSERVER
      MSSQLSERVER 是 Microsoft SQL Server 2000 中的一个系统服务。SQL Server 提供了一个强大而全面的数据管理平台。使用服务器网络实用工具可以配置每个 SQL Server 实例所使用的端口。

      系统服务名称:MSSQLSERVER应用协议 协议 端口
      SQL over TCP TCP 1433
      SQL Probe UDP 1434

      MSSQL$UDDI
      MSSQL$UDDI 系统服务是在安装 Windows Server 2003 系列操作系统的“通用说明、发现和集成 (UDDI)”功能期间安装的。MSSQL$UDDI 在企业中提供 UDDI 功能。SQL Server 数据库引擎是 MSSQL$UDDI 的核心组件。

      系统服务名称:MSSQLSERVER应用协议 协议 端口
      SQL over TCP TCP 1433
      SQL Probe UDP 1434

      Net Logon
      Net Logon 系统服务维护计算机和域控制器之间的安全通道,以对用户和服务进行身份验证。它将用户的凭据传递给域控制器,然后返回用户的域安全标识符和用户权限。这通常称为 pass-through 身份验证。当计算机是某个域的成员时,Net Logon 自动启动。在 Windows 2000 Server 系和 Windows Server 2003 系列中,Net Logon 发布 DNS 中的服务资源记录。Net Logon 仅在属于某个域的计算机上启用。当此服务运行时,它依赖“服务器”服务和“本地安全机构”服务来侦听传入的请求。在域成员计算机上,Net Logon 使用命名管道上的 RPC。在域控制器上,它使用命名管道上的 RPC、RPC over TCP/IP、信箱以及轻型目录访问协议 (LDAP)。

      系统服务名称:Netlogon应用协议 协议 端口
      NetBIOS 数据报服务 UDP 138
      NetBIOS 名称解析 TCP 137
      NetBIOS 名称解析 UDP 137
      NetBIOS 会话服务 TCP 139
      SMB TCP 445
      SMB UDP 445

      NetMeeting 远程桌面共享
      “NetMeeting 远程桌面共享”系统服务允许经过授权的用户使用 Windows NetMeeting,通过公司的内部网络从其他个人计算机远程访问您的 Windows 桌面。您必须在 NetMeeting 中显式启用此服务。您也可以在 Windows 通知区域中使用一个图标来禁用或关闭此功能。

      系统服务名称:mnmsrvc应用协议 协议 端口
      终端服务 TCP 3389

      网络新闻传输协议 (NNTP)
      “网络新闻传输协议 (NNTP)”系统服务允许运行 Windows Server 2003 的计算机用作新闻服务器。客户端可以使用新闻客户程序(如 Microsoft Outlook Express)从服务器检索新闻组,并阅读各个新闻组中的文章标题或正文。

      系统服务名称:NNTPSVC应用协议 协议 端口
      NNTP TCP 119
      NNTP over SSL TCP 563

      性能日志和警报
      “性能日志和警报”系统服务根据预先配置的日程表参数,从本地或远程计算机搜集性能数据,然后将这些数据写入日志或触发消息。根据指定日志集合设置中包含的信息,“性能日志和警报”服务启动和停止每个指定的性能数据集合。仅当安排了至少一个性能数据集合时,此服务才运行。

      系统服务名称:SysmonLog应用协议 协议 端口
      NetBIOS 会话服务 TCP 139

      后台打印程序
      “后台打印程序”系统服务管理所有的本地和网络打印队列,并控制所有打印作业。后台打印程序是 Windows 打印子系统的中心。它管理系统上的打印队列,并与打印机驱动程序和输入/输出 (I/O) 组件(如 USB 端口和 TCP/IP 协议套件)进行通信。

      系统服务名称:Spooler应用协议 协议 端口
      NetBIOS 会话服务 TCP 139
      SMB TCP 445
      SMB UDP 445

      远程安装
      使用“远程安装”系统服务可以在启用了预启动执行环境 (PXE) 远程启动的客户计算机上安装 Windows 2000、Windows XP 和 Windows Server 2003。启动信息协商层 (BINL) 服务(远程安装服务器 (RIS) 的主要组件)应答 PXE 客户端请求,检查 Active Directory 以进行客户端验证,然后与服务器相互传递客户端信息。当您从“添加/删除 Windows 组件”添加 RIS 组件,或者当您第一次安装操作系统时选中该组件时,就会安装 BINL 服务。

      系统服务名称:BINLSVC应用协议 协议 端口
      BINL UDP 4011

      远程过程调用 (RPC)
      “远程过程调用 (RPC)”系统服务是一种进程间通信 (IPC) 机制,它启用驻留在另一个进程中的数据交换和功能调用。不同的进程可以位于同一台计算机上、LAN 上或位于远程位置,并且可以通过 WAN 连接或 VPN 连接进行访问。RPC 服务充当 RPC 终结点映射器和组件对象模型 (COM) 服务控制管理器。许多服务的成功启动都依赖于 RPC 服务。

      系统服务名称:RpcSs应用协议 协议 端口
      RPC TCP 135
      RPC over HTTP TCP 593

      远程过程调用 (RPC) 定位器
      “远程过程调用 (RPC) 定位器”系统服务管理 RPC 名称服务数据库。此服务打开后,RPC 客户端可以定位 RPC 服务器。默认情况下此服务处于关闭状态。

      系统服务名称:RpcLocator应用协议 协议 端口
      NetBIOS 会话服务 TCP 139
      SMB TCP 445
      SMB UDP 445

      远程存储通知
      “远程存储通知”系统服务在用户读取或写入仅从辅助存储介质可用的文件时通知他们。停止此服务后将禁止此通知。

      系统服务名称:Remote_Storage_User_Link应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      远程存储服务器
      “远程存储服务器”系统服务将不经常使用的文件存储到辅助存储介质上。如果停止了此服务,用户将无法从辅助存储介质移动或检索文件。

      系统服务名称:Remote_Storage_Server应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      路由和远程访问
      “路由和远程访问”系统服务提供多协议 LAN 到 LAN、LAN 到 WAN、VPN 和 NAT 路由服务。此外,路由和远程访问还提供拨号和 VPN 远程访问服务。虽然路由和远程访问可以使用下面列出的所有协议,但它通常仅使用这些协议的一部分。例如,配置位于筛选路由器后面的 VPN 网关时使用的通常只是一种技术。如果在 IPSec 中使用第 2 层隧道协议 (L2TP),则必须允许 IPSec 增强型串行端口 (ESP)(IP 协议 50)、NAT-T(端口 4500 上的 TCP)和 IPSec Internet 安全关联和密钥管理协议 (ISAKMP)(端口 500 上的 TCP)通过路由器。有关其他信息,请参见本文中的“参考”部分。

      系统服务名称:RemoteAccess应用协议 协议 端口
      GRE(IP 协议 47) GRE 无
      IPSec AH(IP 协议 51) AH 无
      IPSec ESP(IP 协议 50) ESP 无
      L2TP UDP 1701
      NAT-T UDP 4500
      PPTP TCP 1723

      服务器
      “服务器”系统服务提供 RPC 支持和文件、打印以及通过网络的命名管道共享。服务器服务允许共享本地资源(如磁盘和打印机)以使网络上的其他用户可以访问这些资源。它还允许本地计算机和其他计算机上运行的程序之间的命名管道通信。命名管道通信是为一个进程的输出将要用作另一个进程的输入而保留的内存。接受输入的进程不必非在本地计算机上。

      系统服务名称:lanmanserver应用协议 协议 端口
      NetBIOS 数据报服务 UDP 138
      NetBIOS 名称解析 TCP 137
      NetBIOS 名称解析 UDP 137
      NetBIOS 会话服务 TCP 139
      SMB TCP 445
      SMB UDP 445

      SharePoint Portal Server
      使用 SharePoint Portal Server 系统服务,可以开发一个智能门户,它将用户、团队和知识紧密地联系起来,使人们能够在不同的业务流程之间利用相关的信息。Microsoft SharePoint Portal Server 2003 提供了一个企业业务解决方案,该方案通过单次登录和企业应用集成功能,将来自不同系统的信息集成到一个解决方案中。

      应用协议 协议 端口
      HTTP TCP 80
      HTTPS TCP 443

      简单邮件传输协议 (SMTP)
      简单邮件传输协议 (SMTP) 系统服务是电子邮件提交和中继代理。它接受发往远程目标的电子邮件并将它们排队,并以指定的时间间隔进行检索。Windows 域控制器将 SMTP 服务用于站点间基于电子邮件的复制。Windows Server 2003 COM 组件的协作数据对象 (CDO) 可以使用 SMTP 服务提交出站电子邮件并将它们排队。

      系统服务名称:SMTPSVC应用协议 协议 端口
      SMTP TCP 25
      SMTP UDP 25

      简单 TCP/IP 服务
      简单 TCP/IP 服务实现了对以下协议的支持:
      Echo,端口 7,RFC 862
      Discard,端口 9,RFC 863
      Character Generator,端口 19,RFC 864
      Daytime,端口 13,RFC 867
      Quote of the Day,端口 17,RFC 865
      系统服务名称:SimpTcp应用协议 协议 端口
      Chargen TCP 19
      Chargen UDP 19
      Daytime TCP 13
      Daytime UDP 13
      Discard TCP 9
      Discard UDP 9
      Echo TCP 7
      Echo UDP 7
      Quotd TCP 17
      Quoted UDP 17
      SMS 远程控制代理
      SMS 远程控制代理是 Microsoft Systems Management Server (SMS) 2003 中的一项系统服务。SMS 远程控制代理为 Microsoft 操作系统的更改和配置管理提供了一个全面的解决方案。使用该解决方案,组织可以为用户提供相关的软件和更新程序。

      系统服务名称:Wuser32应用协议 协议 端口
      SMS 远程聊天 TCP 2703
      SMS 远程聊天 UDP 2703
      SMS 远程控制(控件) TCP 2701
      SMS 远程控制(控件) UDP 2701
      SMS 远程控制(数据) TCP 2702
      SMS 远程控制(数据) UDP 2702
      SMS 远程文件传输 TCP 2704
      SMS 远程文件传输 UDP 2704

      SNMP 服务
      SNMP 服务允许本地计算机处理传入的简单网络管理协议 (SNMP) 请求。SNMP 服务中包含监视网络设备活动并向网络控制台工作站报告的代理。SNMP 服务提供了从位于中央位置并且运行网络管理软件的计算机(如工作站或服务器计算机、路由器、网桥和集线器)管理网络主机的方法。SNMP 使用分布式管理系统和代理结构来执行管理服务。

      系统服务名称:SNMP应用协议 协议 端口
      SNMP UDP 161

      SNMP 陷阱服务
      SNMP 陷阱服务接收由本地或远程 SNMP 代理生成的陷阱消息,然后将这些消息转发给您的计算机上运行的 SNMP 管理程序。为代理配置了 SNMP 陷阱服务后,如果发生任何特定的事件,都将生成陷阱消息。这些消息被发送到陷阱目标。例如,可以将代理配置为在无法识别的管理系统发送信息请求时启动身份验证陷阱。陷阱目标包括管理系统的计算机名、IP 地址或 Internet 数据包交换 (IPX) 地址。陷阱目标必须是启用网络并且运行 SNMP 管理软件的主机。

      系统服务名称:SNMPTRAP应用协议 协议 端口
      SNMP 陷阱出站 UDP 162

      SQL 分析服器
      使用“SQL 分析服务器”系统服务可以创建和管理联机分析处理 (OLAP) 多维数据集和数据挖掘模型。SQL 分析服务器可以出于创建和存储多维数据集或数据挖掘模型的目的,访问本地或远程数据源。

      应用协议 协议 端口
      SQL 分析服务 TCP 2725

      SQL Server:下层 OLAP 客户端支持
      当 SQL 分析服务器服务必须支持来自早期版本 (OLAP Services 7.0) 客户端的连接时,使用此系统服务。

      应用协议 协议 端口
      OLAP Services 7.0 TCP 2393
      OLAP Services 7.0 TCP 2394

      SSDP 发现服务
      SSDP 发现服务将“简单服务发现协议 (SSDP)”实现为 Windows 服务。SSDP 发现服务管理设备存在通知回执,更新其缓存,并将这些通知连同未决的搜索请求一起传递给客户端。SSDP 发现服务还接受来自客户端的事件回调注册,将它们转变为订阅请求,并监视事件通知。然后将这些请求传递给已注册的回调。该系统服务还为宿主设备提供定期通知。当前,SSDP 事件通知服务使用 TCP 端口 5000。从下一个 Windows XP Service Pack 开始,该服务将依赖 TCP 端口 2869。

      注意:在撰写本文时,当前的 Windows XP Service Pack 级别为 Windows XP Service Pack 1 (SP1)。

      系统服务名称:SSDPRSR应用协议 协议 端口
      SSDP UDP 1900
      SSDP 事件通知 TCP 2869
      SSDP 旧事件通知 TCP 5000

      Systems Management Server 2.0
      Microsoft Systems Management Server (SMS) 2003 为 Microsoft 操作系统的更改和配置管理提供了一个全面的解决方案。使用此解决方案,组织可以快速经济地为用户提供相关的软件和更新程序。

      应用协议 协议 端口
      NetBIOS 数据报服务 UDP 138
      NetBIOS 名称解析 TCP 137
      NetBIOS 名称解析 UDP 137
      NetBIOS 会话服务 TCP 139
      随机分配的高 TCP 端口 TCP 随机端口号

      TCP/IP 打印服务器
      “TCP/IP 打印服务器”系统服务使用“行式打印机后台程序 (LPD)”协议来启用基于 TCP/IP 的打印操作。服务器上的 LPD 服务从运行于 UNIX 计算机上的“远程行式打印机 (LPR)”实用工具接收文档。

      系统服务名称:LPDSVC应用协议 协议 端口
      LPD TCP 515

      Telnet
      用于 Windows 的 Telnet 系统服务为 Telnet 客户端提供 ASCII 终端会话。Telnet 服务器支持两种类型的身份验证,并支持以下四种类型的终端:
      美国国家标准协会 (ANSI)
      VT-100
      VT-52
      VTNT

      系统服务名称:TlntSvr应用协议 协议 端口
      Telnet TCP 23

      终端服务
      终端服务提供了一个多会话环境,允许客户端设备访问虚拟 Windows 桌面会话和服务器上运行的基于 Windows 的程序。终端服务允许多个用户以交互方式连接到一台计算机。

      系统服务名称:TermService应用协议 协议 端口
      终端服务 TCP 3389

      终端服务授权
      “终端服务授权”系统服务安装许可证服务器,并在已注册的客户端连接到终端服务器(启用“终端服务器”的服务器)时为这些客户端提供许可证。终端服务授权是一种低影响服务,它存储已颁发给终端服务器的客户端许可证,然后跟踪已颁发给客户计算机或终端的许可证。

      系统服务名称:TermServLicensing应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      终端服务会话目录
      “终端服务会话目录”系统服务允许负载平衡终端服务器集群将用户的连接请求正确地路由到用户已在其上运行会话的服务器。不论用户是否正在服务器集群中运行另一个会话,用户都被路由到第一个可用的终端服务器。负载平衡功能使用 TCP/IP 网络协议集中多个服务器的处理资源。在终端服务器集群中,可以使用此服务在多个服务器之间分配会话,以提高单个终端服务器的性能。终端服务会话目录跟踪集群上断开连接的会话,并确保用户重新连接到那些会话。

      系统服务名称:Tssdis应用协议 协议 端口
      随机分配的高 TCP 端口 TCP 随机端口号

      普通 FTP 后台程序
      “普通 FTP 后台程序”系统服务是 RIS 不可缺少的一部分,不需要用户名和密码。普通 FTP 后台程序服务实现了“普通 FTP 协议 (TFTP)”支持,后者由以下 RFC 定义:
      RFC 1350 - TFTP
      RFC 2347 - 选项扩展
      RFC 2348 - 块大小选项
      RFC 2349 - 超时间隔和传输大小选项

      TFTP 是一种文件传输协议,旨在支持无盘引导环境。TFTP 后台驻留程序侦听 UDP 端口 69,但从随机分配的高端口进行响应。因此,启用此端口后,TFTP 服务可以接收传入的 TFTP 请求,但所选服务器并不能响应这些请求。必须将所选服务器配置为从端口 69 进行响应,它才能响应入站 TFTP 请求。

      系统服务名称:tftpd应用协议 协议 端口
      TFTP UDP 69

      通用即插即用设备主机
      “通用即插即用主机发现”系统服务实现了设备注册、控制和响应宿主设备事件所需的全部组件。与设备相关的注册信息(说明、有效期和容器)可以选择存储在磁盘上,并在注册后或者在操作系统重新启动时在网络上公布。此服务除了包括服务说明和演示页外,还包括为设备提供服务的 Web 服务器。

      系统服务名称:UPNPHost应用协议 协议 端口
      UPNP TCP 2869

      Windows Internet 名称服务 (WINS)
      Windows Internet 名称服务 (WINS) 启用 NetBIOS 名称解析。此服务使用 NetBIOS 名称帮助您定位网络资源。除非已将所有域都升级到 Active Directory 目录服务并且网络上的所有计算机都运行 Windows 2000 或更高版本,否则需要 WINS 服务器。WINS 服务器使用 NetBIOS 名称解析与网络客户端通信。仅在 WINS 服务器之间才需要 WINS 复制。

      系统服务名称:WINS应用协议 协议 端口
      NetBIOS 名称解析 TCP 137
      NetBIOS 名称解析 UDP 137
      WINS 复制 TCP 42
      WINS 复制 UDP 42

      Windows 媒体服务
      Windows Server 2003 中的 Windows 媒体服务取代了 Windows 媒体服务 4.0 版和 4.1 版中包含的以下四项服务:
      Windows 媒体监视服务
      Windows 媒体节目服务
      Windows 媒体广播站服务
      Windows 媒体单播服务

      Windows 媒体服务现在是单个服务,运行于 Windows Server 2003 标准版、Windows Server 2003 企业版和 Windows Server 2003 数据中心版上。其核心组件是使用 COM 开发的,它具有灵活的结构,可以根据具体的节目自定义。它支持各种控制协议,包括实时流协议 (RTSP)、Microsoft Media Server (MMS) 协议和 HTTP。

      系统服务名称:WMServer应用协议 协议 端口
      HTTP TCP 80
      MMS TCP 1755
      MMS UDP 1755
      MS Theater UDP 2460
      RTCP UDP 5005
      RTP UDP 5004
      RTSP TCP 554

      Windows Time
      Windows Time 系统服务保持网络上所有基于 Windows XP 和 Windows Server 2003 的计算机上的日期和时间同步。此服务使用网络时间协议 (NTP) 使计算机时钟同步,以便为网络验证和资源访问请求分配准确的时钟值或时间戳。NTP 的实现和时间提供程序的集成帮助 Windows Time 成为您企业的可靠、灵活的时间服务。对于没有加入域的计算机,可以配置 Windows Time 以使时间与外部时间源同步。如果关闭此服务,则本地计算机的时间设置将不能与 Windows 域中的时间服务或外部配置的时间服务同步。Windows Server 2003 使用 NTP。NTP 运行于 UDP 端口 123 上。此服务的 Windows 2000 版本使用简单网络时间协议 (SNTP)。SNTP 也运行于 UDP 端口 123 上。

      系统服务名称:W32Time应用协议 协议 端口
      NTP TCP 123
      SNTP UDP 123

      万维网发布服务
      万维网发布服务提供了注册、管理、监视向 IIS 注册的 Web 站点和程序以及为它们提供服务所需的基础结构。此系统服务包含一个进程管理器和一个配置管理器。进程管理器控制自定义应用程序和 Web 站点驻留的进程。配置管理器读取已存储的万维网发布服务的系统配置,并确保 Http.sys 被配置为将 HTTP 请求路由到相应的应用程序池或操作系统进程。通过 Internet 信息服务 (IIS) 管理器管理单元,可以对此服务所使用的端口进行配置。如果启用了管理 Web 站点,则将创建一个在 TCP 端口 8098 上使用 HTTP 通信的虚拟 Web 站点。

      系统服务名称:W3SVC应用协议 协议 端口
      HTTP TCP 80
      HTTPS TCP 443
      端口与协议


     

    展开全文
  • 100万并发连接服务器

    千次阅读 2017-03-09 17:20:29
    100万并发连接服务器笔记之准备篇 前言 测试一个非常简单服务器如何达到100万(1M=1024K连接)的并发连接,并且这些连接一旦连接上服务器,就不会断开,一直连着。  环境受限,没有服务器,刚开始都是在...

    100万并发连接服务器笔记之准备篇

    前言

    测试一个非常简单服务器如何达到100万(1M=1024K连接)的并发连接,并且这些连接一旦连接上服务器,就不会断开,一直连着。 
    环境受限,没有服务器,刚开始都是在自己的DELL笔记本上测试,凭借16G内存,和优秀的vmware workstation虚拟机配合,另外还得外借别人虚拟机使用,最终还得搭上两台2G内存的台式机(安装centos),最终才完成1M并发连接任务。

    • 测试程序也很简陋,一个C语言所写服务器程序,没有任何业务存在,收到请求后发送一些头部,不断开连接
    • 测试端程序也是使用C语言所写,发送请求,然后等待接收数据,仅此而已
    • 服务器端/测试端内存都受限(8G不够使用),要想完成1024K的目标,需要放弃一些东西,诸如业务不是那么完整
    • 一台分配10G内存Centos服务器,两台分配6G内存Centos测试端,两台2G内存Centos测试端
    • 假如热心的您可以提供丰富的服务器资源,那就再好不过了。
    • 理论上200万的并发连接(IO密集型),加上业务,40G-50G的内存大概能够保证

    说明

    以前也做过类似的工作,量不大,没记录下来,一些压力测试和调优,随着时间流逝,早已忘记。这次是从零开始,基本上所有过程都会记录,一步一步,每一步都会遇到问题,并且给出相关解决问题的方法,最终完成目标。 
    为了方便,服务器端程序和客户端测试程序,都是使用C语言,不用像JAVA一样需要预先指定内存,感觉麻烦。使用较为原始的语言来写,可以避免不必要的调优工作。这中间,可能会穿插Java代码的思考方式。

    可能需要懂点Linux,C,Java,假如您有更好的做法,或者建议,请直接告知,谢谢。

    Linux系统

    测试端和服务器端都选用较为熟悉的64位Centos 6.4,32位系统最多支持4G内存,太受限。IO密集型应用,对CPU要求不是很高。另外服务器确保安装上gcc,那就可以开工了。 
    所有端系统一旦安装完之后,默认不做任何设置。

    服务器端程序

    服务器端程序依赖libev框架,需要提前编译,然后存放到相应位置。下面是具体服务器端代码:   

    点击(此处)折叠或打开

    1. #include <arpa/inet.h>
    2. #include <stdlib.h>
    3. #include <stdio.h>
    4. #include <string.h>
    5. #include <fcntl.h>
    6. #include <errno.h>
    7. #include <err.h>
    8.   
    9. #include <unistd.h>
    10.   
    11. #include "../include/ev.h"
    12.   
    13. #define HTMLFILE_RESPONSE_HEADER \
    14.     "HTTP/1.1 200 OK\r\n" \
    15.     "Connection: keep-alive\r\n" \
    16.     "Content-Type: text/html; charset=utf-8\r\n" \
    17.     "Transfer-Encoding: chunked\r\n" \
    18.     "\r\n"
    19. #define HTMLFILE_RESPONSE_FIRST \
    20.     "
      div \ ">
    "

    点击(此处)折叠或打开

    1. static int server_port = 8000;
    2.   
    3. struct ev_loop *loop;
    4. typedef struct {
    5.     int fd;
    6.     ev_io ev_read;
    7. } client_t;
    8.   
    9. ev_io ev_accept;
    10.   
    11. static int usr_num;
    12. static void incr_usr_num() {
    13.     usr_num ++;
    14.     printf("online user %d\n", usr_num);
    15. }
    16.   
    17. static void dec_usr_num() {
    18.     usr_num --;
    19.   
    20.     printf("~online user %d\n", usr_num);
    21. }
    22.   
    23. static void free_res(struct ev_loop *loop, ev_io *ws);
    24.   
    25. int setnonblock(int fd) {
    26.     int flags = fcntl(fd, F_GETFL);
    27.     if (flags < 0)
    28.         return flags;
    29.   
    30.     flags |= O_NONBLOCK;
    31.     if (fcntl(fd, F_SETFL, flags) < 0)
    32.         return -1;
    33.   
    34.     return 0;
    35. }
    36.   
    37. static int format_message(const char *ori_message, char *target_message) {
    38.     return sprintf(target_message, "%X\r\n\r\n", ((int)strlen(ori_message) + 23), ori_message);
    39. }
    40.   
    41. static void write_ori(client_t *client, char *msg) {
    42.     if (client == NULL) {
    43.         fprintf(stderr, "the client is NULL !\n");
    44.         return;
    45.     }
    46.   
    47.     write(client->fd, msg, strlen(msg));
    48. }
    49.   
    50. static void write_body(client_t *client, char *msg) {
    51.     char body_msg[strlen(msg) + 100];
    52.     format_message(msg, body_msg);
    53.   
    54.     write_ori(client, body_msg);
    55. }
    56.   
    57. static void read_cb(struct ev_loop *loop, ev_io *w, int revents) {
    58.     client_t *client = w->data;
    59.     int r = 0;
    60.     char rbuff[1024];
    61.     if (revents & EV_READ) {
    62.         r = read(client->fd, &rbuff, 1024);
    63.     }
    64.   
    65.     if (EV_ERROR & revents) {
    66.         fprintf(stderr, "error event in read\n");
    67.         free_res(loop, w);
    68.         return ;
    69.     }
    70.   
    71.     if (< 0) {
    72.         fprintf(stderr, "read error\n");
    73.         ev_io_stop(EV_A_ w);
    74.         free_res(loop, w);
    75.         return;
    76.     }
    77.   
    78.     if (== 0) {
    79.         fprintf(stderr, "client disconnected.\n");
    80.         ev_io_stop(EV_A_ w);
    81.         free_res(loop, w);
    82.         return;
    83.     }
    84.   
    85.     write_ori(client, HTMLFILE_RESPONSE_HEADER);
    86.   
    87.     char target_message[strlen(HTMLFILE_RESPONSE_FIRST) + 20];
    88.     sprintf(target_message, "%X\r\n%s\r\n", (int)strlen(HTMLFILE_RESPONSE_FIRST), HTMLFILE_RESPONSE_FIRST);
    89.   
    90.     write_ori(client, target_message);
    91.     incr_usr_num();
    92. }
    93.   
    94. static void accept_cb(struct ev_loop *loop, ev_io *w, int revents) {
    95.     struct sockaddr_in client_addr;
    96.     socklen_t client_len = sizeof(client_addr);
    97.     int client_fd = accept(w->fd, (struct sockaddr *) &client_addr, &client_len);
    98.     if (client_fd == -1) {
    99.         fprintf(stderr, "the client_fd is NULL !\n");
    100.         return;
    101.     }
    102.   
    103.     client_t *client = malloc(sizeof(client_t));
    104.     client->fd = client_fd;
    105.     if (setnonblock(client->fd) < 0)
    106.         err(1, "failed to set client socket to non-blocking");
    107.   
    108.     client->ev_read.data = client;
    109.   
    110.     ev_io_init(&client->ev_read, read_cb, client->fd, EV_READ);
    111.     ev_io_start(loop, &client->ev_read);
    112. }
    113.   
    114. int main(int argc, char const *argv[]) {
    115.     int ch;
    116.     while ((ch = getopt(argc, argv, "p:")) != -1) {
    117.         switch (ch) {
    118.         case 'p':
    119.             server_port = atoi(optarg);
    120.             break;
    121.         }
    122.     }
    123.   
    124.     printf("start free -m is \n");
    125.     system("free -m");
    126.     loop = ev_default_loop(0);
    127.     struct sockaddr_in listen_addr;
    128.     int reuseaddr_on = 1;
    129.     int listen_fd = socket(AF_INET, SOCK_STREAM, 0);
    130.     if (listen_fd < 0)
    131.         err(1, "listen failed");
    132.     if (setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr_on, sizeof(reuseaddr_on)) == -1)
    133.         err(1, "setsockopt failed");
    134.   
    135.     memset(&listen_addr, 0, sizeof(listen_addr));
    136.     listen_addr.sin_family = AF_INET;
    137.     listen_addr.sin_addr.s_addr = INADDR_ANY;
    138.     listen_addr.sin_port = htons(server_port);
    139.   
    140.     if (bind(listen_fd, (struct sockaddr *) &listen_addr, sizeof(listen_addr)) < 0)
    141.         err(1, "bind failed");
    142.     if (listen(listen_fd, 5) < 0)
    143.         err(1, "listen failed");
    144.     if (setnonblock(listen_fd) < 0)
    145.         err(1, "failed to set server socket to non-blocking");
    146.   
    147.     ev_io_init(&ev_accept, accept_cb, listen_fd, EV_READ);
    148.     ev_io_start(loop, &ev_accept);
    149.     ev_loop(loop, 0);
    150.   
    151.     return 0;
    152. }
    153.   
    154. static void free_res(struct ev_loop *loop, ev_io *w) {
    155.     dec_usr_num();
    156.     client_t *client = w->data;
    157.     if (client == NULL) {
    158.         fprintf(stderr, "the client is NULL !!!!!!");
    159.         return;
    160.     }
    161.   
    162.     ev_io_stop(loop, &client->ev_read);
    163.   
    164.     close(client->fd);
    165.   
    166.     free(client);
    167. }



    编译
        gcc server.c -o server ../include/libev.a -lm

    运行
        ./server -p 8000

    在源码中默认指定了8000端口,可以通过-p进行指定新的端口。 开启了8000端口进行监听请求,http协议处理类似于htmlfile chunked块编码传输。

    测试服务器端程序

    测试程序使用libevent框架,因其使用简单,提供丰富易用接口,但需要提前下载,手动安装:

    wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
    tar xvf libevent-2.0.21-stable.tar.gz
    cd libevent-2.0.21-stable
    ./configure --prefix=/usr
    make
    make install

    注意make和make install需要root用户。

    测试端程序

    client1.c 源码:

    ?

    点击(此处)折叠或打开

    1. #include <sys/types.h>
    2. #include <sys/time.h>
    3. #include <sys/queue.h>
    4. #include <stdlib.h>
    5. #include <err.h>
    6. #include <event.h>
    7. #include <evhttp.h>
    8. #include <unistd.h>
    9. #include <stdio.h>
    10. #include <sys/socket.h>
    11. #include <netinet/in.h>
    12. #include <time.h>
    13. #include <pthread.h>
    14.   
    15. #define BUFSIZE 4096
    16. #define NUMCONNS 62000
    17. #define SERVERADDR "192.168.190.133"
    18. #define SERVERPORT 8000
    19. #define SLEEP_MS 10
    20.   
    21. char buf[BUFSIZE];
    22.   
    23. int bytes_recvd = 0;
    24. int chunks_recvd = 0;
    25. int closed = 0;
    26. int connected = 0;
    27.   
    28. void chunkcb(struct evhttp_request *req, void *arg) {
    29.     int s = evbuffer_remove( req->input_buffer, &buf, BUFSIZE );
    30.     bytes_recvd += s;
    31.     chunks_recvd++;
    32.     if (connected >= NUMCONNS && chunks_recvd % 10000 == 0)
    33.         printf(">Chunks: %d\tBytes: %d\tClosed: %d\n", chunks_recvd, bytes_recvd, closed);
    34. }
    35.   
    36. void reqcb(struct evhttp_request *req, void *arg) {
    37.     closed++;
    38. }
    39.   
    40. int main(int argc, char **argv) {
    41.     event_init();
    42.     struct evhttp *evhttp_connection;
    43.     struct evhttp_request *evhttp_request;
    44.     char path[32]; // eg: "/test/123"
    45.     int i;
    46.     for (= 1; i <= NUMCONNS; i++) {
    47.         evhttp_connection = evhttp_connection_new(SERVERADDR, SERVERPORT);
    48.         evhttp_set_timeout(evhttp_connection, 864000); // 10 day timeout
    49.         evhttp_request = evhttp_request_new(reqcb, NULL);
    50.         evhttp_request->chunk_cb = chunkcb;
    51.         sprintf(&path, "/test/%d", ++connected);
    52.         if (% 100 == 0) printf("Req: %s\t->\t%s\n", SERVERADDR, &path);
    53.         evhttp_make_request( evhttp_connection, evhttp_request, EVHTTP_REQ_GET, path );
    54.         evhttp_connection_set_timeout(evhttp_request->evcon, 864000);
    55.         event_loop( EVLOOP_NONBLOCK );
    56.         if ( connected % 200 == 0 )
    57.             printf("\nChunks: %d\tBytes: %d\tClosed: %d\n", chunks_recvd, bytes_recvd, closed);
    58.         usleep(SLEEP_MS * 1000);
    59.     }
    60.   
    61.     event_dispatch();
    62.     return 0;
    63. }


    备注:这部分代码参考了A Million-user Comet Application with Mochiweb, Part 3 ,根据需要有所修改。

    编译

    gcc -o client1 client1.c -levent

    运行

    ./client1

    可能在64位系统会遇到找不到libevent-2.0.so.5情况,需要建立一个软连接

    ln -s /usr/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5

    即可自动连接IP地址为192.168.190.133:8000的服务器端应用。

    第一个遇到的问题:文件句柄受限

    测试端程序输出

    看看测试端程序client1输出的错误信息:

    Chunks: 798 Bytes: 402990 Closed: 0
    Req: 192.168.190.133 -/test/900
    Req: 192.168.190.133 -/test/1000
    Chunks: 998 Bytes: 503990 Closed: 0
    [warn] socket: Too many open files
    [warn] socket: Too many open files
    [warn] socket: Too many open files

    服务器端程序输出

    服务器端最后一条日志为

    online user 1018

    两边都遇到了文件句柄打开的情况。 
    在服务器端查看已经连接,并且端口号为8000的所有连接数量:

    netstat -nat|grep -i "8000"|wc -l 
    1019

    但与服务器端输出数量对不上,增加所有已经建立连接的选项:

    netstat -nat|grep -i "8000"|grep ESTABLISHED|wc -l 
    1018

    那么剩下的一条数据到底是什么呢?

    netstat -nat|grep -i "8000"|grep -v ESTABLISHED
    tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN

    也就是server.c监听的端口,数量上对的上。

    在测试服务器端,查看测试进程打开的文件句柄数量

    lsof -n|grep client1|wc -l
    1032

    再次执行

    ulimit -n
    1024

    也是就是client1应用程序共打开了1032个文件句柄,而不是1024,为什么? 
    把当前进程所有打开的文件句柄保存到文件中,慢慢研究 lsof -n|grep client1 > testconnfinfo.txt

    导出的文件可以参考: https://gist.github.com/yongboy/5260773
    除了第一行,我特意添加上供友善阅读的头部列定义,也就是1032行信息,但是需要注意头部:

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    client1 3088 yongboy cwd DIR 253,0 4096 800747 /home/yongboy/workspace/c_socket.io_server/test
    client1 3088 yongboy rtd DIR 253,0 4096 2 /test_conn
    client1 3088 yongboy txt REG 253,0 9697 799991 /home/yongboy/workspace/c_socket.io_server/test/test_conn_1
    client1 3088 yongboy mem REG 253,0 156872 50404 /lib64/ld-2.12.so
    client1 3088 yongboy mem REG 253,0 1922152 78887 /lib64/libc-2.12.so
    client1 3088 yongboy mem REG 253,0 145720 76555 /lib64/libpthread-2.12.so
    client1 3088 yongboy mem REG 253,0 47064 69491 /lib64/librt-2.12.so
    client1 3088 yongboy mem REG 253,0 968730 26292 /usr/lib/libevent-2.0.so.5.1.9
    client1 3088 yongboy 0u CHR 136,2 0t0 5 /dev/pts/2
    client1 3088 yongboy 1u CHR 136,2 0t0 5 /dev/pts/2
    client1 3088 yongboy 2u CHR 136,2 0t0 5 /dev/pts/2
    client1 3088 yongboy 3u REG 0,9 0 4032 anon_inode
    client1 3088 yongboy 4u unix 0xffff88007c82f3c0 0t0 79883 socket
    client1 3088 yongboy 5u unix 0xffff880037c34380 0t0 79884 socket
    client1 3088 yongboy 6u IPv4 79885 0t0 TCP 192.168.190.134:58693->192.168.190.133:irdmi (ESTABLISHED)
    client1 3088 yongboy 7u IPv4 79889 0t0 TCP 192.168.190.134:58694->192.168.190.133:irdmi (ESTABLISHED)
    client1 3088 yongboy 8u IPv4 79891 0t0 TCP 192.168.190.134:58695->192.168.190.133:irdmi (ESTABLISHED)
    client1 3088 yongboy 9u IPv4 79893 0t0 TCP 192.168.190.134:58696->192.168.190.133:irdmi (ESTABLISHED)

    可以看到文件句柄是从0u开始,0u上面的8个(5个mem + 3个启动)进程,1032 - 8 = 1024个文件句柄,这样就和系统限制的值吻合了。

    root用户编辑/etc/security/limits.conf文件添加:

    * soft nofile 1048576
    * hard nofile 1048576
    • soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错。
    • soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值
    • nofile - 打开文件的最大数目
    • 星号表示针对所有用户,若仅针对某个用户登录ID,请替换星号

    注意: 
    1024K x 1024 = 1048576K = 1M,1百万多一点。

    备注:测试端和服务器端都需要作此设置,保存退出,然后reboot即可生效。

    第一个问题,就这样克服了。再次运行 /client1测试程序,就不会出现受打开文件句柄的限制。但大概在测试端打开对外28200个端口时,会出现程序异常,直接退出。

    段错误

    这个也是程序没有处理端口不够用的异常,但可以通过增加端口进行解决。

    备注: 但测试端单机最多只能打开6万多个连接,是一个问题,如何克服,下一篇解决此问题,并且还会遇到文件句柄的受限问题。




    100万并发连接服务器笔记之处理端口数量受限问题

    第二个遇到的问题:端口数量受限

    一般来说,单独对外提供请求的服务不用考虑端口数量问题,监听某一个端口即可。但是向提供代理服务器,就不得不考虑端口数量受限问题了。当前的1M并发连接测试,也需要在客户端突破6万可用端口的限制。

    单机端口上限为65536

    端口为16进制,那么2的16次方值为65536,在linux系统里面,1024以下端口都是超级管理员用户(如root)才可以使用,普通用户只能使用大于1024的端口值。 
    系统提供了默认的端口范围:

    cat /proc/sys/net/ipv4/iplocalport_range 
    32768 61000

    大概也就是共61000-32768=28232个端口可以使用,单个IP对外只能发送28232个TCP请求。 
    以管理员身份,把端口的范围区间增到最大:

    echo "1024 65535"> /proc/sys/net/ipv4/iplocalport_range

    现在有64511个端口可用. 
    以上做法只是临时,系统下次重启,会还原。 更为稳妥的做法是修改/etc/sysctl.conf文件,增加一行内容

    net.ipv4.iplocalport_range = 1024 65535

    保存,然后使之生效:

    sysctl -p

    现在可以使用的端口达到64510个(假设系统所有运行的服务器是没有占用大于1024的端口的,较为纯净的centos系统可以做到),要想达到50万请求,还得再想办法。

    增加IP地址

    一般假设本机网卡名称为 eth0,那么手动再添加几个虚拟的IP:

    ifconfig eth0:1 192.168.190.151 
    ifconfig eth0:2 192.168.190.152 ......

    或者偷懒一些:

    for i in `seq 1 9`; do ifconfig eth0:$i 192.168.190.15$i up ; done

    这些虚拟的IP地址,一旦重启,或者 service network restart 就会丢失。

    为了模拟较为真实环境,在测试端,手动再次添加9个vmware虚拟机网卡,每一个网卡固定一个IP地址,这样省去每次重启都要重新设置的麻烦。

    192.168.190.134 
    192.168.190.143
    192.168.190.144
    192.168.190.145
    192.168.190.146
    192.168.190.147
    192.168.190.148
    192.168.190.149
    192.168.190.150
    192.168.190.151

    在server服务器端,手动添加桥接网卡和NAT方式网卡

    192.168.190.230
    192.168.190.240
    10.95.20.250

    要求测试端和服务器端彼此双方都是可以ping通。

    网络四元组/网络五元组

    四元组是指的是

    {源IP地址,源端口,目的IP地址,目的端口}

    五元组指的是(多了协议)

    {源IP地址,目的IP地址,协议号,源端口,目的端口}

    在《UNIX网络编程卷1:套接字联网API(第3版)》一书中,是这样解释:
    一个TCP连接的套接字对(socket pari)是一个定义该连接的两个端点的四元组,即本地IP地址、本地TCP端口号、外地IP地址、外地TCP端口号。套接字对唯一标识一个网络上的每个TCP连接。  

    ......  

    标识每个端点的两个值(IP地址和端口号)通常称为一个套接字。

    以下以四元组为准。在测试端四元组可以这样认为:

    {本机IP地址,本机端口,目的IP地址,目的端口}

    请求的IP地址和目的端口基本上是固定的,不会变化,那么只能从本机IP地址和本机端口上考虑,端口的范围一旦指定了,那么增加IP地址,可以增加对外发出的请求数量。假设系统可以使用的端口范围已经如上所设,那么可以使用的大致端口为64000个,系统添加了10个IP地址,那么可以对外发出的数量为 64000 * 10 = 640000,数量很可观。

    只有{源IP地址,源端口}确定对外TCP请求数量

    经测试,四元组里面,只有{源IP地址,源端口}才能够确定对外发出请求的数量,跟{目的IP地址,目的端口}无关。

    测试环境

    在server端,并且启动./server两次,分别绑定8000端口和9000端口

    ./server -p 8000
    ./server -p 9000

    本机IP、端口绑定测试程序

    这里写一个简单的测试绑定本机IP地址和指定端口的客户端测试程序。?

    点击(此处)折叠或打开

    1. #include <sys/types.h>
    2. #include <sys/time.h>
    3. #include <sys/queue.h>
    4. #include <stdlib.h>
    5. #include <err.h>
    6. #include <event.h>
    7. #include <evhttp.h>
    8. #include <unistd.h>
    9. #include <stdio.h>
    10. #include <string.h>
    11. #include <sys/socket.h>
    12. #include <netinet/in.h>
    13. #include <time.h>
    14. #include <pthread.h>
    15. #include <errno.h>
    16.   
    17. #define BUFSIZE 4096
    18. #define SLEEP_MS 10
    19.   
    20. char buf[BUFSIZE];
    21.   
    22. int bytes_recvd = 0;
    23. int chunks_recvd = 0;
    24.   
    25. void chunkcb(struct evhttp_request *req, void *arg) {
    26.     int s = evbuffer_remove( req->input_buffer, &buf, BUFSIZE );
    27.     bytes_recvd += s;
    28.     chunks_recvd++;
    29.     printf(">Chunks: %d\tBytes: %d\n", chunks_recvd, bytes_recvd);
    30. }
    31.   
    32. void reqcb(struct evhttp_request *req, void *arg) {
    33.     fprintf(stderr, ">Now closed\n");
    34.     exit(-1);
    35. }
    36.   
    37. void err_cb(int err){
    38.     fprintf(stderr, "setup failed(errno = %d): %s", errno, strerror(errno));
    39. }
    40.   
    41. int main(int argc, char **argv) {
    42.     char server_ip[16] = "";
    43.     int server_port = 0;
    44.   
    45.     char local_ip[16] = "";
    46.     int local_port = 0;
    47.   
    48.     int ch;
    49.     while ((ch = getopt(argc, argv, "h:p:c:o:")) != -1) {
    50.         switch (ch) {
    51.         case 'h':
    52.             printf("remote host is %s\n", optarg);
    53.             strncpy(server_ip, optarg, 15);
    54.             break;
    55.         case 'p':
    56.             printf("remote port is %s\n", optarg);
    57.             server_port = atoi(optarg);
    58.             break;
    59.         case 'c':
    60.             printf("local ip is %s\n", optarg);
    61.             strncpy(local_ip, optarg, 15);
    62.             break;
    63.         case 'o':
    64.             printf("local port is %s\n", optarg);
    65.             local_port = atoi(optarg);
    66.   
    67.             break;
    68.         }
    69.     }
    70.   
    71.     event_init();
    72.     event_set_fatal_callback(err_cb);
    73.     struct evhttp *evhttp_connection;
    74.     struct evhttp_request *evhttp_request;
    75.     char path[32];
    76.   
    77.     evhttp_connection = evhttp_connection_new(server_ip, server_port);
    78.     evhttp_connection_set_local_address(evhttp_connection, local_ip);
    79.     evhttp_connection_set_local_port(evhttp_connection, local_port);
    80.     evhttp_set_timeout(evhttp_connection, 864000); // 10 day timeout
    81.     evhttp_request = evhttp_request_new(reqcb, NULL);
    82.     evhttp_request->chunk_cb = chunkcb;
    83.     sprintf(&path, "/test/%d", local_port);
    84.   
    85.     evhttp_make_request( evhttp_connection, evhttp_request, EVHTTP_REQ_GET, path );
    86.     evhttp_connection_set_timeout(evhttp_request->evcon, 864000);
    87.     event_loop( EVLOOP_NONBLOCK );
    88.   
    89.     usleep(SLEEP_MS * 10);
    90.   
    91.     event_dispatch();
    92.   
    93.     return 0;
    94. }


    可以看到libevent-*/include/event2/http.h内置了对绑定本地IP地址的支持:

    /** sets the ip address from which http connections are made */
    void evhttp_connection_set_local_address(struct evhttp_connection *evcon,
    const char *address);

    不用担心端口,系统自动自动随机挑选,除非需要特别指定:

    /** sets the local port from which http connections are made */
    void evhttp_connection_set_local_port(struct evhttp_connection *evcon,
    ev_uint16_t port);

    编译

    gcc -o client3 client3.c -levent

    client3运行参数为

    • -h 远程主机IP地址
    • -p 远程主机端口
    • -c 本机指定的IP地址(必须可用)
    • -o 本机指定的端口(必须可用)

    测试用例,本机指定同样的IP地址和端口,但远程主机和IP不一样. 
    在一个测试端打开一个终端窗口1,切换到 client3对应位置

    ./client3 -h 192.168.190.230 -p 8000 -c 192.168.190.148 -o 4000

    输出为

    remote host is 192.168.190.230
    remote port is 8000
    local ip is 192.168.190.148
    local port is 4000
    >Chunks: 1 Bytes: 505

    再打开一个测试端终端窗口2,执行:

    ./client3 -h 192.168.190.240 -p 9000 -c 192.168.190.148 -o 4000

    窗口2程序,无法执行,自动退出。 
    接着在窗口2终端继续输入:

    ./client3 -h 192.168.190.230 -p 8000 -c 192.168.190.148 -o 4001

    注意,和窗口1相比,仅仅改变了端口号为4001。但执行结果,和端口1输出一模一样,在等待接收数据,没有自动退出。

    剩下的,无论怎么组合,怎么折腾,只要一对{本机IP,本机端口}被占用,也就意味着对应一个具体的文件句柄,那么其它程序将不能够再次使用。

    Java怎么绑定本地IP地址?

    java绑定就很简单,但有些限制,不够灵活,单纯从源码中看不出来,api doc可以告诉我们一些事情。 打开JDKAPI1_6zhCN.CHM,查看InetSocketAddress类的构造函数说明:

    public InetSocketAddress(InetAddress addr, int port) 
    根据 IP 地址和端口号创建套接字地址。 有效端口值介于 0 和 65535 之间。端口号 zero 允许系统在 bind 操作中挑选暂时的端口。

    null 地址将分配通配符 地址。

    参数: 
    addr - IP 地址 
    port - 端口号 
    抛出: 
    IllegalArgumentException - 如果 port 参数超出有效端口值的指定范围。

    public InetSocketAddress(String hostname, int port) 
    根据主机名和端口号创建套接字地址。 
    尝试将主机名解析为 InetAddress。如果尝试失败,则将地址标记为未解析。

    如果存在安全管理器,则将主机名用作参数调用其 checkConnect 方法,以检查解析它的权限。这可能会导致 SecurityException 异常。

    有效端口值介于 0 和 65535 之间。端口号 zero 允许系统在 bind 操作中挑选暂时的端口。

    参数: hostname - 主机名 
    port - 端口号 
    抛出: 
    IllegalArgumentException - 如果 port 参数超出有效端口值的范围,或者主机名参数为 null。 
    SecurityException - 如果存在安全管理器,但拒绝解析主机名的权限。 
    另请参见: 
    isUnresolved()

    InetSocketAddress的两个构造函数都支持,看情况使用。注意int port传递值为0,即可做到系统随机挑选端口。追踪一下源代码,发现最终调用

    private native void socketBind(InetAddress address, int port) throws IOException;

    如何查看socketBind的原始C代码,我就不清楚了,您若知晓,希望指教一下。 构造一个InetSocketAddress对象:

    SocketAddress localSocketAddr = new InetSocketAddress("192.168.190.143", 0);

    然后传递给需要位置即可。诸如使用netty连接到某个服务器上,在connect时指定远方地址,以及本机地址

    ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) Attempts a new connection with the specified remoteAddress and the specified localAddress.

    Netty 客户端连接API见: http://docs.jboss.org/netty/3.2/api/org/jboss/netty/bootstrap/ClientBootstrap.html

    Linux支持绑定本机IP、端口原理

    说是原理,有些牵强,因为linux C提供了如何绑定函数,框架或者高级语言再怎么封装,在linux平台下面,需要这么调用:

    struct sockaddr_in clnt_addr;
    ....
    clnt_addr.sin_family = AF_INET;
    clnt_addr.sin_addr.s_addr = INADDR_ANY; //绑定本机IP地址
    clnt_addr.sin_port = htons(33333); //绑定本机端口
    if (bind(sockfd, (struct sockaddr *) &clnt_addr,
    sizeof(clnt_addr)) < 0) error("ERROR on binding");
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting");
    .......

    构造一个clnt_addr结构体,本地IP或者端口赋值,在connect之前,先bind,就这么简单。

    更完整例子,可以参考 http://stackoverflow.com/questions/4852256/need-a-complete-snippet-example-of-binding-tcp-client-socket

    有关端口的更详细解释,请参考《UNIX网络编程卷1:套接字联网API(第3版)》2.9节 端口号部分。

     

    有关端口的问题,到此为止,下一篇,回到测试。



    100万并发连接服务器笔记之测试端就绪

    重新编写测试端程序

    测试端程序需要增加绑定本机IP和本地端口的功能,以尽可能的向外发出更多的tcp请求。需要对client1.c重构,增加参数传递。 下面是client2.c的代码?

    点击(此处)折叠或打开

    1. #include <sys/types.h>
    2. #include <sys/time.h>
    3. #include <sys/queue.h>
    4. #include <stdlib.h>
    5. #include <err.h>
    6. #include <event.h>
    7. #include <evhttp.h>
    8. #include <unistd.h>
    9. #include <stdio.h>
    10. #include <string.h>
    11. #include <sys/socket.h>
    12. #include <netinet/in.h>
    13. #include <time.h>
    14. #include <pthread.h>
    15.   
    16. #define BUFSIZE 4096
    17. #define SLEEP_MS 10
    18.   
    19. char buf[BUFSIZE];
    20.   
    21. int bytes_recvd = 0;
    22. int chunks_recvd = 0;
    23. int closed = 0;
    24. int connected = 0;
    25.   
    26. static char ip_array[300] = "192.168.190.134,192.168.190.143,192.168.190.144,192.168.190.145,192.168.190.146,192.168.190.147,192.168.190.148,192.168.190.149,192.168.190.151,192.168.190.152";
    27. static char server_ip[16] = "192.168.190.133";
    28. static int server_port = 8000;
    29. static int max_conns = 62000;
    30.   
    31. // called per chunk received
    32. void chunkcb(struct evhttp_request *req, void *arg) {
    33.     int s = evbuffer_remove( req->input_buffer, &buf, BUFSIZE );
    34.     bytes_recvd += s;
    35.     chunks_recvd++;
    36.     if (connected >= max_conns && chunks_recvd % 10000 == 0)
    37.         printf(">Chunks: %d\tBytes: %d\tClosed: %d\n", chunks_recvd, bytes_recvd, closed);
    38. }
    39.   
    40. // gets called when request completes
    41. void reqcb(struct evhttp_request *req, void *arg) {
    42.     closed++;
    43. }
    44.   
    45. int main(int argc, char **argv) {
    46.     int ch;
    47.     while ((ch = getopt(argc, argv, "o:h:p:m:")) != -1) {
    48.         switch (ch) {
    49.         case 'h':
    50.             printf("host is %s\n", optarg);
    51.             strncpy(server_ip, optarg, 15);
    52.             break;
    53.         case 'p':
    54.             printf("port is %s\n", optarg);
    55.             server_port = atoi(optarg);
    56.             /*strncpy(server_ip, optarg, 15);*/
    57.             break;
    58.         case 'm':
    59.             printf("max_conns is %s\n", optarg);
    60.             max_conns = atoi(optarg);
    61.             /*strncpy(server_ip, optarg, 15);*/
    62.             break;
    63.         case 'o':
    64.             printf("ori_ips is %s\n", optarg);
    65.   
    66.             strncpy(ip_array, optarg, 300 - 1);
    67.             break;
    68.         }
    69.     }
    70.   
    71.     event_init();
    72.     struct evhttp *evhttp_connection;
    73.     struct evhttp_request *evhttp_request;
    74.     char path[32];
    75.     int i;
    76.   
    77.     char delims[] = ",";
    78.     char *ori_ip = NULL;
    79.     ori_ip = strtok( ip_array, delims );
    80.     while (ori_ip != NULL) {
    81.         for (= 1; i <= max_conns; i++) {
    82.             evhttp_connection = evhttp_connection_new(server_ip, server_port);
    83.             evhttp_connection_set_local_address(evhttp_connection, ori_ip);
    84.             evhttp_set_timeout(evhttp_connection, 864000); // 10 day timeout
    85.             evhttp_request = evhttp_request_new(reqcb, NULL);
    86.             evhttp_request->chunk_cb = chunkcb;
    87.             sprintf(&path, "/test/%d", ++connected);
    88.   
    89.             if (% 1000 == 0)
    90.                 printf("Req: %s\t->\t%s\n", ori_ip, &path);
    91.   
    92.             evhttp_make_request( evhttp_connection, evhttp_request, EVHTTP_REQ_GET, path );
    93.             evhttp_connection_set_timeout(evhttp_request->evcon, 864000);
    94.             event_loop( EVLOOP_NONBLOCK );
    95.   
    96.             if ( connected % 1000 == 0 )
    97.                 printf("\nChunks: %d\tBytes: %d\tClosed: %d\n", chunks_recvd, bytes_recvd, closed);
    98.   
    99.             usleep(SLEEP_MS * 10);
    100.         }
    101.   
    102.         ori_ip = strtok( NULL, delims );
    103.     }
    104.   
    105.     event_dispatch();
    106.   
    107.     return 0;
    108. }


    若不指定端口,系统会随机挑选没有使用到的端口,可以节省些心力。

    编译:

    gcc -o client2 client2.c -levent

    参数解释

    • -h 要连接的服务器IP地址
    • -p 要连接的服务器端口
    • -m 本机IP地址需要绑定的随机端口数量
    • -o 本机所有可用的IP地址列表,注意所有IP地址都应该可用

    运行:

    ./client2 -h 192.168.190.230 -p 8000 -m 64000 -o 192.168.190.134,192.168.190.143,192.168.190.144,192.168.190.145,192.168.190.146,192.168.190.147,192.168.190.148,192.168.190.149,192.168.190.150,192.168.190.151

    太长了,每次执行都要粘贴过去,直接放在一个client2.sh文件中,执行就很简单方便多了。

    #!/bin/sh
    ./client2 -h 192.168.190.230 -p 8000 -m 64000 -o 192.168.190.134,192.168.190.143,192.168.190.144,192.168.190.145,192.168.190.146,192.168.190.147,192.168.190.148,192.168.190.149,192.168.190.150,192.168.190.151

    保存,赋值可运行:

    chmod +x client2.sh

    启动测试:

    sh client2.sh

    第三个遇到的问题:fs.file-max的问题

    测试端程序client2.c在发出的数量大于某个值(大概为40万时)是,通过dmesg命令查看会得到大量警告信息:

    [warn] socket: Too many open files in system

    此时,就需要检查/proc/sys/fs/file-max参数了。

    查看一下系统对fs.file-max的说明

    /proc/sys/fs/file-max
    This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be used by a process to set the per-process limit,
    RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages about running out of file handles, try increasing this value:
    echo 100000 > /proc/sys/fs/file-max
    The kernel constant NR_OPEN imposes an upper limit on the value that may be placed in file-max.
    If you increase /proc/sys/fs/file-max, be sure to increase /proc/sys/fs/inode-max to 3-4 times the new value of /proc/sys/fs/file-max, or you will run out of inodes.

    file-max表示系统所有进程最多允许同时打开所有的文件句柄数,系统级硬限制。Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不用修改,除非打开的文件句柄数超过此值。

    在为测试机分配4G内存时,对应的fs.file-max值为386562,很显然打开的文件句柄很受限,38万个左右。 很显然,无论是测试端还是服务端,都应该将此值调大些,一定要大于等于/etc/security/limits.conf送所设置的soft nofile和soft nofile值。 
    注意ulimit -n,仅仅设置当前shell以及由它启动的进程的资源限制。

    备注:以上参数,具有包含和被包含的关系。

    当前会话修改,可以这么做:

    echo 1048576 > /proc/sys/fs/file-max

    但系统重启后消失。

    永久修改,要添加到 /etc/sysctl.conf 文件中:

    fs.file-max = 1048576

    保存并使之生效:

    sysctl -p

    再测,就不会出现此问题了。

    一台6G内存机器测试机,分配7个网卡,可以做到不占用虚拟内存,对外发出64000 * 7 = 448000个对外持久请求。要完成100万的持久连接,还得再想办法。

    最终测试端组成如下:

    • 两台物理机器各自一个网卡,每个发出64000个请求
    • 两个6G左右的centos测试端机器(绑定7个桥接或NAT连接)各自发出64000*7 = 448000请求
    • 共使用了16个网卡(物理网卡+虚拟网卡)
    • 1M ≈ 1024K ≈ 1024000 = (64000) + (64000) + (64000*7) + (64000*7)
    • 共耗费16G内存,16个网卡(物理+虚拟),四台测试机

    备注: 
    下面就要完成1M持久连接的目标,但在服务端还会遇到最后一个问题。



    100万并发连接服务器笔记之1M并发连接目标达成

    第四个遇到的问题:tcp_mem

    在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来。 通过查看dmesg命令查看,发现大量TCP: too many of orphaned sockets错误,也很正常,下面到了需要调整tcp socket参数的时候了。

    第一个需要调整的是tcp_rmem,即TCP读取缓冲区,单位为字节,查看默认值

    cat /proc/sys/net/ipv4/tcp_rmem
    4096 87380 4161536

    默认值为87380bit ≈ 86K,最小为4096bit=4K,最大值为4064K。

    第二个需要调整的是tcp_wmem,发送缓冲区,单位是字节,默认值

    cat /proc/sys/net/ipv4/tcp_wmem
    4096 16384 4161536

    解释同上

    第三个需要调整的tcp_mem,调整TCP的内存大小,其单位是页,1页等于4096字节。系统默认值:

    cat /proc/sys/net/ipv4/tcp_mem
    932448 1243264 1864896

    tcp_mem(3个INTEGER变量):low, pressure, high

    • low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
    • pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
    • high:允许所有tcp sockets用于排队缓冲数据报的页面量,当内存占用超过此值,系统拒绝分配socket,后台日志输出“TCP: too many of orphaned sockets”。

    一般情况下这些值是在系统启动时根据系统内存数量计算得到的。 根据当前tcp_mem最大内存页面数是1864896,当内存为(1864896*4)/1024K=7284.75M时,系统将无法为新的socket连接分配内存,即TCP连接将被拒绝。

    实际测试环境中,据观察大概在99万个连接左右的时候(零头不算),进程被杀死,触发out of socket memory错误(dmesg命令查看获得)。每一个连接大致占用7.5K内存(下面给出计算方式),大致可算的此时内存占用情况(990000 * 7.5 / 1024K = 7251M)。

    这样和tcp_mem最大页面值数量比较吻合,因此此值也需要修改。

    三个TCP调整语句为:

    echo "net.ipv4.tcp_mem = 786432 2097152 3145728">> /etc/sysctl.conf
    echo "net.ipv4.tcp_rmem = 4096 4096 16777216">> /etc/sysctl.conf
    echo "net.ipv4.tcp_wmem = 4096 4096 16777216">> /etc/sysctl.conf

    备注: 为了节省内存,设置tcp读、写缓冲区都为4K大小,tcp_mem三个值分别为3G 8G 16G,tcp_rmem和tcp_wmem最大值也是16G。

    目标达成

    经过若干次的尝试,最终达到目标,1024000个持久连接。1024000数字是怎么得来的呢,两台物理机器各自发出64000个请求,两个配置为6G左右的centos测试端机器(绑定7个桥接或NAT连接)各自发出640007 = 448000。也就是 1024000 = (64000) + (64000) + (640007) + (64000*7), 共使用了16个网卡(物理网卡+虚拟网卡)。 
    终端输出

    ......
    online user 1023990
    online user 1023991
    online user 1023992
    online user 1023993
    online user 1023994
    online user 1023995
    online user 1023996
    online user 1023997
    online user 1023998
    online user 1023999
    online user 1024000

    在线用户目标达到1024000个!

    服务器状态信息

    服务启动时内存占用:

                     total       used       free     shared    buffers     cached
         Mem:         10442        271      10171          0         22         78
         -/+ buffers/cache:        171      10271
         Swap:         8127          0       8127

    系统达到1024000个连接后的内存情况(执行三次 free -m 命令,获取三次结果):

                     total       used       free     shared    buffers     cached
         Mem:         10442       7781       2661          0         22         78
         -/+ buffers/cache:       7680       2762
         Swap:         8127          0       8127
     
                      total       used       free     shared    buffers     cached
         Mem:         10442       7793       2649          0         22         78
         -/+ buffers/cache:       7692       2750
         Swap:         8127          0       8127
     
                      total       used       free     shared    buffers     cached
         Mem:         10442       7804       2638          0         22         79
         -/+ buffers/cache:       7702       2740
         Swap:         8127          0       8127
    这三次内存使用分别是7680,7692,7702,这次不取平均值,取一个中等偏上的值,定为7701M。那么程序接收1024000个连接,共消耗了 7701M-171M = 7530M内存, 7530M*1024K / 1024000 = 7.53K, 每一个连接消耗内存在为7.5K左右,这和在连接达到512000时所计算较为吻合。 

    虚拟机运行Centos内存占用,不太稳定,但一般相差不大,以上数值,仅供参考。

    执行top -p 某刻输出信息:

       top - 17:23:17 up 18 min,  4 users,  load average: 0.33, 0.12, 0.11
         Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
         Cpu(s):  0.2%us,  6.3%sy,  0.0%ni, 80.2%id,  0.0%wa,  4.5%hi,  8.8%si,  0.0%st
         Mem:  10693580k total,  6479980k used,  4213600k free,    22916k buffers
         Swap:  8323056k total,        0k used,  8323056k free,    80360k cached
     
           PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                      
          2924 yongboy   20   0 82776  74m  508 R 51.3  0.7   3:53.95 server 
    

    执行vmstate:

    vmstat
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
     r b swpd free buff cache si so bi bo in cs us sy id wa st
     0 0 0 2725572 23008 80360 0 0 21 2 1012 894 0 9 89 2 0

    获取当前socket连接状态统计信息:

    cat /proc/net/sockstat
    sockets: used 1024380
    TCP: inuse 1024009 orphan 0 tw 0 alloc 1024014 mem 2
    UDP: inuse 11 mem 1
    UDPLITE: inuse 0
    RAW: inuse 0
    FRAG: inuse 0 memory 0

    获取当前系统打开的文件句柄:

    sysctl -a | grep file
    fs.file-nr = 1025216 0 1048576
    fs.file-max = 1048576

    此时任何类似于下面查询操作都是一个慢,等待若干时间还不见得执行完毕。

    netstat -nat|grep -i "8000"|grep ESTABLISHED|wc -l 
    netstat -n | grep -i "8000" | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    以上两个命令在二三十分钟过去了,还未执行完毕,只好停止。

    小结

    本次从头到尾的测试,所需要有的linux系统需要调整的参数也就是那么几个,汇总一下:

         echo "yongboy soft nofile 1048576" >> /etc/security/limits.conf 
        echo "yongboy hard nofile 1048576" >>  /etc/security/limits.conf
     
         echo "fs.file-max = 1048576" >> /etc/sysctl.conf
         echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
     
         echo "net.ipv4.tcp_mem = 786432 2097152 3145728" >> /etc/sysctl.conf
         echo "net.ipv4.tcp_rmem = 4096 4096 16777216" >> /etc/sysctl.conf
         echo "net.ipv4.tcp_wmem = 4096 4096 16777216" >> /etc/sysctl.conf
    

    其它没有调整的参数,仅仅因为它们暂时对本次测试没有带来什么影响,实际环境中需要结合需要调整类似于SO_KEEPALIVE、tcpmax_orphans等大量参数。

    本文代表一次实践,不足之处,欢迎批评指正。

    展开全文
  • t nat -A POSTROUTING -s 172.16.10.0/24 -j SNAT --to-source 192.168.6.146 #在PREROUTING链上,对来自外网192.168.6.0/24的ip主机对PC2发起的ssh连接请求进行连接跳转,跳转到内网ip:172.16.10.1对应22号端口 ...

    课时12: 防火墙IPTABLES综合实验

    12.1 实验要求

    拓扑(文字版):

    A(.1)–局域网(172.16.10.0/24)–(eth0:0接口:10.254)B(eth0接口:6.146)–互联网(192.168.6.0/24)–(6.128)C

    要求:

    1.在A上ping172.16.20.2通

    2.在C上ssh root@172.16.20.1跳转到局域网中的A主机

    提示:

    1. 所有的虚拟机使用NAT模式

    2. A网关指向172.16.10.254

    3. B作为网关,配置NAT策略

    4. B可以使用网卡别名配置多个地址,ifconfig eth0:0 x.x.x.x natmask x.x.x.x

    5. B是Centos 6.x系统

    12.2 实验准备

    • 准备3台虚拟机,一台内网客户机PC1,一台做NAT转发的虚拟机PC2(Centos6.9),一台外网的虚拟机PC3
    • 拓扑如下:

    在这里插入图片描述

    12.3 PC1网络配置

    • 配置网络
    [root@localhost ~]vim /etc/sysconfig/network-scripts/ifcfg-eth0
    BOOTPROTO=static      		 #手动配置
    IPADDR=172.16.10.1    		 #内网ip
    NETMASK=255.255.255.0		 #掩码
    GATEWAY=172.16.10.254		 #默认网关
    DNS=114.114.114.114
    
    [root@localhost ~]service network restart      #文件保存后 重启服务
    

    ​ 由下图可知,PC1的网卡配置成功

    [root@localhost ~]ifconfig
    

    在这里插入图片描述

    ​ 由下图可知:可以PC1可以在内网中ping通PC2

    [root@localhost ~]ping 172.16.10.254 #ping PC2
    

    在这里插入图片描述

    12.4 PC2网卡和防火墙配置

    • 配置网卡
    [root@lin ~]# ifconfig eth0:0 172.16.10.254 netmask 255.255.255.0 up   #网卡配置
    [root@lin ~]# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:DD:00:64  
              inet addr:192.168.6.146  Bcast:192.168.6.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fedd:64/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:7701 errors:0 dropped:0 overruns:0 frame:0
              TX packets:167 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:476055 (464.8 KiB)  TX bytes:18437 (18.0 KiB)
    #网卡已经启动使用
    eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:DD:00:64  
              inet addr:172.16.10.254  Bcast:172.16.10.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
    
    
    • 配置防火墙
    #清除防火墙规则
    [root@lin ~]# iptables -F 
    #调整内核参数,开启ip路由转发功能
    [root@lin ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
    [root@lin ~]# cat /proc/sys/net/ipv4/ip_forward
    1
    #nat设置
    #在POSTROUTING链上:PC2对来自网卡接口eth0:0的ip地址进行nat转换,数据包源地址改为PC2的在网卡接口eth0的地址
    [root@lin ~]# iptables -t nat -A POSTROUTING  -s 172.16.10.0/24 -j SNAT --to-source 192.168.6.146
    
    #在PREROUTING链上,对来自外网192.168.6.0/24的ip主机对PC2发起的ssh连接请求进行连接跳转,跳转到内网ip:172.16.10.1对应22号端口
    [root@lin ~]# iptables -t nat -A PREROUTING -d 192.168.6.146 -s 192.168.6.0/24 -p tcp --dport 22 -j DNAT --to 172.16.10.1:22
    
    #在FORWARD链上 ,允许目的地址为内网ip:172.16.10.1的tcp包通过
    [root@lin ~]# iptables -A FORWARD -d 172.16.10.1 -p tcp --dport 22 -j ACCEPT
    
    
    

    12.5 测试

    1. ping

    ​ 由下图可知:内网PC1ping通外网PC3

    #在PC1:172.16.10.1测试
    [root@localhost ~]ping 192.168.6.128
    

    在这里插入图片描述

    2. ssh

    ​ 由下图可知:外网PC3 向PC2(192.168.6.146)发起ssh连接,连接成功后查看网卡接口地址,发现是PC3的ip地址(172.16.10.1),说明PC2顺利完成SSH跳转,登录到PC1。

    #在PC3:192.168.6.128测试
    [root@localhost ~]ssh root@192.168.6.146  #向PC2发起ssh连接请求
    root@192.168.6.146's password:            #此处输入的是PC1:172.16.10.1的root密码
    [root@localhost ~]iconfig
    

    在这里插入图片描述

    展开全文
  • 单台服务器百万并发长连接支持

    万次阅读 多人点赞 2016-07-18 14:31:52
    由于我们需要构建大量的客户端,而我们知道,在一台系统上,连接到一个服务时的本地端口是有限的。由于端口是16位整数,也就只能是0到 65535,而0到1023是预留端口,所以能分配的只是1024到65534,也就是64511个。也...
  • 100万并发连接服务器笔记之1M并发连接目标达成 第四个遇到的问题:tcp_mem 在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来。 通过查看dmesg命令查看,发现大量TCP: too many of ...
  • 为了让服务能够被远程工具连接,配置/etc/ssh/sshd_config中监听的端口和ip地址 vim /etc/ssh/sshd_config Port 22 (这个可以不设置,默认22端口) PermitRootLogin yes PasswordAuthentication yes (这里发现...
  • server.port=8081 spring.jpa.open-in-view=false ########### powerjob-worker 配置 ########### # akka 工作端口,可选,默认 27777 powerjob.worker.akka-port=27777 # 接入应用名称,用于分组隔离,推荐填写 本...
  • 为了让服务能够被远程工具连接,配置/etc/ssh/sshd_config中监听的端口和ip地址 vim /etc/ssh/sshd_config Port 22 (这个可以不设置,默认22端口) PermitRootLogin yes PasswordAuthentication yes ...
  • [img=http://img.my.csdn.net/uploads/201211/19/1353323734_7701.jpg][/img]按照网上的流程做了 但是netstat -an还是看不到1433 求解答啊~ 弄了两天了 要气死了 本人菜鸟刚接触这个 顺便问下怎么查看...
  • docker的常用命令汇总

    2018-11-07 17:26:08
    --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; --link=[]: 添加链接到另一个容器; --expose=[]: 开放一个端口或一组端口; 实例 使用...
  •  TCP或UDP:不同IPv4地址的主机之间建立的各种TCP或UDP,可以发现某台主机是否打开过多连接,是否与稀奇古怪的端口号建立了连接。 4)端点(Endpoints) 此工具用来观察第二、三、四层端点(Ethernet端点、IP端点、...
  • 拔出tf存储卡,连接电脑,打开boot目录下的config.txt,在config.txt最下面添加如下代码: disable_overscan=1 hdmi_force_hotplug=1 # 强制树莓派使用HDMI端口,即使树莓派没有检测到显示器连接仍然使用HDMI端口。...
  • ##bridge bridge_type=tcp bridge_port=443 # 修改连接端口 bridge_ip=0.0.0.0 启动 #Mac/Linux ./nps test|start|stop|restart|status 测试配置文件|启动|停止|重启|状态 #Windows nps.exe test|start|stop|...
  • 常见内网穿透工具

    2021-11-25 10:32:31
    ##bridgebridge_type=tcpbridge_port=443 # 修改连接端口bridge_ip=0.0.0.0 启动 #Mac/Linux./nps test|start|stop|restart|status 测试配置文件|启动|停止|重启|状态#Windowsnps.exe test|start|stop|restart...
  • ##bridge bridge_type=tcp bridge_port=443 # 修改连接端口 bridge_ip=0.0.0.0 启动 #Mac/Linux ./nps test|start|stop|restart|status 测试配置文件|启动|停止|重启|状态 #Windows nps.exe test|start|stop|...
  • ##bridge bridge_type=tcp bridge_port=443 # 修改连接端口 bridge_ip=0.0.0.0 启动 #Mac/Linux ./nps test|start|stop|restart|status 测试配置文件|启动|停止|重启|状态 #Windows nps.exe test|start|stop|...
  • 这里的示例是监听 8000 端口,你可以修改成别的端口。 出于安全考虑,调试控制台只能监听本地地址 127.0.0.1。 所以如果需要远程使用,需要先登录到本机,然后再连接。 可以用 telnet 或 nc 登录调试控制台。启动后...
  • 积累的hvv和重保的面试题(1)

    千次阅读 2022-03-06 10:45:05
    ip、子域名、cms、端口及存在的服务、弱口令、网站目录结构、域名的whois信息、服务器系统版本、中间件有没有已知的漏洞 漏洞扫描 开始检测漏洞,如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意...
  • 渗透测试面试合集

    2022-04-01 00:04:00
    ip、子域名、cms、端口及存在的服务、弱口令、网站目录结构、域名的whois信息、服务器系统版本、中间件有没有已知的漏洞 漏洞扫描 开始检测漏洞,如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意...
  • 护网初面整理

    千次阅读 2022-04-18 16:13:35
    7701 freak88,Weblogic(基于javaee架构的中间件)的默认端口 80 HTTP  8080 常用代理端口 3.SQL注入 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一些组合,...
  • 先关闭Eclipse,Android Studio这类的IDE,否则jdb attach到应用时出现如下异常,jdb连接中断 java.io.IOException: handshake failed - connection prematurally closed at ...
  • Hazelcast 配置教程

    2020-12-28 21:48:58
    dev dev-pass http://localhost:8080/mancenter 7701 0 224.2.2.3 54327 127.0.0.1 127.0.0.1 1 0 0 NONE 0 25 com.hazelcast.map.merge.LatestUpdateMapMergePolicy 如果你看到上面的配置内容有点蒙圈,建议你先看...
  • 微机原理知识点总结10-12

    千次阅读 2022-01-14 21:23:30
    12):ADC0809(8位逐次逼近)、AD574A(12位逐次逼近)、AD7701(16位) 第十二章 一、概念 1):编码键盘(内部检测按下的键,回传类似ASCII码) 2):非编码键盘(只提供按键的行列信息) 二、知识点 1):键盘...
  • Linux常用命令汇总

    2021-12-09 11:09:16
    下载文件并以指定的文件名保存文件:wget -O taglist.zip http://www.vim.org/scripts/download_script.php?src_id=7701 。 ftp 命令 ftp 命令和 sftp 命令的用法基本相似。 连接 ftp 服务器并下载多个文件: $ ftp...
  • Linux命令

    2022-03-13 17:40:51
    tail -n 2000 consoleMsg.log | more 分页查看最后2000行日志 netstat netstat -tlnp 所有端口 netstat -tlnp|grep 8080 查询8080 查看端口号占用状态(需要时root权限,否则执行命令报错) df 命令是linux系统以磁盘...
  • 项目管理——Nginx

    2021-08-27 15:55:44
    3.2 反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 187
精华内容 74
关键字:

7701端口怎么连接