互联网交互——探索计算机网络 | 青训营

216 阅读17分钟

网络是如何交互的

1. 设备接入网络

首先设备通过有线连接或者Wi-Fi连接的方式,通过以太网线或网络电缆将电子设备连接到路由器或调制解调器, 或者通过无线网络连接,通过内置的Wi-Fi模块与无线路由器建立连接。

image.png

2. 网络接入——路由

路由器是一种网络设备,可以连接多个计算机、移动设备或其他网络设备,并将数据包在它们之间进行转发。它的主要功能是在不同的网络之间进行数据交换和路由。

  1. 数据转发:当路由器收到一个数据包时,它会检查数据包的目标地址,并根据预先配置的路由表确定数据包的最佳路径。路由表中记录了不同网络之间的连接信息和优先级,以帮助路由器选择正确的下一跳。然后,路由器通过相应的接口将数据包发送到下一个目标设备。
  2. 路由选择协议:为了更新和维护路由表,路由器使用路由选择协议。这些协议允许路由器之间交换网络状态信息,并根据各种指标(如距离、带宽、负载等)确定最佳路径。常见的路由选择协议包括RIP、OSPF、BGP等。
  3. IP地址管理:路由器还负责管理IP地址。它可以分配和分配IP地址给连接到它的设备。通过网络地址转换(NAT)技术,路由器还可以将私有IP地址转换成公共IP地址,实现多个设备通过单个公共IP地址访问互联网。
  4. 防火墙和安全:路由器通常具有内置的防火墙功能,可以监控和过滤网络流量。它可以基于设置的规则对进出的数据包进行检查,并阻止未经授权的访问或潜在的威胁。
  5. 无线局域网(WLAN)支持:许多路由器还具有无线功能,可以提供无线局域网接入点(Access Point, AP),让设备通过Wi-Fi连接到网络。

总体而言,路由器通过追踪和管理多个设备之间的数据流,将数据从发送方转发到目标设备,实现了不同网络之间的连接和通信。它是构建互联网基础架构的关键组件之一。

image.png

并且路由通常不是对称的。在网络中,数据通信往往沿着不同的路径在源设备和目标设备之间进行。这种不对称性可以出现在多个层面上:

  1. 物理链路:在底层物理网络中,路由器之间的物理链路可能具有不对称的特性。例如,一个路由器的上传速度可能与下载速度不同,或者两个路由器之间的带宽可能不均匀分配。这些因素可以导致数据在不同方向上的传输速度不一致。
  2. 网络拓扑:网络中的路由器布局和连接方式可能导致路径不对称。例如,某些路径可能经过更多的中转节点,而另一些路径可能更为直接。这取决于网络拓扑、路由协议和配置等因素。
  3. 路由策略:路由器的路由选择策略也可能导致不对称。某些路由器可能优先选择特定的路径或路由,导致数据在不同的方向上采取不同的路径。

3. ARP协议和IP协议

ARP(Address Resolution Protocol)是一种用于将IP地址映射到物理MAC地址的协议。它常用于在局域网中,根据目标IP地址查找对应的MAC地址,以便实现数据包的传输。ARP协议的工作过程如下:

  1. 主机A发送ARP请求:当主机A要发送数据包给主机B时,它首先检查自己的ARP缓存表(ARP Cache),如果没有找到主机B的MAC地址,就发送一个特殊的ARP请求广播帧(ARP Request)到局域网上的所有设备。
  2. 路由器和其他主机收到ARP请求:局域网上的所有设备接收到ARP请求后,会检查请求中的目标IP地址是否与自己的IP地址匹配。
  3. 主机B响应ARP请求:如果有设备的IP地址与ARP请求中的目标IP地址匹配,它会发送一个ARP响应帧(ARP Reply)回复给主机A。该响应中包含了设备的MAC地址。
  4. 主机A更新ARP缓存表:一旦主机A收到主机B的ARP响应,它将更新自己的ARP缓存表,将主机B的IP地址和MAC地址关联起来。
  5. 数据包发送:现在,主机A知道了主机B的MAC地址,它可以将数据包封装在以太网帧中,目标地址设置为主机B的MAC地址,然后发送给局域网上的交换机。
  6. 交换机转发数据包:交换机接收到数据包后,根据目标MAC地址将数据包转发到相应的端口。最终,主机B收到数据包,并进行相应的处理。

需要注意的是,在ARP协议中,IP地址和MAC地址是一对一映射关系。ARP请求和响应是广播帧,所以它们会在整个局域网上传播。一旦主机A更新了ARP缓存表,将不再发送新的ARP请求,而是直接使用缓存的MAC地址进行通信,提高了通信效率。

image.png

IP(Internet Protocol)协议是互联网通信的核心协议之一,它定义了在网络中传输数据的格式和规则。IP协议主要负责两个主要任务:为每个设备分配唯一的IP地址,并将数据包从源地址传输到目标地址。以下是IP协议的主要特点和工作原理:

  1. IP地址:IP协议使用32位或128位的IP地址来唯一标识网络中的设备。IPv4是目前广泛使用的版本,它使用32位地址,而IPv6是下一代IP协议,使用128位地址。IP地址由网络部分和主机部分组成,网络部分用于路由选择,主机部分用于唯一标识网络中的设备。
  2. 数据包格式:IP协议将数据分割为称为数据包(Packet)的较小单元进行传输。每个数据包包含报头和数据两部分。报头包含了源IP地址、目标IP地址、数据包长度等信息。数据包根据目标IP地址被发送到相应的网络上。
  3. 路由:IP协议使用路由表来确定数据包的最佳路径。每台路由器都维护着一张路由表,其中包含了网络地址和对应的出口接口信息。当一个路由器接收到数据包时,它会根据目标IP地址查询路由表,并将数据包转发到适当的出口接口,继续向目标设备传送。
  4. 分片和重组:IP协议支持在不同的网络上传输大小不同的数据包。当数据包的大小超过网络规定的最大传输单元(MTU)时,IP协议会将数据包分割为更小的块进行传输。接收方会根据数据包中的标识字段将这些小块重新组装成完整的数据包。
  5. 头部校验和:IP头部包含一个校验和字段,用于验证报头内容是否被篡改。接收方在接收到数据包后,会计算校验和并与接收到的校验和进行比较,以检测数据包是否损坏或被修改。
  6. 无连接性:IP协议是一种无连接的协议,它不会建立和维护持久的通信连接。每个数据包都是独立处理,路由器仅仅根据目标IP地址来转发数据包。

IP协议是互联网通信的基础,它使得不同网络上的设备能够相互通信。除了提供基本的寻址和路由功能,IP协议还支持多种高级协议和服务,如TCP、UDP、ICMP等。通过结合这些协议,IP协议实现了可靠的数据传输、错误检测和网络管理等功能,为互联网的运作提供了重要支持。

4. 数据包

在下载文件时,数据包是通过网络传输的基本单元。当你从服务器或其他来源下载文件时,数据被分割成多个数据包,然后逐个发送到你的计算机。以下是数据包相关的一些重要概念:

  1. 分段(Segmentation):为了更高效地传输文件,通常将文件分割成较小的数据块,称为分段。每个分段都有自己的序列号和其他必要的标识信息。
  2. 传输控制协议(TCP):TCP是一种常用的传输层协议,它负责可靠地传输数据。TCP使用序列号对每个数据包进行排序,并在需要时进行重传。它还提供了拥塞控制和流量控制等机制,以确保数据包的可靠性和顺序性。
  3. 用户数据报协议(UDP):UDP是另一种传输层协议,它是一种无连接的协议,不提供可靠性和顺序性。当使用UDP下载文件时,数据包将按照其原始顺序传输,但无法确保全部到达目的地。
  4. 报头(Header):每个数据包包含一个报头,其中包含了与该数据包相关的元数据信息,如源地址、目标地址、数据包序列号、校验和等。
  5. 丢包(Packet Loss):在数据包传输过程中,由于网络拥塞、信号干扰或其他因素,可能会导致部分数据包丢失。当发生数据包丢失时,接收端可能会请求发送端重新发送丢失的数据包。
  6. 确认应答(Acknowledgement):接收端在收到数据包后会向发送端发送一个确认应答,通知发送端该数据包已经成功接收。
  7. 窗口(Window):窗口是一个动态的概念,用于控制发送端可以连续发送多少个数据包而无需等待确认应答。窗口大小可以根据网络状况进行调整,以提高传输效率。

下载文件时,数据包的传输是通过不断地发送和接收这些数据包来完成的。发送端将文件切割成多个分段,每个分段被封装成一个数据包,并通过网络发送到接收端。接收端按照序列号对数据包进行排序和重组,最终将完整的文件保存下来。

image.png

5. 请求DNS

image.png 请求DNS是指从客户端向DNS服务器发送查询以获取特定域名(如www.douyin.com)对应的IP地址的过程。

  1. 客户端发起请求:当用户在浏览器中输入一个网址时(如www.douyin.com),操作系统的网络栈会接收到请求并将其发送给负责DNS解析的模块。

  2. 本地DNS缓存查询:首先,本地计算机会检查自己的DNS缓存,其中保存了之前查询过的域名和其对应的IP地址。如果缓存中存在目标域名的记录且该记录未过期,那么本地计算机会直接返回该IP地址,跳过后续的步骤。

  3. 本地DNS服务器查询:如果本地缓存中没有目标域名的记录,本地计算机会向本地DNS服务器发送查询请求。本地DNS服务器通常由互联网服务提供商(ISP)提供,并负责处理DNS查询请求。

  4. 迭代查询或递归查询:本地DNS服务器接收到查询请求后,它可以执行两种类型的查询:

    • 迭代查询:本地DNS服务器从根域名服务器开始递归地查询域名的IP地址,依次向上级域名服务器查询,直到找到目标域名的IP地址,然后将结果返回给客户端。
    • 递归查询:本地DNS服务器向根域名服务器发送查询请求,然后根域名服务器会将该请求转发给负责目标域名的顶级域名服务器。递归查询一直持续到找到目标域名的IP地址,并将结果逐级返回给本地DNS服务器和客户端。
  5. 返回查询结果:本地DNS服务器获取到目标域名的IP地址后,将结果返回给客户端的操作系统网络栈。操作系统会将结果缓存到本地DNS缓存中,并将IP地址提供给应用程序,使其可以建立与目标服务器的连接。

总结起来,请求DNS是通过向本地DNS服务器发送查询请求来获取特定域名对应的IP地址。当本地DNS服务器接收到查询请求时,它可以执行迭代查询或递归查询,直到找到目标域名的IP地址,并将结果返回给客户端。这样,客户端就可以使用获得的IP地址与目标服务器建立连接。

6. 传输协议UDP

传输协议UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、无需建立连接的数据传输方式。下面是UDP的介绍:

  1. 无连接性:UDP是一种无连接的协议,这意味着在数据传输过程中不需要建立和维护连接。发送方直接将数据打包成用户数据报(UDP包),然后通过网络发送给接收方,而接收方在接收到UDP包后直接进行处理。相比之下,TCP是一种面向连接的协议,需要在发送方和接收方之间建立连接并维护连接状态。
  2. 面向数据报:UDP以数据报(Datagram)为单位进行数据传输。每个UDP包独立封装了一部分数据,并附带了源端口号和目标端口号等信息。每个UDP包都是独立的,没有顺序要求,因此接收方可能以不同的顺序收到UDP包。
  3. 不保证可靠性:与TCP不同,UDP并不提供数据的可靠性保证。它不提供流量控制、重传机制或丢失数据的检测和恢复功能。这意味着UDP包在传输过程中可能会丢失、重复、重新排序或损坏,但UDP协议本身不提供任何修复机制。因此,如果应用程序对数据的可靠性和顺序性有要求,需要在应用层自行实现相关机制。
  4. 低延迟:由于UDP不需要建立连接和维护状态等额外开销,它的传输延迟相对较低。这使得UDP适用于那些对实时性要求较高的应用,如实时语音和视频通信、在线游戏等。
  5. 广播和多播支持:UDP支持广播(向局域网中的所有主机发送UDP包)和多播(向多个目标主机发送UDP包)功能,这使得UDP在某些特定的场景下非常有用,如流媒体分发等。

UDP的简单性和较低的开销使其成为一些特定应用场景的首选,但也意味着应用程序需要在上层自行处理数据的可靠性和顺序性等问题。因此,在选择使用UDP还是TCP时,需要根据应用需求的特点来进行权衡和选择。 image.png

7. TCP的三次握手

TCP的三次握手(Three-Way Handshake)是建立TCP连接的过程,用于确保发送方和接收方之间的通信能够正常进行。下面是对TCP三次握手的步骤介绍:

  1. 第一次握手(SYN):客户端向服务器发送一个带有SYN(同步)标志的TCP包,告诉服务器它想要建立连接。这个包包含了客户端随机生成的一个初始序列号(Initial Sequence Number,简称ISN)。
  2. 第二次握手(SYN+ACK):服务器收到客户端发送的SYN包后,会发送一个带有SYN和ACK(确认)标志的TCP包作为响应。这个包中确认号被设置为客户端的ISN加1,并且服务器也随机生成一个自己的ISN。
  3. 第三次握手(ACK):客户端收到服务器发送的SYN+ACK包后,会再次发送一个带有ACK标志的TCP包给服务器进行确认。这个包的确认号被设置为服务器的ISN加1,同时客户端也把之前服务器发送的SYN的序列号加1作为自己的初始序列号。

完成这三个步骤后,TCP连接就建立起来了,双方可以开始进行数据的传输。通过三次握手,TCP连接的建立可以确保以下几点:

  • 双方都能确认对方已准备好进行通信,避免数据发送到未准备好接收的对端。
  • 双方都能确认彼此的序列号和初始序列号,用于后续的数据传输和确认。
  • 防止已失效的连接请求报文段再次出现时,客户端错误地向服务器发送重复的请求。

需要注意的是,三次握手仅仅是建立TCP连接的过程,并不能保证数据的可靠性。TCP在数据传输过程中通过序列号和确认机制来保证数据的可靠性和顺序性。

8. TCP传输

TCP是一种面向连接、可靠的传输层协议,它提供了高可靠性的数据传输服务。下面是对TCP传输的介绍:

  1. 面向连接:在进行数据传输之前,发送方和接收方需要通过三次握手建立TCP连接。这个连接是双向的、可靠的,并且在数据传输结束后会通过四次挥手关闭连接。通过建立连接,TCP确保了数据能够在发送方和接收方之间可靠地传输。
  2. 可靠性:TCP通过序列号、确认机制、重传机制和流量控制等技术保证数据的可靠性。发送方将数据分割成小的TCP段,并为每个段分配一个唯一的序列号。接收方收到数据后发送确认消息,发送方根据确认消息来确认数据是否已正确传输。如果发送方没有收到确认消息,会重新发送该数据段。此外,TCP还可以控制发送速率,避免因发送速度过快而导致接收方无法处理的情况。
  3. 流量控制:TCP使用滑动窗口机制进行流量控制。接收方会告诉发送方自己的可用缓冲区大小(窗口大小),发送方根据这个大小来控制发送的数据量,以避免过多的数据超出接收方的处理能力。
  4. 顺序性:TCP保证数据的顺序性,即发送方发送的数据会按照发送的顺序到达接收方。TCP使用序列号来标识每个数据段,并在接收方进行重组和排序,以确保数据以正确的顺序传递给应用层。
  5. 拥塞控制:TCP通过拥塞窗口、慢启动、拥塞避免和快速重传等机制来进行拥塞控制。当网络拥塞时,TCP会减小发送窗口的大小,降低发送速率,以减轻网络负载,提高整体性能。

TCP传输是基于可靠连接的,适用于对数据可靠性和顺序性要求较高的应用,如文件传输、Web浏览、电子邮件等。相比于UDP,TCP的传输效率稍低,但在保证数据可靠性方面更为优秀。 image.png