目录
(1)同一网段两台计算机通信过程
如果两台计算机在同一个局域网中的同一网段中,它们之间的通信链路大致如下:
1.源主机:
- 应用层生成数据。
- 传输层将数据封装成段(TCP)或数据报(UDP)。
- 网络层将段或数据报封装成IP数据包,并设置目标IP地址(即目标主机的IP地址)。
- 数据链路层将IP数据包封装成帧,并添加MAC地址信息(源MAC地址和目标MAC地址)。
2.本地网络:
- 源主机将帧发送到本地网络。图中以太网驱动程序在链路层,以太网驱动程序是软件,它使操作系统能够与网卡进行通信和控制。网卡是硬件,它提供了与网络连接的物理接口。**当操作系统需要发送数据时,它会将数据发送给以太网驱动程序,驱动程序再将数据封装成帧传递给网卡进行传输。同样地,当网卡接收到数据时,它会将数据传递给驱动程序,驱动程序再将数据传递给操作系统进行处理。**以太网驱动程序与网卡之间通过特定的接口和协议进行通信,以确保数据的正确传输和接收。
- 如果有交换机的话(一般路由器会兼有交换机的功能),网卡将帧发送到交换机中后,交换机会根据帧中的目标MAC地址查找对应的端口,并将帧转发到该端口。如果交换机不知道目标MAC地址在哪个端口,它可能会发送ARP请求来查询目标MAC地址。
- 在没有交换机的情况下,如果局域网是一个简单的点对点或总线型网络(这在现代网络中很少见,但在某些老旧的网络架构或特定应用中可能仍然存在):
- 点对点连接:如果局域网中只有两个主机,并且它们之间是通过点对点连接(如直接连接的两根网线或一个点对点设备)进行通信的,那么源主机发送的帧将直接到达目的主机,无需经过任何中间设备。
- 在总线型网络中,所有的主机都连接在同一条通信电缆(称为总线)上。源主机将帧发送到本地网络后,这个帧就会在整个本地网络上进行传播。总线上的所有主机都会接收到这个帧,但是只有目标MAC地址与帧中指定的目标MAC地址相匹配的主机才会处理这个帧。其他主机则会忽略这个帧。
3.目标主机:
- 当帧到达目标主机时,数据链路层会解封装帧,提取IP数据包,并将其传递给网络层。
- 网络层解封装IP数据包,提取传输层的数据段或数据报,并将其传递给传输层。
- 传输层解封装数据段或数据报,提取应用层的数据,并将其传递给应用层。
**在同一网段时,两台主机通信不需要经过路由器,直接网卡到网卡。**因为当两台主机在同一网段时,它们之间的通信是直接的,它们之间的通信通常不会经过路由器(Router)。路由器主要用于连接不同的网络,如局域网与广域网(WAN)或两个不同的局域网,并基于IP地址中的网络部分(网络号或子网号)来决定数据包的转发路径。
(2)不同网段的两台计算机通信过程
如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示:
- 链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(即从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。
- 网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识,Internet上有大量路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层(网络层)的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉链路层和网络层两层首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。
- 数据包通常是通过网卡先发送到交换机,再从交换机发送路由器(通常路由器一般具备交换机的功能,所以很多也是直接发送到路由器),然后路由器根据路由表决定下一个发送的路由。
- 网络层负责点到点(ptop,point-to-point)的传输(这里的"点"指路由器,不过在同一网段时两台主机不需要经过路由器,直接网卡到网卡),而传输层负责端到端(etoe,end-to-end)的传输(这里的"端"通常指的是源主机上的应用进程和目的主机上的应用进程),传输层可选择TCP或UDP协议。
(3)目的主机收到数据包后的解包过程
目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?其过程如下:
- 以太网驱动程序首先根据以太网首部中的"上层协议"字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。
- 假如是IP数据报,IP协议再根据IP首部中的"上层协议"字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。
- 假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的"端口号"字段确定应该将应用层数据交给哪个用户进程。IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。
虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。
end