diff --git a/les/client_handler.go b/les/client_handler.go
index 73149975c3a537cefb1bc6f3428bb672303ef90d..e95996c51f6f65ccd8fd693c6c8c91e536ede468 100644
--- a/les/client_handler.go
+++ b/les/client_handler.go
@@ -19,6 +19,7 @@ package les
 import (
 	"context"
 	"math/big"
+	"math/rand"
 	"sync"
 	"sync/atomic"
 	"time"
@@ -388,7 +389,7 @@ func (pc *peerConnection) RequestHeadersByHash(origin common.Hash, amount int, s
 			return dp.(*serverPeer) == pc.peer
 		},
 		request: func(dp distPeer) func() {
-			reqID := genReqID()
+			reqID := rand.Uint64()
 			peer := dp.(*serverPeer)
 			cost := peer.getRequestCost(GetBlockHeadersMsg, amount)
 			peer.fcServer.QueuedRequest(reqID, cost)
@@ -412,7 +413,7 @@ func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip
 			return dp.(*serverPeer) == pc.peer
 		},
 		request: func(dp distPeer) func() {
-			reqID := genReqID()
+			reqID := rand.Uint64()
 			peer := dp.(*serverPeer)
 			cost := peer.getRequestCost(GetBlockHeadersMsg, amount)
 			peer.fcServer.QueuedRequest(reqID, cost)
@@ -429,7 +430,7 @@ func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip
 // RetrieveSingleHeaderByNumber requests a single header by the specified block
 // number. This function will wait the response until it's timeout or delivered.
 func (pc *peerConnection) RetrieveSingleHeaderByNumber(context context.Context, number uint64) (*types.Header, error) {
-	reqID := genReqID()
+	reqID := rand.Uint64()
 	rq := &distReq{
 		getCost: func(dp distPeer) uint64 {
 			peer := dp.(*serverPeer)
diff --git a/les/fetcher.go b/les/fetcher.go
index fc4c5e386a566b9e65b18051ba8ce73ccf9d60c3..a6d1c93c4b712a0b1f81a7300e5d95f59d359368 100644
--- a/les/fetcher.go
+++ b/les/fetcher.go
@@ -507,7 +507,7 @@ func (f *lightFetcher) requestHeaderByHash(peerid enode.ID) func(common.Hash) er
 			getCost: func(dp distPeer) uint64 { return dp.(*serverPeer).getRequestCost(GetBlockHeadersMsg, 1) },
 			canSend: func(dp distPeer) bool { return dp.(*serverPeer).ID() == peerid },
 			request: func(dp distPeer) func() {
-				peer, id := dp.(*serverPeer), genReqID()
+				peer, id := dp.(*serverPeer), rand.Uint64()
 				cost := peer.getRequestCost(GetBlockHeadersMsg, 1)
 				peer.fcServer.QueuedRequest(id, cost)
 
diff --git a/les/odr.go b/les/odr.go
index d45c6a1a5d0501a125f55831873f3a21f7a6f90d..10ff0854d38500e9ccf37e258da36ca0889e6e8e 100644
--- a/les/odr.go
+++ b/les/odr.go
@@ -18,6 +18,7 @@ package les
 
 import (
 	"context"
+	"math/rand"
 	"sort"
 	"time"
 
@@ -156,7 +157,7 @@ func (odr *LesOdr) RetrieveTxStatus(ctx context.Context, req *light.TxStatusRequ
 		var (
 			// Deep copy the request, so that the partial result won't be mixed.
 			req     = &TxStatusRequest{Hashes: req.Hashes}
-			id      = genReqID()
+			id      = rand.Uint64()
 			distreq = &distReq{
 				getCost: func(dp distPeer) uint64 { return req.GetCost(dp.(*serverPeer)) },
 				canSend: func(dp distPeer) bool { return canSend[dp.(*serverPeer).id] },
@@ -200,7 +201,7 @@ func (odr *LesOdr) RetrieveTxStatus(ctx context.Context, req *light.TxStatusRequ
 func (odr *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err error) {
 	lreq := LesRequest(req)
 
-	reqID := genReqID()
+	reqID := rand.Uint64()
 	rq := &distReq{
 		getCost: func(dp distPeer) uint64 {
 			return lreq.GetCost(dp.(*serverPeer))
diff --git a/les/retrieve.go b/les/retrieve.go
index 3174d498789bcaaf1e7e48bd89de18e627eabab6..307af04212559f6056c3822452f4a6b2b08e001e 100644
--- a/les/retrieve.go
+++ b/les/retrieve.go
@@ -18,8 +18,6 @@ package les
 
 import (
 	"context"
-	"crypto/rand"
-	"encoding/binary"
 	"fmt"
 	"sync"
 	"time"
@@ -430,10 +428,3 @@ func (r *sentReq) stop(err error) {
 func (r *sentReq) getError() error {
 	return r.err
 }
-
-// genReqID generates a new random request ID
-func genReqID() uint64 {
-	var rnd [8]byte
-	rand.Read(rnd[:])
-	return binary.BigEndian.Uint64(rnd[:])
-}
diff --git a/les/txrelay.go b/les/txrelay.go
index 9d29b2f23480446fc90db737539c5ee1bb88d781..40a51fb76f8edaae65b052e961c702dda6bb34ea 100644
--- a/les/txrelay.go
+++ b/les/txrelay.go
@@ -18,6 +18,7 @@ package les
 
 import (
 	"context"
+	"math/rand"
 	"sync"
 
 	"github.com/ethereum/go-ethereum/common"
@@ -117,7 +118,7 @@ func (ltrx *lesTxRelay) send(txs types.Transactions, count int) {
 		ll := list
 		enc, _ := rlp.EncodeToBytes(ll)
 
-		reqID := genReqID()
+		reqID := rand.Uint64()
 		rq := &distReq{
 			getCost: func(dp distPeer) uint64 {
 				peer := dp.(*serverPeer)