如何在 tikz 中绘制网络数据包格式?

如何在 tikz 中绘制网络数据包格式?

我应该使用哪种类型的命令来绘制这样的网络数据包格式

        0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
     |V=2|P|X|  CC   |M|     PT      |       sequence number         | |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
     |                           timestamp                           | |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
     |           synchronization source (SSRC) identifier            | |
     +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |
     |            contributing source (CSRC) identifiers             | |
     |                               ....                            | |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
     |                   RTP extension (OPTIONAL)                    | |
   +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
   | |                          payload  ...                         | |
   | |                               +-------------------------------+ |
   | |                               | RTP padding   | RTP pad count | |
   +>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<+
   | ~                     SRTP MKI (OPTIONAL)                       ~ |
   | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
   | :                 authentication tag (RECOMMENDED)              : |
   | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
   |                                                                   |
   +- Encrypted Portion*                      Authenticated Portion ---+

我应该使用具有相对定位的矩阵、表格还是矩形节点?

类似的任务是绘制如下内容:

在此处输入图片描述

我设法使用以下代码做到了这一点,但我不确定这是否是最好的解决方案。

\begin{figure}[h]
    \centering
    \tikzstyle{rect}=[rectangle,minimum width=6cm,minimum height=1cm,draw=black,outer sep=0pt]
    \tikzstyle{base rect}=[rect,minimum width=12cm,outer sep=0pt]
    \tikzstyle{text rect}=[rectangle,minimum width=6cm,align=center,outer sep=0pt]
    \tikzstyle{multipart rect}=[rectangle split,rectangle split horizontal,rectangle split parts = 2,inner xsep = 0.0mm,outer sep=0pt,
    draw=black,align=center,minimum width=6cm,minimum height=1cm]
    \begin{tikzpicture}
        % ip
        \node (IP) [base rect,fill=gray!20] {IP};

        % media plane
        \node (UDP) [rect,fill=blue!20,above left=0.0cm of IP.north] {UDP};
        \node (ICE) [rect,fill=purple!20,above=0.0cm of UDP]  {ICE, STUN, TURN} ;
        \node (DTLS) [rect,fill=orange!20,above=0.0cm of ICE] {DTLS} ;
        \node (SRTP) [multipart rect,rectangle split part fill={green!20,yellow!20},above=0.0cm of DTLS] {\nodepart[text width=3cm]{one} SRTP \nodepart[text width=3cm]{two} SCTP} ;
        \node [text rect,above=0.0cm of SRTP]{Media Plane};

        % signaling plane
        \node (TCP) [rect,fill=blue!20,above right=0.0cm of IP.north]{TCP};
        \node (TLS) [rect,fill=purple!20,above=0.0cm of TCP] {TLS};
        \node (HTTP) [rect,fill=orange!20,above=0.0cm of TLS] {HTTP};
        \node (WS) [rect,fill=green!20,above=0.0cm of HTTP] {WS/Other};
        \node (SDP) [multipart rect,above=0.0cm of WS,rectangle split part fill={gray!20,yellow!20}] {\nodepart[text width=3cm]{one} SDP \nodepart[text width=3cm]{two} SIP/XMPP/\\Other};
        \node [text rect,above=0.0cm of SDP]{Signaling Plane};
    \end{tikzpicture}
    \caption{WebRTC stack.}
    \label{fig:webrtc-stack}
\end{figure}

答案1

带包的示例bytefield

\documentclass[border=2mm]{standalone}
\usepackage{xcolor}
\usepackage{bytefield}
\begin{document}
\begin{bytefield}[bitwidth=.2\linewidth, bitheight=7mm]{4}
\bitbox[]{2}{} & \bitbox[]{2}{Signaling plane}\\
\bitbox[]{2}[]{Media Plane} & \bitbox{1}[bgcolor=gray!30, bitheight=1cm]{SDP} & \bitbox{1}[bgcolor=yellow!30, bitheight=1cm]{SIP/XMPP/\\ Other}\\
\bitbox{1}[bgcolor=green!30]{SRTP} & \bitbox{1}[bgcolor=yellow!30]{SCTP} & \bitbox{2}[bgcolor=green!30]{WS/Other} \\
\bitboxes{2}[bgcolor=orange!30]{{DTLS} {HTTP}} \\
\bitboxes{2}[bgcolor=red!30]{{ICE, STUN, TURN} {TLS}} \\
\bitboxes{2}[bgcolor=blue!30]{{UDP} {TCP}} \\
\bitbox{4}[bgcolor=gray!30]{IP}\\
\end{bytefield}
\end{document}

编辑:可能\wordbox{1}[bgcolor=gray!30]{IP}正式比更好\bitbox{4}[bgcolor=gray!30]{IP}

在此处输入图片描述

相关内容