Sau một thời gian dài chuẩn bị, cuối năm 1076, nhà Tống cử Quách Quỳ làm chủ tướng, Triệu Tiết làm phó tướng chỉ huy 2 cánh thủy bộ cùng tiến đánh Đại Việt.
Theo kế hoạch, quân Tống chia làm 2 cánh thủy bộ. Cánh quân trên bộ gồm 30 quân (10 vạn quân chủ lực và 20 vạn dân phu), trong đó có 6 vạn quân tinh nhuệ có kinh nghiệm trận mạc chống quân Liêu và Tây Hạ. Cánh quân thủy do Dương Tùng Tiên chỉ huy gồm 5 vạn quân theo đường biển tiến vào Đại Việt, hội với cánh quân trên bộ cùng tiến vào Thăng Long.
Ngày 8/1/1077, Quách Quỳ cùng Triệu Tiết chỉ huy 30 vạn quân Tống vượt ải Nam Quan tiến đánh Đại Việt. Sau những trận đánh nơi biên giới, quân Tống đã đến bờ bắc sông Như Nguyệt. Quách Qùy lệnh chưa tiến công ngay mà đợi cánh quân thủy tới cùng tác chiến.
Đợi mãi vẫn không thấy bóng dáng thủy quân, không thể chờ lâu hơn nữa, Quách Quỳ hạ lệnh tấn công, kết bè, bắc cầu phao vượt sông, nhưng quân bộ không có thủy quân hỗ trợ nên không sao vượt qua được phòng thủ của Đại Việt.
Vậy vì sao 5 vạn thủy quân Tống không đến được để yểm trợ cho bộ binh quân Tống?
Theo Tống sử thì kế hoạch ban đầu của Triều đình nhà Tống là thủy binh sẽ đi vòng đường biển đến tận Chiêm Thành, rồi phối hợp cùng quân Chiêm từ phía nam đánh ngược lên, tạo thành thế gọng kìm hai đầu bắc – nam đánh kẹp quân Đại Việt lại.
Tuy nhiên khi thực hiện thì nhà Tống nhận thấy để 5 vạn thủy quân đi đường biển xa xôi đòi hỏi hậu cần quá lớn, di chuyển xa quá vất vả khiến mất sức quân, trong khi thời gian tiến quân không thể đợi chờ. Mặt khác nếu để thủy quân phối hợp cùng với quân Chiêm Thành thì bộ binh quân Tống sẽ không được thủy quân yểm trợ. Vì thế nhà Tống ra kế hoạch là thủy quân sẽ men theo vùng biển, rồi rẽ vào sông Bạch Đằng đến phối hợp cùng cánh quân bộ tiến vào Thăng Long.
Thủy quân Tống với 5 vạn quân cùng hàng trăm chiến thuyền loại lớn tập kết ở Khâm châu, đến hết mùa thu năm 1076 thì bắt đầu tiến quân.
Lý Kế Nguyên được giao chỉ huy 2 vạn thủy quân Đại Việt chặn quân Tống. Ông tính toán quân Tống sẽ qua Đông Kênh để tiến vào sông Bạch Đằng nên quyết định cho quân mai phục ở đây.
Dương Tùng Tiên cho quân tiến vào Đại Việt. Do thấy không hề có lực lượng chống cự, Dương Tùng Tiên liền cho các chiến thuyền xếp thành hàng dọc theo Đông Kênh tiến vào cửa sông Bạch Đằng.
Quân Tống đến Đông Kênh thì lọt ngay vào trận địa mai phục của quân Đại Việt. Lý Kế Nguyên phát lệnh tấn công, các chiến thuyền của Đại Việt tiến thẳng vào thủy quân Tống mà đánh.
Đông Kênh không phải là địa hình rộng rãi, các chiến thuyền Đại Việt nhỏ nhẹ nên dễ dàng cơ động xoay chuyển, trong khi chiến thuyền quân Tống to lớn chậm chạp. Các chiến thuyền Đại Việt tập trung đánh từng chiến thuyền của quân Tống. Quân Tống lúng túng không biết đối phó thế nào, đứt đoạn không ứng cứu nổi cho nhau nên bị thiệt hại nặng.
Thấy tình thế bất lợi, Dương Tùng Tiên lệnh cho quân rút về cửa Đông Kênh ở phía bắc để chỉnh đốn lại lực lượng. Thuyền quân Việt nhỏ di chuyển nhanh hơn liền đuổi theo quyết không cho quân Tống có thời gian chỉnh đốn lực lượng. Hai bên giao đấu nhiều trận lớn nhỏ và quân Việt đều giành chiến thắng, hàng vạn quân Tống bị tiêu diệt.
Dương Tùng Tiên phải cho quân chạy ra biển rút về tận vùng biển Khâm châu và Liêm châu lập thủy trại phòng thủ.
Dương Tùng Tiên cho quân ngoài biển, thua trận nên không dám vào bờ, còn sai hai viên Hiệu dụng là Phàn Thực và Hoàng Tông Khánh mang thư cùng một tốp thuyền nhỏ đến Chiêm Thành thúc giục tiến quân như đã hẹn trước. Thực ra việc làm này là thừa vì Chiêm Thành cùng Khmer đã tiến quân rồi.
Phải đến cuối tháng 4/1077, khi mà bộ binh quân Tống thất trận rút về nước rồi, thì Dương Tùng Tiên mới cho quân vào bờ.
Như vậy 5 vạn thủy quân Tống không tiến vào Đại Việt đã khiến chủ tướng Quách Quỳ đợi trong vô ích. Quân Tống không được thủy quân yểm trợ nên không sao vượt qua phòng tuyến quân Đại Việt trên sông Như Nguyệt. Sau đó bằng một trận đánh, Lý Thường Kiệt đã khiến quân Tống tan rã phải chấp nhận nghị hòa rút lui.
Liên quân Chiêm Thành – Khmer đến sát phía nam Thăng Long, nghe tin quân Tống bại trận thì sợ hãi mà tự động rút lui.
Chiến thắng của Lý Kế Nguyên cùng thủy quân Đại Việt tại Đông Kênh mang ý nghĩa vô cùng quan trọng giúp Đại Việt đánh tan gọng kìm liên quân Tống – Chiêm Thành – Khmer.
Sau này Lý Kế Nguyên còn tham gia cuộc chiến trường kỳ nhằm lấy lại các vùng đất bị nhà Tống chiếm mất.