mirror of
https://github.com/impact-eintr/netstack.git
synced 2025-10-05 12:56:55 +08:00
tcp基本框架
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package header
|
||||
|
||||
import "netstack/tcpip"
|
||||
import (
|
||||
"encoding/binary"
|
||||
"netstack/tcpip"
|
||||
)
|
||||
|
||||
/*
|
||||
0 1 2 3
|
||||
@@ -24,6 +27,50 @@ import "netstack/tcpip"
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
*/
|
||||
|
||||
// TCPFields contains the fields of a TCP packet. It is used to describe the
|
||||
// fields of a packet that needs to be encoded.
|
||||
// tcp首部字段
|
||||
type TCPFields struct {
|
||||
// SrcPort is the "source port" field of a TCP packet.
|
||||
SrcPort uint16
|
||||
|
||||
// DstPort is the "destination port" field of a TCP packet.
|
||||
DstPort uint16
|
||||
|
||||
// SeqNum is the "sequence number" field of a TCP packet.
|
||||
SeqNum uint32
|
||||
|
||||
// AckNum is the "acknowledgement number" field of a TCP packet.
|
||||
AckNum uint32
|
||||
|
||||
// DataOffset is the "data offset" field of a TCP packet.
|
||||
DataOffset uint8
|
||||
|
||||
// Flags is the "flags" field of a TCP packet.
|
||||
Flags uint8
|
||||
|
||||
// WindowSize is the "window size" field of a TCP packet.
|
||||
WindowSize uint16
|
||||
|
||||
// Checksum is the "checksum" field of a TCP packet.
|
||||
Checksum uint16
|
||||
|
||||
// UrgentPointer is the "urgent pointer" field of a TCP packet.
|
||||
UrgentPointer uint16
|
||||
}
|
||||
|
||||
const (
|
||||
srcPort = 0
|
||||
dstPort = 2
|
||||
seqNum = 4
|
||||
ackNum = 8
|
||||
dataOffset = 12
|
||||
tcpFlags = 13
|
||||
winSize = 14
|
||||
tcpChecksum = 16
|
||||
urgentPtr = 18
|
||||
)
|
||||
|
||||
// TCP represents a TCP header stored in a byte array.
|
||||
type TCP []byte
|
||||
|
||||
@@ -34,3 +81,13 @@ const (
|
||||
// TCPProtocolNumber is TCP's transport protocol number.
|
||||
TCPProtocolNumber tcpip.TransportProtocolNumber = 6
|
||||
)
|
||||
|
||||
// SourcePort returns the "source port" field of the tcp header.
|
||||
func (b TCP) SourcePort() uint16 {
|
||||
return binary.BigEndian.Uint16(b[srcPort:])
|
||||
}
|
||||
|
||||
// DestinationPort returns the "destination port" field of the tcp header.
|
||||
func (b TCP) DestinationPort() uint16 {
|
||||
return binary.BigEndian.Uint16(b[dstPort:])
|
||||
}
|
||||
|
Reference in New Issue
Block a user