Sharpshooter est un protocole réseau de fiabilité utilisant UDP.
C'est un protocole orienté connexion, tout comme TCP.
Il n'a pas de caractéristiques de paquet, vous pouvez l'essayer pour contourner la détection de certaines caractéristiques du protocole et servir de base au protocole de transport d'application P2P.
À propos des instructions, vous pouvez voir l'exemple dir, j'ai fourni un exemple simple.
Si vous souhaitez convertir TCP en Sharpshooter, vous pouvez essayer https://github.com/soyum2222/sharpshooter-tunel.
| SIZE(4byte) | SQE(4byte) | CMD(2byte) | CONTENT(.......) |
SIZE:
contain SQE CMD CONTENT byte size . but not contain itself byte size .
SQE
sequence number, continuous data package, SQE is continuous.
CMD
0:ack
1:NORMAL
2:first handshack
3:second handshack(response first handshack)
4:third handshack
5:close connction(FIN)
6:response close
7:health check
8:response health
ACK package
| SIZE(4byte) | SQE(4byte) | CMD(2byte) | ackSQE1(4byte)| ackSQE2(4byte) | ackSQE3(4byte) | ... |
The package max length can't over DEFAULT_INIT_PACKSIZE or Sniper.packageSize
When receive ack like :
| SIZE(4byte) | SQE(4byte) | CMD(2byte) | ackSQE1(4byte)| ackSQE2(4byte) | ackSQE3(4byte) |
if ackSQE1 == ackSQE2 and ackSQE1 < ackSQE3 this situation means ackSQE1 to ackSQE3 is continuous number .
eg: receive data : |0|0|0|1|1|10| , this means other party sent ack 1 to 10.
ping.go
pong.go
envoyer_file.go
recevoir_file.go
essayez de transférer un fichier de 100 Mo
l'utilisation dépend de l'état du réseau et de la taille de la fenêtre d'envoi