Cómo está conectada la red (18): pasar el paquete de respuesta del servidor de IP a TCP

¡Acostúmbrate a escribir juntos! Este es el día 16 de mi participación en el "Desafío de actualización de abril del nuevo plan diario de Nuggets", haga clic para ver los detalles del evento .

prefacio

En el artículo anterior describimos cómo el módulo IP genera encabezados IP y encabezados MAC. Después de completar el trabajo del módulo IP, es el turno de la tarjeta de red para enviar paquetes de red. Esta parte implica convertir paquetes IP en señales eléctricas u ópticas y enviarlas. No estudiaremos esta parte por el momento, y exploraremos directamente el proceso de pasar el paquete de respuesta del servidor de IP a TCP.

Glosario

ICMP

ICMP (Protocolo de mensajes de control de Internet) Protocolo de mensajes de control de Internet. Es un protocolo propio del conjunto de protocolos TCP/IP. Se utiliza para pasar mensajes de control entre hosts IP y enrutadores. El mensaje de control se refiere al mensaje del texto de la red, como si la red es accesible, si el host es accesible y si la ruta está disponible. Aunque estos mensajes de control no transmiten datos de usuario, juegan un papel importante en la transmisión de datos de usuario.

ICMP utiliza el soporte básico de IP como si fuera un protocolo de nivel superior, pero ICMP es en realidad una parte integral de IP y debe ser implementado por cada módulo de IP.

Pasos de trabajo del módulo IP

Echemos un vistazo a los pasos de trabajo específicos del módulo IP.

Supongamos que el servidor web devuelve un paquete de red, entonces, ¿qué procesamiento hará la pila de protocolos? El tipo de Ethernet del paquete devuelto por el servidor debe ser  0800, por lo que el controlador de la tarjeta de red lo entregará a la pila de protocolos TCP/IP para su procesamiento.

Entonces es el turno del módulo IP para trabajar primero.

El primer paso es verificar el encabezado de IP para ver si el formato es correcto. Si no hay problema con el formato, el siguiente paso es verificar la dirección IP del destinatario. Si el dispositivo que recibe el paquete de red es una computadora cliente de Windows, la dirección IP del receptor del paquete devuelto por el servidor debe ser la misma que la dirección de la tarjeta de red del cliente.Después de verificar y confirmar, podemos recibir el paquete.

如果接收方 IP 地址不是自己的地址,那一定是发生了什么错误。客户端计算机不负责对包进行转发,因此不应该收到不是发给自己的包(如果是服务器就不一定了。服务器的操作系统具备和路由器相同的包转发功能,当打开这一功能时,它就可以像路由器一样对包进行转发。在这种情况下,当收到不是自己的包的时候,就会像路由器一样执行包转发操作。)。

当发生这样的错误时,IP 模块会通过 ICMP 消息将错误告知发送方。ICMP 规定了各种类型的消息。让我们遇到这个错误时,IP 模块会通过 Destination unreachable 消息通知对方。

主要的 ICMP 消息如下表所示:

消息 类型 含义
Echo reply 0 响应 Echo 消息
Destination unreachable 3 出于某些原因包没有到达目的地而是被丢弃,则通过此消息通知发送方。可能的原因包括目标 IP 地址在路由表中不存在;目标端口号不存在对应的套接字;需要分片,但分片被禁用
Source quench 4 当发送的包数量超过路由器的转发能力时,超过的部分会被丢弃,这是会通过这一消息通知发送方。但是,并不是说遇到这种情况一定会发这一消息。当路由器的性能不足时,可能连这条消息都不发送,就直接把多余的包丢弃了。当发送方收到这条消息时,必须降低发送速
Redirect 5 当查询路由表后判断该包的入口和出口为同一个网络接口时,则表示这个包不需要该路由器转发,可以由发送方直接发送给下一个路由器。遇到这种情况时,路由器会发送这条消息,给出下一个路由器的 IP 地址,指示发送方直接发送过去
Echo 8 ping 命令发送的消息。收到这条消息的设备需返回一个 Echo reply 消息,以便确认通信对象是否存在
Time exceeded 11 由于超过了 IP 头部中的 TTL 字段表示的存活时间而被路由器丢弃,此时路由器会向发送方发送这条消息
Parameter problem 12 由于 IP 头部字段存在错误而被丢弃, 此时会向发送方发送这条消息

如果接收方 IP 地址正确,则这个包会被接受下来,这是还需要完成另外一项工作。IP 协议有一个叫做分片的功能,简单来说,网线和局域网中只能传送小包,因此需要将大的包切分成多个小包。如果接收到的包是经过分片的,那么 IP 模块会将它们还原成原始的包。

分片的包会在 IP 头部的标志字段中进行标记,当收到分片的包时,IP 模块会将其暂存在内部的内存空间中,然后等待 IP 头部中具有相同 ID 的包全部到达,这是因为同一个包的所有分片都具有相同的 ID。

此外,IP 头部还有一个分片偏移量(fragment offset)字段,它表示当前分片在整个包中所处的位置。

根据这些信息,在所有分片全部收到之后,就可以将它们还原成原始的包,这个操作叫做 分片重组

到这里,IP 模块的工作就结束了,接下来包会被交给 TCP 模块。TCP 模块会根据 IP 头部中的接收方和发送方 I P地址,以及 TCP 头部中的接收方和发送方端口号来查找对应的套接字。找到对应的套接字之后,就可以根据套接字中记录的通信状态,执行相应的操作了。例如,如果包的内容是应用程序数据,则返回确认接收的包,并将数据放入缓冲区,等待应用程序来读取;如果是建立或断开连接的控制包,则返回相应的响应控制包,并告知应用程序建立和断开连接的操作状态。

参考文档

  • 《网络是怎样连接的》—— 户根勤

往期文章

Supongo que te gusta

Origin juejin.im/post/7087515568428810271
Recomendado
Clasificación