防火墙的基本概念(1)TCP/IP协议


TCP/IP协议

1.1 TCP/IP的基本概念

OSI标准将网络分为七层,而TCP/IP标准仅把网络分为四层。不过,我们只需要了解TCP/IP的标准即可。
TCP/IP协议自上而下分为应用层传输层网络层链路层
在这里插入图片描述

1.1.1 应用层

常用的应用层通信协议包括HTTP、HTTPS、SMTP、POP3、FTP等,这些协议主要用于定义客户端与服务器端的数据交换方法,如Outlook Express如何使用POP3协议来接受电子邮件。
示例1.1

sudo telnet 192.168.184.120 110 (1)
Trying 192.168.184.120...
Connected to 192.168.184.120.
Escape character is '^]'.
+OK [XCLIENT] Dovecot ready.
user zhangsan(2)
+OK
pass root(3)
+OK Logged in.
list(4)
+OK 2 messages:
1 507
2 431
.
retr 2(5)
+OK 431 octets
Return-Path: <zhangsan@domain.com>
X-Original-To: zhangsan
Delivered-To: zhangsan@domain.com
Received: from zhangsan (localhost [127.0.0.1])
        by main.domain.com (Postfix) with SMTP id 05ADD20115C0
        for <zhangsan>; Tue, 20 Sep 2022 03:36:08 -0400 (EDT)
subject:test mail
Message-Id: <20220920073623.05ADD20115C0@main.domain.com>
Date: Tue, 20 Sep 2022 03:36:08 -0400 (EDT)
From: zhangsan@domain.com

hello! miss you~~~
.
quit(6)
+OK Logging out.
Connection closed by foreign host.

流程如下:
(1)使用Telnet客户端工具连接192.168.184.120主机的端口110.
(2)POP3客户端向POP3服务器发送账户。
(3)POP3客户端向POP3服务器发送密码。
(4)POP3客户端向POP3服务器发送list命令,要求POP3服务器端列出改POP3客户端在服务器的所有信件。
(5)POP3客户端向POP3服务器发送retr 2命令,要求POP3服务器发送信箱中的第二封电子邮件给POP3客户端。
(6)POP3客户端向POP3服务器发送quit命令,以便终止POP3协议的连接。

1.1.2 传输层

传输层用于定义数据传输方法,传输层主要定义了两种通信协议,分别是TCP协议和UDP协议。

  • TCP协议:TCP协议在传输数据过程中会检查数据的完整性,因此传输中的数据是不会丢失的。如传输一封电子邮件,那么就应该选择TCP通信协议作为其传输数据的方法。
  • UDP协议:当选择UDP协议作为数据传输方法时,其目的通常在于满足效率方面的要求,而非数据正确性方面的要求。如网络广播电台,因为在一连串的语音信号中若有数据丢失或者出现误码,并不会造成接收端听众的困扰,因此要求发送端重新发送正确的数据也不具有任何实质意义。
1.1.3 网络层

使用IP(Internet Protocol)地址来定位网络上的每一台计算机,并采用路由(Routing)方法决定数据传输路径,将数据传输到正确的目的端。

1.1.4 链路层

链路层又称为数据链路层(Data Link)或网络接入层(Network Interface),也就是网络的基础设施,它可能是以太网(Ethernet)、光纤(Fiber)、无线网络(Wireless)、帧中继网络(Frame Relay)或者点对点网络(PPP)等实体网络,其最重要的认为是传输和接受实体网络层所传输的光电信号。

1.2 数据包传输

数据在传输过程中,必须被分解为一个个的小碎片,然后才能够被传输。这是因为不同的网络物理层技术在每次所能承载的数据量不同。
例如,光纤为4352字节,而以太网为1500个字节,因此,数据在传输过程中,必须先被分解成一个个的小碎片才能被传输,而数据传输过程是一层层地由上往下传送。
以图1-2为例,当使用者在计算机上运行某一应用程序(如MSN)时,该应用程序一定会先定义一种数据交换方法(应用通信协议),接着必须确定数据传输方式,例如,数据在传输过程中是不可丢失或者错误的,那么就需要使用TCP作为数据传输的方法(传输层通信协议):接着,为了能将数据正确的传输到目的端,我们使用网络上每台计算机唯一的识别码IP地址,作为发送端和接收端的地址,但由于IP地址是属于逻辑信息,无法以光电信号呈现,而物理层的寻址方式是用MAC地址来识别(假设实体层是以太网),因此,当数据发送大实体层时,会在该数据中附加上发送端和接收端的MAC地址,这样便可以将数据传输到正确的目的地。
在这里插入图片描述
我们使用Wireshark软件可以截取网络上所传输的数据包,即可了解整个数据包传输的过程,如下图所示:
在这里插入图片描述

中间窗体就是数据包的结构,其结构分别如下:

  • Frame6/Ethernet II:物理层
  • Internet Protocol:网络层
  • Transmission Control Protocol:传输层
  • Hypertext Transfer Protocol:应用层
    接下来继续深入讨论每层的内容及用途。首先介绍应用层,当我们把应用层的结构展开后,即可看到整个应用层的数据内容,如图所示:
    在这里插入图片描述

从数据内容中可以看到,客户端使用HTTP1.1协议中的GET方法,去获取Web服务器根目录下的HTML文档;接下来要选择一种数据传输方法,将这些数据正确的传输到目的地,因为HTTP的数据包是不允许有任何一个包丢失的,所以我们选用TCP协议来传输这个数据包,而这个数据包随即被击伤一个TCP包头,以表明这个数据包是要使用TCP协议来传输的。
下图是TCP层的数据内容,我们称为TCP包头,从TCP包头中可以看到两个很重要的内容:“Source Port:55772”及“Destination port:80”,这两个字段表示发送端计算机使用TCP端口55772连接到目的计算机的TCP端口80.
在这里插入图片描述
在选好数据传输方法后,接下来需要对数据包进行定位,而这个定位操作是在IP层中完成,如下图。
在这里插入图片描述
上图是IP包头的数据内容,其中最重要的是“Source Address: 192.168.184.120”及“Destination Address: 192.168.184.122”这两个字段,它们表示这个数据包是由192.168.184.120这台计算机所发送出来的,而接收端的计算机地址是192.168.184.122.有了这两个数据之后,就可以在网络上正确的传输数据包了。
不过,这样就可以通过网络层传输数据包了吗?当然是不行的。请考虑一个问题,IP是个逻辑概念,而数据在网络上是以光电信号来传输的,因此,我们必须在数据包上标明“物理层”的地址(MAC地址:Media Access Control Address),如下图:
在这里插入图片描述
在网络层处理完数据包后,即将数据包送往物理层并加上MAC地址,图中“Destination: VMware_d3:a5:2f (00:0c:29:d3:a5:2f)”以及“Source: VMware_49:c9:3a (00:0c:29:49:c9:3a)”即为MAC地址,它们分别代表该数据包是由哪张网卡发出,以及要发送给哪一张网卡。有了这些完整的机制之后,就可以在网络上正常的传输数据包了。

ARP通信协议

IP地址和MAC地址(MAC地址是一组烧录在网卡上的号码,而且MAC地址理论上是不会重复的)都适合网络上的唯一标识,在Linux系统中,可以使用ifconfig命令来查看IP地址以及MAC地址,如下:

sudo ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.184.120  netmask 255.255.255.0  broadcast 192.168.184.255
        inet6 fe80::2fde:e2ee:7e6e:1851  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:49:c9:3a  txqueuelen 1000  (Ethernet)
        RX packets 149645  bytes 184717186 (176.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40979  bytes 3183909 (3.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

或许你会认为既然有了MAC地址,为什么还需要IP地址呢?这是因为物理层网络技术众多,且每一种都有其存在的价值。例如,在企业内我们会选用以太网作为物理层传输数据的介质,若是在两栋距离一、两百米的建筑物之间,则可以选用光纤作为传输介质,如果要将长沙和深圳分公司的网络连接起来,那就会选用Frame Relay(帧中继)。MAC地址是以太网的地址形式,在其他网络物理层技术中都会有其特有的地址形式,所以请注意:“MAC地址只在单一以太网上有效,因此MAC地址是不会跨越路由器设备的”,也因此,当初TCP/IP网络模型并没有定义物理层技术一点要用哪一种。
了解这些概念后,让我们来看看传输数据的两台主机是如何获取到对方网卡上的MAC地址的。首先启动两台Linux主机,使用ping命令测试另一台主机,即可截获到下图内容:
在这里插入图片描述
以第三个数据包为例,该数据包是由192.168.184.122主机发送出来的,目的端主机是192.168.184.120,Protocol标识为ICMP协议,而数据栏内显示此为一个ICMP的请求包,也就是192.168.184.122主机去ping 192.168.184.120这台主机。接着,第四个数据包就是192.168.184.120主机应答给192.168.184.122主机的ICMP数据包。我们因此可以推断,192.168.184.122这台主机共发送了四次ICMP请求包给192.168.184.120主机。
你或许已经发现,在ICMP数据包发送之前会出现两个ARP协议数据包。ARP协议的作用就是将IP地址解析为MAC地址,在两台主机第一次交换数据时,都不知道对方的MAC地址是什么,只有发送端主机知道目的端主机的IP地址,因此会发送一个ARP请求包。
在这里插入图片描述
同时ARP请求包是广播包,在同一网段下的所有主机都会接收到这个ARP请求。
接下来分析这个ARP请求包的内容,由于接收端的MAC Address是未知的,因此Target MAC Address内容为“Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)”,但接受的IP地址是一直的所以Target IP Address 内容为“Target IP address: 192.168.184.2”,而发送端的信息都是已知的,所以该数据包的Send类型都是完整的。该数据包是数据广播包,因此网络上所有的主机都会收到该数据包,但只有192.168.184.2主机会处理这个数据包。

在接收端处理了发送端的ARP请求后会回传一个ARP应答包,如下图:
在这里插入图片描述
可以看到MAC地址的内容已经完整了。如此一来,两台主机就完成了MAC地址的交换。

1.3 TCP、UDP及Socket的关系

Socket与端口

了解了数据在网络中的传输方式之后,我们接着来了解传输层中的另一个重要标记——端口(port)。
得益于端口的存在,我们可以在一台主机上运行多个服务,在讨论端口钱,先需要了解套接字(Socket)。
Socket在英文的解释中是“receptacle where something (a pipe or probe or end of a bone) is inserted”,翻译过来就是插入某种物品的容器,形容一种有洞的容器,比方说,计算机主板上CPU的插座,我们郴州为Socket 478或Socket 939等,而Socket上面的这些洞,则成为端口。
在OS的网络系统中会有两个Socket,分别是TCP Socket及UDP Socket,Socket上各有65536个洞,从0开始算起,其范围为0 ~ 65535,我们称其为Port 0 ~ 65535。

端口的作用

端口的作用是什么?以下图为例,图的左边是客户端,右边是服务器端,我们假设服务器端主机上运行Web、SSH及DNS三项服务。在TCP/IP的网络规范中,当一个网路应用程序运行起来时,都会占用一个端口,如服务器端的Web服务启动时,就会占用TCP Socket中的端口80,我们称为TCP Port 80,而SSH服务是TCP Port 22、DNS服务则是UDP Port 53,因此,我们可以说TCP Port 80代表Web服务这一程序,TCP Port 22代表SSH服务这个程序,而UDP Port 53代表DNS服务这个程序。
在这里插入图片描述
端口存在的重要性
假设客户端的浏览器想要访问服务器端Web服务,那么客户端会生成一个数据包并发送到服务器端,我们假设客户端的IP为10.0.1.10,服务器IP为202.43.195.52。
首先数据包当中比如会记录包的源地址(Source IP Address)和目的地址(Destination IP Address),但是并么有说明该数据包要发送到服务器的何处进行处理,不过TCP包头内的信息将会表名包的去处,即源端口(Source Port)和目的端口(Destination Port)。客户端所发数据包:

Source IP Address: 10.0.1.10
Destinetion IP Address: 202.43.195.52
Source Port: 2099
Destinetion Port: 80

因此,当服务器收到这个数据包之后会根据TCP包头当中携带的目的端口信息,将这个数据包交给80端口处理,而TCP 80 Port代表的正是服务器端Web服务。
当服务器的Web服务收到该数据包,必然是需要回传一个应答包告知客户端已经收到请求,这个过程和客户端向服务器的请求时相反的,将源地址变成目的地址,将源端口变成目的端口,于是服务器发送的数据包所携带的信息是:

Source IP Address: 202.43.195.52
Destinetion IP Address: 10.0.1.10
Source Port: 80
Destination Port: 2099

上述的例子可见其中端口在TCP传输中起的作用和它们的重要性。

端口的分类

端口并不是随意使用的,不管是TCP端口还是UDP端口,在RFC 1700文件中都有完整的规范,我们可以到IANA的网站中获取端口的使用列表,或者从Linux系统中的/etc/services文件中取得这些信息。下面是端口分类:

  • 公认的端口:0 ~ 1023
  • 注册的端口:1024 ~ 49151
  • 动态端口:49152 ~ 65535
  1. 公认的端口
    公认端口一般都应用在服务上,例如Web服务在规范中会使用TCP Port 80,因为它是一个为人熟知的“规范”,虽然这并不是必须的,但是大多数人都会将Web服务在80端口上开放,这就形成了约定俗成的规范。
  2. 注册的端口
    由于在同一时间内,同一个端口只能供一个程序使用,因此在程序设计师编写网络应用程序时,就得特别注意自己编写的程序所使用的端口是否已经有其他的应用程序在使用,但问题是程序设计师如何得知这件事呢?对此IANA制定了一个规范,规定了需要用到固定端口的网络应用程序。为了避免不必要的端口冲突,在设置端口之前可以先到IANA的网站查询。
  3. 动态端口
    动态端口一般是供使用者临时使用。例如几乎所有的客户端程序都会使用动态端口,当客户端应用程序启动时,系统就会分配一个“动态端口”给该应用程序使用,应用结束时会将端口归还系统

最后,规范是规范,但并不是所有的程序设计师都会根据规范办事。事实上,只要把握“同一时间同一端口不能有一个以上的程序使用”这个原则,基本上不会出现问题。


【转载】

【1】防火墙的基本概念(1)TCP/IP协议——leaning柚子茶

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值