Optimum PB-TNC Batch and PA-TNC Message Sizes
Maximum PDU Sizes
The default TLS maximum fragment length (RFC 6066) is 2^14 = 16'384
bytes. Therefore in order to minimize the TLS fragmentation overhead, the optimum
maximum TLS Application Data Record length is a multiple of 16'384
bytes.
On the other hand the maximum size of an EAP message (RFC 3748) is
restricted to 2^16 - 1 = 65'535
bytes due to the two-octet Length
field.
This limits the size of the PT-EAP (RFC 7171) messages tunneled via
the EAP-TTLS protocol which itself has a fragmentation mechanism with a relatively
small fragment_size
so that an EAP-TTLS AVP fragment fits into a single IKEv2 UDP datagram.
The following table shows in the first column the maximum possible size and in
the remaining four columns the optimum sizes for various PT-TNC, PB-TNC, and PA-TNC
Protocol Data Units (PDUs). The maximum PB-TNC batch size (max_batch_size
)
and the maximum PA-TNC message size (max_message_size
) can be set in the
tnccs-20
plugin
subsection of strongswan.conf
.
Since writing of a lot of new entries into the SQLite database on the TNC server side is usually the speed bottleneck during a TNC measurement, especially with the IMA (Linux Integrity Measurement Architecture) or SWIMA (Software Inventory Message and Attributes) applications, it is recommended to use the reduced values shown in the configuration example listed below instead of the default values. This avoids IKEv2 timeouts with PT-EAP transport due to overly long TNC database processing times.
Type | Header | Size | Size | Size | Size | Size |
---|---|---|---|---|---|---|
TLS AppData Record |
4 * 16'384 + 7 |
4 * 16'384 |
3 * 16'384 |
2 * 16'384 |
1 * 16'384 |
|
8 |
65'543 |
65'536 |
49'152 |
32'768 |
16'384 |
|
6 |
65'535 |
65'528 |
49'144 |
32'760 |
16'376 |
|
8 |
65'529 |
65'522 |
49'138 |
32'754 |
16'370 |
|
12 |
65'521 |
65'514 |
49'130 |
32'746 |
16'362 |
|
12 |
65'509 |
65'502 |
49'118 |
32'734 |
16'350 |
|
8 |
65'497 |
65'490 |
49'106 |
32'722 |
16'338 |
|
12 |
65'489 |
65'482 |
49'098 |
32'714 |
16'330 |
|
Attribute Value |
65'477 |
65'470 |
49'086 |
32'702 |
16'318 |
|
65'473 |
65'466 |
49'082 |
32'698 |
16'314 |
||
Comments |
max. size |
IMA/SWIMA |
EAP-TTLS AVP Header (8 bytes)
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | AVP Code | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V M r r r r r r| AVP Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
PT-EAP Message Header (6 bytes)
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Code | Identifier | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Flags | Ver | Data ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
PB-TNC Batch Header (8 bytes)
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version |D| Reserved | B-Type| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Batch Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
PB-TNC Message Header (12 bytes)
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags | PB-TNC Vendor ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PB-TNC Message Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PB-TNC Message Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PB-TNC Message Value (Variable Length) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
PB-PA Message Header (12 Bytes)
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags | PA Message Vendor ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PA Subtype | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Posture Collector Identifier | Posture Validator Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PA Message Body (Variable Length) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
PA-TNC Message Header (8 bytes)
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Message Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
PA-TNC Attribute Header (12 bytes)
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags | PA-TNC Attribute Vendor ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PA-TNC Attribute Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | PA-TNC Attribute Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Attribute Value (Variable Length) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
IF-M Segment Envelope Attribute Value
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags | Base Message ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Segment Value (Variable Length) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Configuration Example
Here is an example strongswan.conf
configuration file:
libtnccs { plugins { tnccs-20 { max_batch_size = 32754 max_message_size = 32722 } } }
PA-TNC Message Segmentation
If a PA-TNC or TCG TNC IF-M message larger than max_message_size
has to be transported via PT-EAP then the TCG TNC IF-M Segmentation mechanism
which defines the following PA-TNC attributes in the TCG
namespace:
- Segmentation Contract Request
-
Request to establish a Segmentation Contract.
- Segmentation Contract Response
-
Indicate acceptance of a Segmentation Contract.
- Segment Envelope
-
Send a Message Segment as part of a Segmented Message Exchange.
- Next Segment
-
Request the next Message Segment in a Segmented Message Exchange.
- Cancel
-
Cancel a Segmentation Contract and/or an ongoing Segmented Message Exchange.
can be used to split up the PA-TNC message and transport the segments in two or
more consecutive PA-TNC Segment
Envelope
attributes.
Example
Assuming the maximum PA-TNC message size of 32'722
bytes from the configuration
example above, a PA-TNC message of this size fits
exactly into a single PB-TNC batch with the maximum size of 32'754
bytes.
If the PA-TNC message size is increased by only one octet to 32'723
bytes, then
this PA-TNC message is split up by the TCG TNC IF-M Segmentation mechanism
into a first segment of 32'698
bytes and a second segment of 25
bytes.
Each segment value is embedded in a PA-TNC
Segment Envelope
attribute.
The first attribute inserted in an outer PA-TNC message fits exactly into a PB-TNC
batch of the maximum size of 32'754
bytes, whereas the second attribute is
transferred in a second PB-TNC batch with a small size of 81
bytes, after
having received a PA-TNC Next Segment
attribute from the TNC peer.