# TCP

class `ryu.lib.packet.tcp.``tcp`(src_port=1, dst_port=1, seq=0, ack=0, offset=0, bits=0, window_size=0, csum=0, urgent=0, option=None)

  TCP (RFC 793) header encoder/decoder class.

  An instance has the following attributes at least. Most of them are same to the on-wire counterparts but in host byte order. __init__ takes the corresponding args in this order.

  Attribute | Description
  --- | ---
  src_port | Source Port
  dst_port | Destination Port
  seq | Sequence Number
  ack | Acknowledgement Number
  offset | Data Offset (0 means automatically-calculate when encoding)
  bits | Control Bits
  window_size | Window
  csum | Checksum (0 means automatically-calculate when encoding)
  urgent | Urgent Pointer
  option | List of `TCPOption` sub-classes or an bytearray containing options. None if no options.

  `has_flags`(*flags)

    Check if flags are set on this packet.

    returns boolean if all passed flags is set

    Example:

        >>> pkt = tcp.tcp(bits=(tcp.TCP_SYN | tcp.TCP_ACK))
        >>> pkt.has_flags(tcp.TCP_SYN, tcp.TCP_ACK)
        True

  classmethod `parser`(buf)

    Decode a protocol header.

    This method is used only when decoding a packet.

    Decode a protocol header at offset 0 in bytearray buf. Returns the following three objects.

    - An object to describe the decoded header.
    - A packet_base.PacketBase subclass appropriate for the rest of the packet. None when the rest of the packet should be considered as raw payload.
    - The rest of packet.
  `serialize`(payload, prev)

    Encode a protocol header.

    This method is used only when encoding a packet.

    Encode a protocol header. Returns a bytearray which contains the header.

    payload is the rest of the packet which will immediately follow this header.

    prev is a packet_base.PacketBase subclass for the outer protocol header. prev is None if the current header is the outer-most. For example, prev is ipv4 or ipv6 for tcp.serialize.