什么是埠口(port)?我们知道 IP 封包的传送主要是藉由 IP 地址连接两端, 但是到底这个联机的通道是连接到哪里去呢?没错!就是连接到 port 上头啦! 举例来说,鸟哥的网站有开放 WWW 服务器,这表示鸟站的主机必须要启动一个可以让 client 端连接的端口,这个端口就是 port (中文翻译成为埠口)。同样的,客户端想要连接到鸟哥的鸟站时,就必须要在 client 主机上面启动一个 port ,这样这两个主机才能够利用这条『通道』来传递封包数据喔!这个目标与来源 port 的纪录,可以说是 TCP 封包上最重要的参数了!
Sequence Number (封包序号)
由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号,可以让收受端重新将 TCP 的数据组合起来。
(2)特权埠口 (Privileged Ports)
你现在了解了埠口的意义后,再来想想,网络既然是双向的,一定有一个发起端。问题是,到底要联机到服务器取得啥玩意儿? 也就是说,哪支程序应该在哪个端口执行,以让大家都知道该埠口就是提供哪个服务,如此一来,才不会造成广大用户的困扰嘛! 所以啰,Internet 上面已经有很多规范好的固定 port (well-known port), 这些 port number 通常小于 1024 ,且是提供给许多知名的网络服务软件用的。 在我们的 Linux 环境下,各网络服务与 port number 的对应默认给他写在 /etc/services 档案内喔! 底下鸟哥列出几个常见的 port number 与网络服务的对应:
端口
服务名称与内容
20
FTP-data,文件传输协议所使用的主动数据传输端口
21
FTP,文件传输协议的命令通道
22
SSH,较为安全的远程联机服务器
23
Telnet,早期的远程联机服务器软件
25
SMTP,简单邮件传递协议,用在作为 mail server 的埠口
53
DNS,用在作为名称解析的领域名服务器
80
WWW,这个重要吧!就是全球信息网服务器
110
POP3,邮件收信协议,办公室用的收信软件都是透过他
443
https,有安全加密机制的WWW服务器
另外一点比较值得注意的是,小于 1024 以下的埠口要启动时, 启动者的身份必须要是 root 才行,所以才叫做特权埠口嘛!这个限制挺重要的,大家不要忘记了喔! 不过如果是 client 端的话,由于 client 端都是主动向 server 端要数据, 所以 client 端的 port number 就使用随机取一个大于 1024 以上且没有在用的 port number。
(3)Socket Pair
由于网络是双向的,要达成联机的话得要服务器与客户端均提供了 IP 与埠口才行。 因此,我们常常将这个成对的数据称之为 Socket Pair 了!
来源 IP + 来源埠口 (Source Address + Source Port)
目的 IP + 目的埠口 (Destination Address + Destination Port)
由于 IP 与埠口常常连在一起说明,因此网络寻址常常使用『 IP:port 』来说明,例如想要连上鸟哥的网站时, 正确的鸟哥网站写法应该是:『 linux.vbird.org:80 』才对!
4、网络防火墙与 OSI 七层协定
由上面的说明当中,我们知道数据的传送其实就是封包的发出与接受的动作啦!并且不同的封包上面都有不一样的表头 (header),此外,封包上面通常都会具有四个基本的信息,那就是 socket pair 里面提到的『来源与目的 IP 以及来源与目的端的 port number』 。当然啦,如果是可靠性联机的 TCP 封包,还包含 Control Flag 里面的 SYN/ACK 等等重要的信息呢!好了,开始动一动脑筋,有没有想到『网络防火墙』的字眼啊?
封包过滤式的网络防火墙可以抵挡掉一些可能有问题的封包, Linux 系统上面是怎么挡掉封包的呢?其实说来也是很简单,既然封包的表头上面已经有这么多的重要信息, 那么我就利用一些防火墙机制与软件来进行封包表头的分析,并且设定分析的规则,当发现某些特定的 IP 、特定的埠口或者是特定的封包信息(SYN/ACK等等),那么就将该封包给他丢弃, 那就是最基本的防火墙原理了!
举例来说,大家都知道 Telnet 这个服务器是挺危险的,而 Telnet 使用的 port number 为 23 ,所以,当我们使用软件去分析要送进我们主机的封包时, 只要发现该封包的目的地是我们主机的 port 23 ,就将该封包丢掉去!那就是最基本的防火墙案例啦! 如果以 OSI 七层协议来说,每一层可以抵挡的数据有: