上一节我们介绍了网络包经过协议栈的IP模块的封装后,经由网卡发送出本机。
《浏览器输入一个网址发生了什么(三) IP模块封装、ARP协议、IP协议、ICMP协议和网卡原理》
接下来我们将介绍数据从客户端主机传输出去后,在局域网内经历了什么。
网络包从客户端主机发出后,要经过集线器、交换机和路由器最终进入到互联网。在我们实际生活中,家里的路由器已经集成了集线器和交换机的功能,网络包到达家里的路由器之后就能立刻进入互联网。
这里为了理解集线器、交换机和路由器的功能,故而将每个功能独立出介绍以方便理解。
如下图所示:
一、电信号到达集线器
从之前的内容我们知道,计算机网卡会将MAC模块封装的数据帧转为电信号(0和1组成的高低电平),该电信号会沿着计算机连接的网线到达集线器。
集线器包含多个插口(接口),每个插口可能连接着其他集线器,交换机,路由器或者多个计算机。每个接口背后都装有网卡中PHY(MUA)功能相同的模块用于接收和发送电信号。
集线器上的每一个接口既可发送也可接收,但每一个接口不能在发送的同时又接收,或者接收的时候同时发送,这是因为集线器是基于半双工的工作模式。
当信号通过网线到达集线器接收接口后面的PHY(MUA)模块之后,会进入中继电路,中继电路的基本功能是将输入的信号广播到该集线器的所有接口之上,信号就会从这些接口发向所有连到该集线器的所有设备。
PS:集线器不会对发送过来的数据进行解析和处理,也就是说,当集线器接收到电信号之后,不会将电信号还原为数字信息(也就是不会将电信号还原为数据帧和数据包),而是将电信号直接转发。
二、电信号从集线器到达交换机
交换机和集线器一样也有众多接口或者说端口,并且每个接口后面也装着PHY(MUA)模块用于收发电信号。与集线器不同的是交换机内部存储着一张MAC地址与网线端口的对应表(MAC地址表)而且交换机是一个包含数据链路层的设备,具有MAC模块,可以校验和解析数据帧,而集线器则没有,集线器不会将电信号转为数据帧(而是直接转发电信号),更不用说解析数据帧。
当电信号被交换机的某一个端口接收到之后,由PHY(MUA)模块将电信号还原为数据帧,再由MAC模块校验数据帧内的数据是否正确(FCS校验),如果正确则把帧里面的以太网包放到缓冲区中。
PS:我们可以理解为交换机的每一个端口都相当于一块网卡,具有MAC模块并且拥有自己的缓冲区。实际上并非每个端口都有独立的PHY(MUA)、MAC和内存,而是由一个控制芯片同时控制多个端口。而交换机中实际上也没有网卡,因此交换机也没有MAC地址。
网卡本身是具有MAC地址的,所以网卡能够核对接收到的包的接收方MAC地址是否是自己的MAC地址,如果不是则丢弃包。但交换机由于没有网卡也没有MAC地址,因此交换机会接收所有发给它的包存到缓冲区并转发,而不会丢弃(如果发送方MAC地址对应的接口和接收方MAC对应的接口相同则会丢弃该包,后面会介绍)。
包放入缓冲区后,MAC模块会获取到以太网包MAC头部的发送方MAC地址和接收方MAC地址。
一方面,交换机会将发送方MAC地址和交换机对应接收端口的端口号的映射关系记录到MAC地址表中,这样交换机就知道这个发送方MAC地址的设备是连接在哪个端口上的,下次有其他机器要发送数据给这个MAC地址时,交换机就知道要将数据通过哪个接口发出。
另一方面,交换机会查询接收方MAC地址是否在MAC地址表有记录的发送端口,例如查询到接收方MAC地址为00-02-B3-1C-9C-F9则对应下面的MAC地址表中的第三行,交换机就会把包从端口8发送出去。
PS:如果交换机接收到某个包其接收方MAC地址是主机A的MAC地址,那么交换机接收这个包的端口不一定是直接连着主机A,而可能是连接着帮A转发包的集线器或帮A转发包的其他交换机。
从上图中我们也可以看出,交换机的端口也是分为接收端口和发送端口的。00-02-B3-1C-9C-F9这个MAC地址对应的端口号为8,那么交换机针对该MAC地址的发送端口号和接收端口号都是8,但是发送端口和输出端口本身不是同一个端口,而是不同的2个端口,只是它们的端口号都是8。这里涉及到交换机的交换电路。如下图所示:
左边是交换机的输入端口,下方是输出端口,左边8号端口是交换机对00-02-B3-1C-9C-F9机器的接收端口,下方8号端口是交换机对00-02-B3-1C-9C-F9机器的发送端口。
MAC地址表的维护
像我们刚才所说,当收到包时交换机会把发送方MAC地址与接收端口的端口号记录到MAC地址表,并且交换机每次收到包都会执行这个操作。这样以后当收到发往这个地址的包,交换机就能将它发到正确的端口了。
但是地址表中的记录不能永久有效,会在一段时间不使用之后自动删除,这是为了避免类似于设备发生移动导致地址表中记录不再正确的情况,例如笔记本电脑从办公室移动到了会议室,连了不同的网线。
地址表记录的有效期为几分钟,但如果在有效期内,某条记录就过时了(发生了设备移动的情况),那么交换机依旧会将包转发给老的端口,通信就会发生错误。此时只需重启一下交换机,地址表会被清空并更新正确的信息。
下面我们看一种特殊情况:如果交换机查询MAC地址表发现记录中接收方MAC地址对应的接口和发送方MAC地址对应的发送接口相同,那么交换机会如何处理,如下图所示:
A发送了一个给B的数据包,我们发现A和B都连接在同一台集线器上,集线器会把A的包广播到该集线器所有的端口,其中就包括B。因此B接收到集线器发给他的包之后,校验MAC地址发现是自己的MAC地址,于是B会响应回包,经过集线器,集线器再通过广播的方式把回包传回给A。
但是集线器也连接着左侧的交换机上,因此集线器同样会把这个包发给交换机,交换机一查MAC地址表会发现发送端口和接收端口是同一个端口号,为了避免计算机B接收重复的包,因此交换机会丢弃这个包,而不会把包又转发回集线器而又由集线器转发给B。
另一种特殊情况就是MAC地址表中无法找到指定的MAC地址,这是因为该MAC地址的设备没有向交换机发送过包,或者MAC记录因过了有效期而被删除。
此时交换机会将包转发给除了源端口之外的其他所有端口。可能有人会担心这样发过多的包会不会造成网络拥塞,其实不用担心,因为只要目标设备做出响应(这里主要指ARP响应),交换机就会根据回包将其MAC地址记录到地址表,下次就无需这样广播转发。
另外,如果接收方MAC地址是一个广播地址那么交换机也会将包发送到除了源端口外的其他端口。
交换机是全双工的工作模式,这也是交换机和集线器的区别。交换机的发送和接收端口是相互独立的,发送端口只能发送不能接收,接收端口亦然;但是发送端口在发送的时候,接收端口也能接收,这就是全双工模式的特点。而集线器的单个端口可以接收也可以发送,但接收和发送不能同时进行,否则就会发生信号碰撞,所以当集线器接收某个包时,它需要将这个包转发给其他所有端口,导致其他端口这段期间不能接收包。从转发能力而言,集线器是低于交换机的。
三、网络包经路由器并转发
网络包经过集线器和交换机转发之后达到路由器,并被转发到下一个路由器。
当然,网络包不一定非要先经过集线器再到交换机再到路由器,也可能集线器连接着路由器,包到达集线器后就能转发到路由器;也可能是计算机直接连着路由器,网络包从计算机发出后直接到达路由器;在局域网中,路由器与路由器之间也存在着众多的集线器和交换机,从当前路由器到下一跳路由器需要经过这两台路由器之间的集线器和交换机;也可能路由器内部本身就集成了集线器和交换机的功能,这样包就可以按上述所说的转发方式直接被转发到下一跳路由器。
当然本小节的重点不是集线器和交换机,而是路由器的转发机制。和交换机不同,路由器是基于IP设计的(具有网络层和链路层),而交换机是基于以太网设计的(只有链路层),因此路由器可以解析MAC包和IP包,交换机则只能解析MAC包;交换机是通过包中的接收方MAC地址判断转发目标,而路由器则是根据包中接收方的IP地址判断转发目标。
1.路由器结构简化图
路由器内部包含两部分:转发模块和端口模块。
转发模块负责根据包内目的地IP判断包应该转发到哪个下一跳路由器;端口模块负责执行包的收发操作。
2.端口模块
端口模块包含PHY(MUA)模块(可以接收电信号将帧转为数字信息)、MAC模块(将帧解析为以太网包)和内存缓冲区(暂存网络数据),端口模块对于路由器而言就相当于网卡对于计算机一样。路由器的每个端口都具有独立的MAC地址和IP地址。
不同类型的路由器安装的端口模块也不同,例如具有ADSL组件的路由器(一般用作为互联网中的路由器),具有FTTH组件的路由器(互联网中的路由器),支持专线的路由器(公司局域网中的路由器),支持无线局域网或以太网的路由器(局域网中的路由器)。
不同端口模块的路由器支持不同的通信功能,例如具有ADSL通信功能的路由器在把包转发之前会为包添加MAC头部、PPPOE头部和PPP头部(用于在互联网中传输和鉴权)并发送到互联网中;而具有以太网或无线局域网功能的路由器在转发时只添加MAC头部,并且只支持包在局域网内传输和解析。
一般而言,计算机的网卡支持以太网和无限局域网的通信技术,而路由器的端口模块除了支持以太网和无线局域网还支持如ADSL,FTTH以及各种宽带专线的通信,只需要端口模块安装了支持这些技术的硬件即可。
一个路由器可以有多个端口和多种类型的端口(意味着这个路由器既支持包在局域网中转发也支持在互联网中转发),每个端口都可能连接着一根网线(如果端口类型是无线的则不用连网线),端口类型不同,连的网线种类也不同。
3.转发模块
路由器的转发模块中有一个重要的表叫做路由表,如下所示:
路由器中的路由表内容,以及匹配规则和之前介绍的计算机内的路由表一样。
其中,第一列“目标地址”记录的是接收方的信息,但它不是具体某台设备的IP,而是只有IP的网络号部分的IP段,表示主机号部分的比特值都为0。
第二列表示目标地址的子网掩码,用于路由器判断所需比对的网络号的比特数。
路由器在比对路由表和接收方IP时,只会比对 接收方IP的网络号而忽略主机号。
4.路由聚合
路由表第一列和第二列中记录的可能不是目标地址IP的真正子网,这是路由聚合的结果。所谓的路由聚合就是将多个子网合并为一个子网,并在路由表中生成一条记录,这样就能减少路由表中的记录数。
例如有3个子网:10.10.1.0/24、10.10.2.0/24和10.10.3.0/24。路由器B需要转发接收方IP为10.10.2.100的包,但实际上路由器B的路由表 中并没有上面的3个子网的记录,而是将上面3个子网合并成一个10.10.0.0/16的子网记录起来(这里记录的是聚合后的地址),并将下一跳指向路由器A。如下所示:
目标地址 | 子网掩码 | 网关 | 接口 | 跃点数 |
10.10.0.0 | 255.255.0.0 | 路由器A的IP | 路由器B某接口的IP | 1 |
此时在路由器B中就只需匹配目标地址10.10.2.100的前16个位,即10.10。匹配正确后B会将这个包转发给路由器A。
路由器A的路由表则记了上面3个子网的记录,根据10.10.2.100匹配到10.10.2.0/24这个子网和下一跳的IP地址,如下所示:
目标地址 | 子网掩码 | 网关 | 接口 | 跃点数 |
10.10.1.0 | 255.255.255.0 | ... | 路由器A的5号端口的IP | 1 |
10.10.2.0 | 255.255.255.0 | ... | 路由器A的2号端口的IP | 1 |
10.10.3.0 | 255.255.255.0 | ... | 路由器A的8号端口的IP | 1 |
路由聚合是将多个子网聚合为一个子网,路由表记录聚合后的子网地址。相反的,路由器也可能将一个子网细分并注册到路由表形成多条记录。甚至也可以将某台具体计算机的地址写入路由,此时第二列的子网掩码为255.255.255.255,表示匹配路由表时需要匹配所有32个比特的值。
至于网关、接口和跃点数在上面介绍计算机的路由表已经介绍过,这里不再赘述。第4列接口在计算机中代表某一块网卡,在路由器中代表路由器众多端口中的某一个端口。
PS:路由表的维护方式与交换机不同,交换机对MAC地址表的维护是通过记录发送方的以太网包MAC地址以及交换机接收端口的端口号、记录接收方的响应以太网包的MAC头部和交换机接收该包的接收端口实现的。路由表的维护则通过人手动维护以及根据路由协议通过路由器之间的信息交换由路由器自行维护。
那么回到正题,当包到达路由器时路由器是怎么处理的,这会根据路由器的端口不同而异(如以太网端口,无线局域网端口,ADSL等),这里只介绍路由器以太网端口是如何接收和转发包的。
首先信号到达网线接口部分,由PHY(MUA)模块和MAC模块将电信号转为数字信息,检验帧尾部FCS,查看接收方的MAC地址是不是发送给自己的,放入接收缓冲区;如果不是发给自己的包则丢弃(交换机不具有MAC地址,只负责转发,因此交换机不会因为校验MAC地址不是自己的MAC地址而丢弃以太网包,而是根据MAC地址表转发)。
校验完MAC地址之后,MAC头部的任务就完成了然后被丢弃(MAC头部的任务就是将包送到指定MAC地址的路由器上,因此其实上一章中我们介绍通过ARP协议向局域网中广播以获取接收方的MAC地址实际上是获取路由器的MAC地址而不是远端目标主机的MAC地址)。然后路由器会根据IP包头部的接收方IP地址匹配路由表的记录,从而找到下一跳路由器的IP(即路由表中的网关列)和输出端口(路由表的接口列,即通过本路由器的哪个端口发出这个包)。需要注意,如果匹配到的记录的网关列为具体IP地址,则该地址就是下一个转发目标,如果网关列为空,则IP头部的接收方IP地址就是下一个转发目标。
如果无法在路由表中匹配到对应记录,路由器会丢弃这个包,并通过ICMP消息告知发送方。
在发出这个包前,路由器需要重新封装MAC头部,因为之前的MAC头部已经被丢弃。此时MAC头部填入的发送方MAC地址不是源发送端的MAC地址,而是本路由器的某发送端口的MAC地址(路由器有多个端口,每一个端口都有一个MAC地址)。接收方的MAC地址则根据下一个转发目标的IP(可能是下一跳路由器的IP,也可能是目标主机的IP)通过ARP查询的方式获取,当然路由器中也有ARP缓存,因此会先在ARP缓存中查询。
网络包封装完毕后,会在端口模块将数字信息转为电信号发送出去,这个过程和在计算机的发送包过程一样。如果输出端口是以太网类型,则网络包会通过交换机到达下一个路由器并经过路由器的层层转发,网络包到达最终目的地(当然这里省略了包如何从局域网进入互联网的过程介绍,我们会在下一章再介绍)。
需要注意的是,如果路由器通过以太网类型的端口发出包则此时以太网包的头部只有MAC头部,如果是通过ADSL类型的端口(将包发送到网络服务运营商和互联网)发出则以太网包会包含MAC、PPPoE和PPP头部。
5.默认路由
对于局域网中的路由器而言,可能小的局域网中的路由器和计算机数量不多,因此所有转发目标都能够写到路由表。但如果是互联网中的路由器,由于互联网中的设备数量太多,无法将所有目标IP的网络号都记录到路由表中。因此路由表会在最后一行配置默认路由的记录,这一行的目标地址列和子网掩码列为0.0.0.0,子网掩码为0.0.0.0表示需要匹配网络包接收方IP的比特数为0,即无需匹配。而这一条记录的网关列即为默认网关,一般会填写为接入互联网的路由器地址。
换句话说,如果包内的接收方IP无法匹配到路由表中的其他所有记录,且路由表中有0.0.0.0这条默认网关记录,那么接收方IP就会匹配到这条记录并转发到默认网关。
当然,如果路由器中没有设置默认网关,那么当匹配路由表中所有记录失败时,路由器会发送ICMP消息给发送方。
6.包的有效期
在路由器转发包之前,其转发模块会更新IP头部的TTL字段。该字段表示有效期,每经过一个路由器的转发这个值就会减1,当这个值变为0时就表示超过了有效期,这个包就会被丢弃。
这个机制是为了防止包在转发的过程中陷入死循环,如果路由表中的配置正确是不会出现这种情况的,但如果信息有问题或者设备故障等原因切换备用路由器导致暂时性的路由混乱就会出现这种情况。
TTL一般会设置为64或128。
7.通过分片功能拆分大网络包
路由器的端口类型不只以太网一种,也可以支持其他局域网或专线通信技术。不同端口类型的线路能传输的最大包长度(MTU)也不同,像在以太网中,以太网包的MTU(包括以太网头部)为1500。
当路由器的输入端口和输出端口是不同的端口类型(像局域网内的路由器输入端口和输出端口可能都是以太网类型的端口和线路,但接入互联网的路由器的输入端口为以太网类型端口,输出端口是ADSL类型的端口),且输出端口能传输的MTU小于输入端口时,一旦传入的包的大小超过了输出端口的MTU,就会导致包无法发送。如下所示
有时候即使输入和输出端口的MTU一样,但可能由于包经过重新封装添加了额外的头部数据导致包的长度超过输出端口的MTU。例如ADSL和FTTH等端口类型在发出包之前需要在IP头部前添加PPP头部和PPPoE头部再添加MAC头部。
为了避免包超过输出端口MTU而无法发送包的情况出现,路由器中的IP模块提供了分片功能,首先它会看看这个要发送出去的包能否直接发送出去,将输出端口的MTU与包的长度(数据帧的包长度,不包括帧的报头和FCS)比较,如果输出端口的MTU小于包的长度则会对这个包分片,拆分之前会看一下IP头部的标志字段是否允许分片;如果标志字段表示不能分片,则路由器会丢弃该包并发送ICMP消息给发送方。
分片如下图所示:
图中(a)的蓝色部分就是被拆分的内容
每个分片都会添加相同的MAC头部和IP头部(如果是在以太网中传输则为这两个头部,如果是通过ADSL则还需要PPP和PPPoE头部)。
需要注意的是,这里对IP包的分片和之前在协议栈中介绍的TCP模块对HTTP消息的分片不同。TCP模块对HTTP消息的分片是在数据被装进包里之前进行的,而且每个分片都包含一个TCP头部。而路由器则是直接对IP包进行分片,每个分片都有一个IP头部,但是所有分片只有一个TCP头部。TCP分片也是因为要发送的数据可能大于MTU因而分片。
假如有客户端有1M的http消息要发送,则这1M的内容会在TCP模块中被分为几百多个分片包(IP包),但经过路由器的时候,每个IP包还可能再被路由器的IP模块分片为两个小包。
8.路由器与交换机以及路由器之间的关系
简单的来说,路由器负责通过将包不断传递给下一跳路由器最终把包送达通信对象这一整个过程(由网络层如IP模块负责)。而包从一个路由器到达下一个路由器则是由交换机负责广播获取MAC地址实现(由链路层如以太网线路等负责)。
网络中除了以太网之外,还有无线局域网、ADSL和FTTH等等众多类型的网络,如果当前路由器和下一跳路由器是通过以太网连接的,则当前路由器的IP模块会委托以太网将包传递给下一个路由器;如果当前路由器和下一跳路由器是通过ADSL连接,则会委托ADSL线路传递。IP本身不负责包的传输,而是委托链路层的各种通信技术(以太网、ADSL、FTTH、无线局域网等)把包传给下一个路由器。
当然,现在基本上很多的路由器都内置了交换机功能,因此路由器本身就具有广播,以及进行ARP查询MAC地址的功能。
四、路由器的附加功能
上面我们介绍了路由器的基本功能,即根据网络包头部接收方IP来查询路由表,获取下一跳地址,并以接力的方式将包传送到目标地址的计算机上。
除了这个基本功能之外,路由器还有一些附加功能,这里介绍比较重要的两个功能:地址转换和过滤。
1.地址转换
我们知道一台设备只有一个唯一的IP地址,如果网络中出现有重复IP地址的设备就会无法正常传输网络包。可是随着互联网设备数量增长,IP地址会被很快分配完。为了解决这个问题,我们容许相互独立的不同内网之间的机器出现IP重复而同一内网的机器的IP不重复的情况,只要不同内网之间的设备不直接进行通信就行。为此我们提出了私有地址和公有地址的概念。
公有地址中没分配的一部分拿出来规定只能在内网使用的地址叫做私有地址,而互联网中分配的固定地址叫做公有地址。
私有地址的范围如下:
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
不同内网的两台机器即使出现上面范围内的IP地址重复也没有关系。
下面我们以公司内网为例。一般而言,公司内网中的设备会分为两部分,一部分是对互联网开放的服务器,一部分是公司内部设备。对互联网开放的设备分配公有地址,对公司内部设备分配私有地址,被分配私有地址的设备只能够与内网的设备直接通信而不能和互联网直接收发网络包。
如果内网中的设备想和互联网中的设备通信就需要一种特别的机制,这个机制就是地址转换。
地址转换的原理就是依靠路由器在转发网络包时对IP包头部的IP地址和端口进行改写。
当内网的设备要把网络包发送到远程的目标机器,在网络包经过路由器的时候,路由器会将IP包头部的发送方IP地址(私有地址)换为路由器接收端口的地址(该路由器的端口地址是一个公有地址),并且将包 TCP头部的端口号也改写为路由器分配的一个空闲端口号。
改写前的私有地址和端口号,改写后的公有地址和端口号会对应的记录到路由器的一张表中。
这个被替换后的公有地址其实是地址转换设备的IP,即路由器的IP。所以实际上真正的发送者不是内网的计算机,而是该路由器。
服务端的回包的接收方IP会写之前发送方的公有地址,即198.18.8.31,这个公网IP是路由器的IP。当包到达公司网关路由器时,路由器会根据回包的接收方IP和端口查上面的映射表找到对应的内网设备并转发给该设备(上图的表格中只有一个公有IP,但真实情况其实还可能有多个公有地址,因为路由器有多个端口)。
在公有地址只有一个的情况下,可以用不同的端口号来区别内网的不同终端。这样就不至于服务端的回包无法找到准确的内网设备。
这个公有地址和私有地址的映射表的某条记录会在某内网计算机A与外网服务器B建立连接时(A发送连接请求的TCP包到达路由器时)生成,之后该内网计算机A与外网设备B的通信都会使用这条转换记录,直到A与B通信完毕,断开连接,A关闭用于与B通信的套接字后,(此时这个私有地址的端口号就失效)这条记录才会被删除。
我们发现路由器做地址转换的时候还改写了端口号,这样做是为了在地址转换时让公有地址的一个端口号对应一个私有IP地址,提高公有地址的利用率。如果不改写端口号,就意味着每转换一个私有地址都需要一个新的公有地址。假如这个公司的局域网只被分配了10个公有地址,但是公司有1000台设备(1000个私有地址),就意味着只有10台内部设备能够同时和互联网通信。
上面我们介绍了内网设备作为客户端,互联网中的远程设备作为服务端情况下的路由器地址转换。下面我们再说说公司内网设备作为服务端,从互联网访问公司内网设备时路由器的地址转换。
其实基本原理还是通过复用一个(或多个)公有地址的多个端口号来对应多个私有地址建立映射进行转换,唯一的不同在于内网设备作为客户端请求的情况下,这个地址转换表的记录是在设备发出请求并经过路由器时才生成的(即动态生成);而内网设备作为服务端供互联网请求的情况下,路由器中的地址转换表记录需要提前手动添加,而且只要内网设备不停止提供服务,里面的记录就不会删除。如图:
这样一来,互联网中的某个用户访问198.18.8.31:8080其实访问的就是公司内网中的 10.10.1.1这台机器的80端口所提供的服务。
2.路由器的包过滤功能
包过滤就是对包转发时根据MAC头部、IP头部和TCP头部按时限设定好的规则决定转发这个包还是丢弃这个包。我们常说的防火墙设备和软件就是利用这一机制。
这一原理虽然简单,但是想要灵活控制不容易,例如如何防止来自互联网的包经过路由器进入内网,但是又允许内网发出的包能通过路由器转发给互联网。
很多朋友会想,如果希望内网能访问互联网而不让互联网访问内网,只需允许路由器转发由内网发向互联网的包,而禁止转发由互联网发到内网的包就行。
可是网络包是双向传输的,例如TCP应答机制中,内网设备发送了带有序号的网络包,服务端就会回一个ACK包。此时这个ACK包就被拦截导致内网向客户端发起的请求无法正常响应(应该说客户端的请求包都无法正常传输完,客户端主机会一直等服务端的应答包)。
这部分内容将会在探索服务器时介绍。