A data transmission method, comprising: sending, by a first device, a data read request to a second device, wherein the data read request is generated according to a remote direct memory access, RDMA, protocol, and carries a data read address and a second data write address, the data read address is a destination address of second target data stored in the second device, the second data write address is a destination address that is reserved in the first device and that is used to store the second target data read from the second device, the second target data is data that needs to be read by the first device from the second device, the data read request is an RDMA read request, and the RDMA read request comprises two RDMA extended transport header, RETH, fields separately carrying the data read address and the second data write address; receiving, by the first device, B RDMA packets from A RDMA packets sequentially sent by the second device according to a packet sequence number, PSN, sequence of the A RDMA packets, wherein the A RDMA packets are obtained by the second device by encapsulating the second target data read from the data read address, each of the A RDMA packets carries a PSN, A is a positive integer greater than or equal to 2, each of the A RDMA packets comprises the second data write address corresponding to data of the packet, the A RDMA packets comprises three types of packets: an RDMA read respond first packet, an RDMA read respond middle packet and an RDMA read respond last packet, and the three types of packets comprise RETH field carrying the second data write address; directly obtaining, by the first device, the second data write address of each RDMA packet from each of the successfully received B RDMA packets, wherein B is a positive integer less than or equal to A; and writing, by the first device, data of each of the B RDMA packets into storage space of the second data write address corresponding to the RDMA packet. sending, by a first device, a data read request to a second device, wherein the data read request is generated according to a remote direct memory access, RDMA, protocol, and carries a data read address and a second data write address, the data read address is a destination address of second target data stored in the second device, the second data write address is a destination address that is reserved in the first device and that is used to store the second target data read from the second device, the second target data is data that needs to be read by the first device from the second device, the data read request is an RDMA read request, and the RDMA read request comprises two RDMA extended transport header, RETH, fields separately carrying the data read address and the second data write address; receiving, by the first device, B RDMA packets from A RDMA packets sequentially sent by the second device according to a packet sequence number, PSN, sequence of the A RDMA packets, wherein the A RDMA packets are obtained by the second device by encapsulating the second target data read from the data read address, each of the A RDMA packets carries a PSN, A is a positive integer greater than or equal to 2, each of the A RDMA packets comprises the second data write address corresponding to data of the packet, the A RDMA packets comprises three types of packets: an RDMA read respond first packet, an RDMA read respond middle packet and an RDMA read respond last packet, and the three types of packets comprise RETH field carrying the second data write address; directly obtaining, by the first device, the second data write address of each RDMA packet from each of the successfully received B RDMA packets, wherein B is a positive integer less than or equal to A; and writing, by the first device, data of each of the B RDMA packets into storage space of the second data write address corresponding to the RDMA packet.