1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
|
Network Working Group D. Newman
Request for Comments: 4814 Network Test
Category: Informational T. Player
Spirent Communications
March 2007
Hash and Stuffing: Overlooked Factors in Network Device Benchmarking
Status of This Memo
This memo provides information for the Internet community. It does
not specify an Internet standard of any kind. Distribution of this
memo is unlimited.
Copyright Notice
Copyright (C) The IETF Trust (2007).
Abstract
Test engineers take pains to declare all factors that affect a given
measurement, including intended load, packet length, test duration,
and traffic orientation. However, current benchmarking practice
overlooks two factors that have a profound impact on test results.
First, existing methodologies do not require the reporting of
addresses or other test traffic contents, even though these fields
can affect test results. Second, "stuff" bits and bytes inserted in
test traffic by some link-layer technologies add significant and
variable overhead, which in turn affects test results. This document
describes the effects of these factors; recommends guidelines for
test traffic contents; and offers formulas for determining the
probability of bit- and byte-stuffing in test traffic.
Newman & Player Informational [Page 1]
^L
RFC 4814 Hash and Stuffing March 2007
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Requirements . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. General Considerations . . . . . . . . . . . . . . . . . . . . 4
3.1. Repeatability . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Randomness . . . . . . . . . . . . . . . . . . . . . . . . 4
4. Packet Content Variations . . . . . . . . . . . . . . . . . . 5
4.1. Problem Statement . . . . . . . . . . . . . . . . . . . . 5
4.2. IEEE 802 MAC Addresses . . . . . . . . . . . . . . . . . . 7
4.2.1. Randomized Sets of MAC Addresses . . . . . . . . . . . 8
4.3. MPLS Addressing . . . . . . . . . . . . . . . . . . . . . 9
4.4. Network-layer Addressing . . . . . . . . . . . . . . . . . 9
4.5. Transport-Layer Addressing . . . . . . . . . . . . . . . . 10
4.6. Application-Layer Patterns . . . . . . . . . . . . . . . . 10
5. Control Character Stuffing . . . . . . . . . . . . . . . . . . 11
5.1. Problem Statement . . . . . . . . . . . . . . . . . . . . 11
5.2. PPP Bit-Stuffing . . . . . . . . . . . . . . . . . . . . . 12
5.2.1. Calculating Bit-Stuffing Probability . . . . . . . . . 14
5.2.2. Bit-Stuffing for Finite Strings . . . . . . . . . . . 15
5.2.3. Applied Bit-Stuffing . . . . . . . . . . . . . . . . . 16
5.3. POS Byte-Stuffing . . . . . . . . . . . . . . . . . . . . 16
5.3.1. Nullifying ACCM . . . . . . . . . . . . . . . . . . . 17
5.3.2. Other Stuffed Characters . . . . . . . . . . . . . . . 17
5.3.3. Applied Byte-Stuffing . . . . . . . . . . . . . . . . 17
6. Security Considerations . . . . . . . . . . . . . . . . . . . 18
7. Normative References . . . . . . . . . . . . . . . . . . . . . 19
Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 20
Appendix B. Proof of Formula for Finite Bit-Stuffing . . . . . . 20
Appendix C. Explicit Calculation of Bit-Stuffing Overhead for
IPv4 . . . . . . . . . . . . . . . . . . . . . . . . 21
Appendix D. Explicit Calculation of Bit-Stuffing Overhead for
IPv6 . . . . . . . . . . . . . . . . . . . . . . . . 23
Appendix E. Terminology . . . . . . . . . . . . . . . . . . . . . 24
Newman & Player Informational [Page 2]
^L
RFC 4814 Hash and Stuffing March 2007
1. Introduction
Experience in benchmarking networking devices suggests that the
contents of test traffic can have a profound impact on test results.
For example, some devices may forward randomly addressed traffic
without loss, but drop significant numbers of packets when offered
packets containing nonrandom addresses.
Methodologies such as [RFC2544] and [RFC2889] do not require any
declaration of packet contents. These methodologies do require the
declaration of test parameters such as traffic distribution and
traffic orientation, and yet packet contents can have at least as
great an impact on test results as the other factors. Variations in
packet contents also can lead to non-repeatability of test results:
Two individuals may follow methodology procedures to the letter, and
still obtain very different results.
A related issue is the insertion of stuff bits or bytes by link-layer
technologies using PPP with High-Level Data Link Control (HDLC)-like
framing. This stuffing is done to ensure sequences in test traffic
will not be confused with control characters.
Stuffing adds significant and variable overhead. Currently there is
no standard method for determining the probability that stuffing will
occur for a given pattern, and thus no way to determine what impact
stuffing will have on test results.
This document covers two areas. First, we discuss strategies for
dealing with randomness and nonrandomness in test traffic. Second,
we present formulas to determine the probability of bit- and byte-
stuffing on Point-to-Point Protocol (PPP) and Packet over SONET (POS)
circuits. In both areas, we provide recommendations for obtaining
better repeatability in test results.
Benchmarking activities as described in this memo are limited to
technology characterization using controlled stimuli in a laboratory
environment, using dedicated address space.
The benchmarking network topology will be an independent test setup
and MUST NOT be connected to devices that may forward the test
traffic into a production network, or misroute traffic to the test
management network.
2. Requirements
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
Newman & Player Informational [Page 3]
^L
RFC 4814 Hash and Stuffing March 2007
3. General Considerations
3.1. Repeatability
Repeatability is a desirable trait in benchmarking, but it can be an
elusive goal. It is a common but mistaken belief that test results
can always be recreated provided the device under test and test
instrument are configured identically for each test iteration. In
fact, even identical configurations may introduce some variations in
test traffic, such as changes in timestamps, TCP sequence numbers, or
other common phenomena.
While this variability does not necessarily invalidate test results,
it is important to recognize the existing variation. Exact bit-for-
bit repeatability of test traffic is a hard problem. A simpler
approach is to acknowledge that some variation exists, characterize
that variation, and describe it when analyzing test results.
Another issue related to repeatability is the avoidance of randomness
in test traffic. For example, benchmarking experience with some IEEE
802.11 devices suggests that nonrandom media access control (MAC) and
IP addresses must be used across multiple trials. Although this
would seem to contradict some recommendations made in this document,
in fact either nonrandom or pseudorandom patterns may be more
desirable depending on the test setup. There are also situations
where it may be desirable to use combinations of the two, for example
by generating pseudorandom traffic patterns for one test trial and
then re-using the same pattern across all trials. The keywords in
this document are RECOMMENDs and not MUSTs with regard to the use of
pseudorandom test traffic patterns.
Note also that this discussion covers only repeatability, which is
concerned with variability of test results from trial to trial on the
same test bed. A separate concern is reproducibility, which refers
to the precision of test results obtained from different test beds.
Clearly, reproducibility across multiple test beds requires
repeatability on a single test bed.
3.2. Randomness
This document recommends the use of pseudorandom patterns in test
traffic under controlled lab conditions. The rand() functions
available in many programming languages produce output that is
pseudorandom rather than truly random. Pseudorandom patterns are
sufficient for the recommendations given in this document, provided
they produce output that is uniformly distributed across the pattern
space.
Newman & Player Informational [Page 4]
^L
RFC 4814 Hash and Stuffing March 2007
Specifically, for any random bit pattern of length L, the probability
of generating that specific pattern SHOULD equal 1 over 2 to the Lth
power.
4. Packet Content Variations
4.1. Problem Statement
The contents of test traffic can have a significant impact on metrics
such as throughput, jitter, latency, and loss. For example, many
network devices feed addresses into a hashing algorithm to determine
upon which path to forward a given packet.
Consider the simple case of an Ethernet switch with eight network
processors (NPs) in its switching fabric:
ingress
||
\/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ___ ___ ___ ___ ___ ___ ___ ___ |
|| | | | | | | | | | | | | | | | |
||NP0| |NP1| |NP2| |NP3| |NP4| |NP5| |NP6| |NP7| |
||___| |___| |___| |___| |___| |___| |___| |___| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
||
\/
egress
To assign incoming traffic to the various NPs, suppose a hashing
algorithm performs an exclusive-or (XOR) operation on the least
significant 3 bits of the source and destination MAC addresses in
each frame. (This is an actual example the authors have observed in
multiple devices from multiple manufacturers.)
In theory, a random distribution of source and destination MAC
addresses should result in traffic being uniformly distributed across
all eight NPs. (Instances of the term "random" in this document
refer to a random uniform distribution across a given address space.
Section 3.2 describes random uniform distributions in more detail.)
In practice, the actual outcome of the hash (and thus any test
results) will be very different depending on the degree of randomness
in test traffic.
Newman & Player Informational [Page 5]
^L
RFC 4814 Hash and Stuffing March 2007
Suppose the traffic is nonrandom so that every interface of the test
instrument uses this pattern in its source MAC addresses:
00:00:PP:00:00:01
where PP is the source interface number of the test instrument.
In this case, the least significant 3 bits of every source and
destination MAC address are 001, regardless of interface number.
Thus, the outcome of the XOR operation will always be 0, given the
same three least significant bits:
001 ^ 001 = 000
Thus, the switch will assign all traffic to NP0, leaving the other
seven NPs idle. Given a heavy enough load, NP0 and the switch will
become congested, even though seven other NPs are available. At
most, this device will be able to utilize approximately 12.5 percent
of its total capacity, with the remaining 87.5 percent of capacity
unused.
Now consider the same example with randomly distributed addresses.
In this case, the test instrument offers traffic using MAC addresses
with this pattern:
00:00:PP:00:00:RR
where PP is the source interface number of the test instrument and RR
is a pseudorandom number. In this case, there should be an equal
probability of the least significant 3 bits of the MAC address having
any value from 000 to 111 inclusive. Thus, the outcome of XOR
operations should be equally distributed from 0 to 7, and
distribution across NPs should also be equal (at least for this
particular 3-bit hashing algorithm). Absent other impediments, the
device should be able to utilize 100 percent of available capacity.
This simple example presumes knowledge on the tester's part of the
hashing algorithm used by the device under test. Knowledge of such
algorithms is not always possible beforehand, and in any event
violates the "black box" spirit of many documents produced by the
IETF Benchmarking Working Group (BMWG).
Therefore, this memo adds a new consideration for benchmarking
methodologies to select traffic patterns that overcome the effects of
nonrandomness, regardless of the hashing algorithms in use. The
balance of this section offers recommendations for test traffic
patterns to avoid these effects, starting at the link layer and
working up to the application layer.
Newman & Player Informational [Page 6]
^L
RFC 4814 Hash and Stuffing March 2007
4.2. IEEE 802 MAC Addresses
Test traffic SHOULD use pseudorandom patterns in IEEE 802 MAC
addresses. The following source and destination MAC address pattern
is RECOMMENDED:
(RR & 0xFC):PP:PP:RR:RR:RR
where (RR & 0xFC) is a pseudorandom number bitwise ANDed with 0xFC,
PP:PP is the 1-indexed interface number of the test instrument and
RR:RR:RR is a pseudorandom number.
The bitwise ANDing of the high-order byte in the MAC address with
0xFC sets the low-order two bits of that byte to 0, guaranteeing a
non-multicast address and a non locally administered address. Note
that the resulting addresses may violate IEEE 802 standards by using
organizationally unique identifiers (OUIs) not assigned to the test
port manufacturer. However, since these addresses will be used only
on isolated test networks there should be no possibility of mistaken
identity.
Test traffic SHOULD use PP:PP to identify the source interface number
of the test instrument. Such identification can be useful in
troubleshooting. Allocating 2 bytes of the MAC address for interface
identification allows for tests of up to 65,536 interfaces. A 2-byte
space allows for tests much larger than those currently used in
device benchmarking; however, tests involving more than 256
interfaces (fully utilizing a 1-byte space) are fairly common.
Note that the "PP:PP" designation refers to the source interface of
the test instrument, not the device under test/system under test
(DUT/SUT). There are situations where the DUT/SUT interface number
may change during the test; one example would be a test of wireless
LAN roaming. By referring to the (presumably static) source
interface number of the test instrument, test engineers can keep
track of test traffic regardless of any possible DUT/SUT changes.
Further, source interface numbers SHOULD be 1-indexed and SHOULD NOT
be zero-indexed. This avoids the low but nonzero probability of an
all-zeros MAC address. Some devices will drop frames with all-zeros
MAC addresses.
It is RECOMMENDED to use pseudorandom patterns in the least
significant 3 bytes of the MAC address. Using pseudorandom values
for the low-order 3 bytes means choosing one of 16.7 million unique
addresses. While this address space is vastly larger than is
currently required in lab benchmarking, it does assure more realistic
test traffic.
Newman & Player Informational [Page 7]
^L
RFC 4814 Hash and Stuffing March 2007
Note also that since only 30 of 48 bits in the MAC address have
pseudorandom values, there is no possibility of randomly generating a
broadcast or multicast value by accident.
4.2.1. Randomized Sets of MAC Addresses
It is common benchmarking practice for a test instrument to emulate
multiple hosts, even on a single interface. This is desirable in
assessing DUT/SUT scalability.
However, test instruments may emulate multiple MAC addresses by
incrementing and/or decrementing addresses from a fixed starting
point. This leads to situations, as described above in "Address
Pattern Variations", where hashing algorithms produce nonoptimal
outcomes.
The outcome can be nonoptimal even if the set of addresses begins
with a pseudorandom number. For example, the following source/
destination pairs will not be equally distributed by the 3-bit
hashing algorithm discussed above:
Source Destination
00:00:01:FC:B3:45 00:00:19:38:8C:80
00:00:01:FC:B3:46 00:00:19:38:8C:81
00:00:01:FC:B3:47 00:00:19:38:8C:82
00:00:01:FC:B3:48 00:00:19:38:8C:83
00:00:01:FC:B3:49 00:00:19:38:8C:84
00:00:01:FC:B3:4A 00:00:19:38:8C:85
00:00:01:FC:B3:4B 00:00:19:38:8C:86
00:00:01:FC:B3:4C 00:00:19:38:8C:87
Again working with our 3-bit XOR hashing algorithm, we get the
following outcomes:
101 ^ 000 = 101
110 ^ 001 = 111
111 ^ 010 = 101
000 ^ 011 = 011
001 ^ 100 = 101
010 ^ 101 = 111
011 ^ 110 = 101
100 ^ 111 = 011
Note that only three of eight possible outcomes are achieved when
incrementing addresses. This is actually the best case.
Incrementing from other combinations of pseudorandom address pairs
produces only one or two out of eight possible outcomes.
Newman & Player Informational [Page 8]
^L
RFC 4814 Hash and Stuffing March 2007
Every MAC address SHOULD be pseudorandom, not just the starting one.
When generating traffic with multiple addresses, it is RECOMMENDED
that all addresses use pseudorandom values. There are multiple ways
to use sets of pseudorandom numbers. One strategy would be for the
test instrument to iterate over an array of pseudorandom values
rather than incrementing/decrementing from a starting address. The
actual method is an implementation detail; in the end, any method
that uses multiple addresses with pseudorandom patterns will be
sufficient.
Experience with benchmarking of IEEE 802.11 devices suggests
suboptimal test outcomes may result if different pseudorandom MAC and
IP addresses are used from trial to trial. In such cases (not just
for 802.11 but for any device using IEEE 802 MAC and IP addresses),
testers MAY generate a pseudorandom set of MAC and IP addresses once,
or MAY generate a nonrandom set of MAC and IP addresses once. In
either case, the same MAC and IP addresses MUST be used in all
trials.
4.3. MPLS Addressing
Similar to L2 switches, multiprotocol label switching (MPLS) devices
make forwarding decisions based on a 20-bit MPLS label. Unless
specific labels are required, it is RECOMMENDED that uniformly random
values between 16 and 1,048,575 be used for all labels assigned by
test equipment. As per [RFC3032], this avoids using reserved MPLS
labels in the range of 0-15 inclusive.
4.4. Network-layer Addressing
When routers make forwarding decisions based solely on the
destination network address, there may be no potential for hashing
collision of source and destination addresses, as in the case of
Ethernet switching discussed earlier. However, the potential still
exists for hashing collisions at the network layer, and testers
SHOULD take this potential into consideration when crafting the
network-layer contents of test traffic.
For example, the equal cost multipath (ECMP) feature performs load-
sharing across multiple links. Routers implementing ECMP may perform
a hash of source and destination IP addresses in assigning flows.
Since multiple ECMP routes by definition have the same metric,
routers use some other "tie-breaker" mechanism to assign traffic to
each link. As far as the authors are aware, there is no standard
algorithm for ECMP link assignment. Some implementations perform a
hash of all bits of the source and destination IP addresses for this
Newman & Player Informational [Page 9]
^L
RFC 4814 Hash and Stuffing March 2007
purpose. Others may perform a hash on one or more bytes in the
source and destination IP addresses.
Just as in the case of MAC addresses, nonrandom IP addresses can have
an adverse effect on the outcome of ECMP link assignment decisions.
When benchmarking devices that implement ECMP or any other form of
Layer 3 aggregation, it is RECOMMENDED to use a randomly distributed
range of IP addresses. In particular, testers SHOULD NOT use
addresses that produce the undesired effects of address processing.
If, for example, a DUT can be observed to exhibit high packet loss
when offered IPv4 network addresses that take the form x.x.1.x/24,
and relatively low packet loss when the source and destination
network addresses take the form of x.x.R.x/24 (where R is some random
value between 0 and 9), test engineers SHOULD use the random pattern.
4.5. Transport-Layer Addressing
Some devices with transport- or application-layer awareness use TCP
or UDP port numbers in making forwarding decisions. Examples of such
devices include load balancers and application-layer firewalls.
Test instruments have the capability of generating packets with
random TCP and UDP source and destination port numbers. Known
destination port numbers are often required for testing application-
layer devices. However, unless known port numbers are specifically
required for a test, it is RECOMMENDED to use pseudorandom and
uniformly distributed values for both source and destination port
numbers.
In addition, it may be desirable to pick pseudorandom values from a
selected pool of numbers. Many services identify themselves through
use of reserved destination port numbers between 1 and 49151
inclusive. Unless specific port numbers are required, it is
RECOMMENDED to pick randomly distributed destination port numbers
between these lower and upper boundaries.
Similarly, clients typically choose source port numbers in the space
between 1024 and 65535 inclusive. Unless specific port numbers are
required, it is RECOMMENDED to pick randomly distributed source port
numbers between these lower and upper boundaries.
4.6. Application-Layer Patterns
Many measurements require the insertion of application-layer
header(s) and payload into test traffic. Application-layer packet
contents offer additional opportunities for stuffing to occur, and
may also present nonrandom outcomes when fed through application-
Newman & Player Informational [Page 10]
^L
RFC 4814 Hash and Stuffing March 2007
layer-aware hashing algorithms. Given the vast number of
application-layer protocols in use, we make no recommendation for
specific test traffic patterns to be used; however, test engineers
SHOULD be aware that application-layer traffic contents MAY produce
nonrandom outcomes with some hashing algorithms. The same issues
that apply with lower-layer traffic patterns also apply at the
application layer. As discussed in section 5, the potential for
stuffing exists with any part of a test packet, including
application-layer contents. For example, some traffic generators
insert fields into packet payloads to distinguish test traffic.
These fields may contain a transmission timestamp; sequence number;
test equipment interface identifier and/or "stream" number; and a
cyclic redundancy check (CRC) over the contents of the test payload
or test packet. All these fields are potential candidates for
stuffing.
5. Control Character Stuffing
5.1. Problem Statement
Link-layer technologies that use High-Level Data Link Control (HDLC)-
like framing may insert an extra bit or byte before each instance of
a control character in traffic. These "stuffing" insertions prevent
confusion with control characters, but they may also introduce
significant overhead. Stuffing is data-dependent; thus, selection of
different payload patterns will result in frames transmitted on the
media that vary in length, even though the original frames may all be
of the same length.
The overhead of these escape sequences is problematic for two
reasons. First, explicitly calculating the amount of overhead can be
non-trivial or even impossible for certain types of test traffic. In
such cases, the best testers can do is to characterize the
probability that an escape sequence will occur for a given pattern.
This greatly complicates the requirement of declaring exactly how
much traffic is offered to a DUT/SUT.
Second, in the absence of characterization and compensation for this
overhead, the tester may unwittingly congest the DUT/SUT. For
example, if a tester intends to offer traffic to a DUT at 95 percent
of line rate, but the link-layer protocol introduces an additional 1
percent of overhead to escape control characters, then the aggregate
offered load will be 96 percent of line rate. If the DUT's actual
channel capacity is only 95 percent, congestion will occur and the
DUT will drop traffic even though the tester did not intend this
outcome.
Newman & Player Informational [Page 11]
^L
RFC 4814 Hash and Stuffing March 2007
As described in [RFC1661] and [RFC1662], PPP and HDLC-like framing
introduce two kinds of escape sequences: bit- and byte-stuffing.
Bit-stuffing refers to the insertion of an escape bit on bit-
synchronous links. Byte-stuffing refers to the insertion of an
escape byte on byte-synchronous links. We discuss each in turn.
5.2. PPP Bit-Stuffing
[RFC1662], section 5.2, specifies that any sequence of five
contiguous "1" bits within a frame must be escaped by inserting a "0"
bit prior to the sequence. This escaping is necessary to avoid
confusion with the HDLC control character 0x7E, which contains six
"1" bits.
Consider the following PPP frame containing a TCP/IP packet. Not
shown is the 1-byte flag sequence (0x7E), at least one of which must
occur between frames.
The contents of the various frame fields can be described one of
three ways:
1. Field contents never change over the test duration. An example
would be the IP version number.
2. Field contents change over the test duration. Some of these
changes are known prior to the test duration. An example would
be the use of incrementing IP addresses. Some of these changes
are unknown. An example would be a dynamically calculated field
such as the TCP checksum.
3. Field contents may not be known. An example would be proprietary
payload fields in test packets.
Newman & Player Informational [Page 12]
^L
RFC 4814 Hash and Stuffing March 2007
In the diagram below, 30 out of 48 total bytes in the packet headers
are subject to change over the test duration. Additionally, the
payload field could be subject to change both content and size. The
fields containing the changeable bytes are given in ((double
parentheses)).
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address | Control | Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | ((Header Checksum)) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ((Source Address)) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ((Destination Address)) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ((Source Port)) | ((Destination Port)) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ((Sequence Number)) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ((Acknowledgment Number)) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| ((Window)) |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ((Checksum)) | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
/ ((payload)) /
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ((FCS (4 bytes) )) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
None of the other fields are known to contain sequences subject to
bit-stuffing, at least not in their entirety. Note that there is no
payload in this simple example; as noted in section 4.6, the payload
contents of test traffic often will present additional opportunities
for stuffing to occur, and MUST be taken into account when
calculating stuff probability.
Newman & Player Informational [Page 13]
^L
RFC 4814 Hash and Stuffing March 2007
Given the information at hand, and assuming static contents for the
rest of the fields, the challenge is to determine the probability
that bit-stuffing will occur.
5.2.1. Calculating Bit-Stuffing Probability
In order to calculate bit-stuffing probabilities, we assume that for
any string of length L, where b_n represents the "n"th bit of the
string and 1 <= n <= L, the probability of b_n equalling "1" is 0.5,
and the probability of b_n equalling "0" is 0.5. Additionally, the
value of b_n is independent of any other bits.
We can calculate the probability of bit-stuffing for both infinite
and finite strings of random bits. We begin with the infinite-string
case. For an infinitely long string of uniformly random bits, we
will need to insert a stuff bit if and only if state 5 is reached in
the following state table.
|--------------------<----------------------|
| |1
_______ __|__ _____ _____ _____ __|__
| | 1 | | 1 | | 1 | | 1 | | 1 | |
| start |--->| 1 |--->| 2 |--->| 3 |--->| 4 |--->| 5 |
|_______| |_____| |_____| |_____| |_____| |_____|
| | | | | | |
| |0 |0 |0 |0 |0 |0
|-<-|----<----|----<-----|----<-----|----<-----|----<-----|
Initially, we begin in the "start" state. A "1" bit moves us into
the next highest state, and a "0" bit returns us to the start state.
From state 5, a "1" bit takes us back to the 1 state and a "0" bit
returns us to "start".
From this state diagram we can build the following transition matrix:
\ To |
\ |
\ |
From \ | start 1 2 3 4 5
______\|_________________________________________________
start | 0.5 | 0.5 | 0.0 | 0.0 | 0.0 | 0.0
1 | 0.5 | 0.0 | 0.5 | 0.0 | 0.0 | 0.0
2 | 0.5 | 0.0 | 0.0 | 0.5 | 0.0 | 0.0
3 | 0.5 | 0.0 | 0.0 | 0.0 | 0.5 | 0.0
4 | 0.5 | 0.0 | 0.0 | 0.0 | 0.0 | 0.5
5 | 0.5 | 0.5 | 0.0 | 0.0 | 0.0 | 0.0
Newman & Player Informational [Page 14]
^L
RFC 4814 Hash and Stuffing March 2007
With this transition matrix we can build the following system of
equations. If P(x) represents the probability of reaching state x,
then:
P(start) = 0.5 * P(start) + 0.5 * P(1) + 0.5 * P(2) + 0.5 * P(3) +
0.5 * P(4) + 0.5 * P(5)
P(1) = 0.5 * P(start) + 0.5 * P(5)
P(2) = 0.5 * P(1)
P(3) = 0.5 * P(2)
P(4) = 0.5 * P(3)
P(5) = 0.5 * P(4)
P(start) + P(1) + P(2) + P(3) + P(4) + P(5) = 1
Solving this system of equations yields:
P(start) = 0.5
P(1) = 8/31
P(2) = 4/31
P(3) = 2/31
P(4) = 1/31
P(5) = 1/62
Thus, for an infinitely long string of uniformly random bits, the
probability of any individual bit causing a transition to state 5,
and thus causing a stuff, is 1/62.
5.2.2. Bit-Stuffing for Finite Strings
For a uniformly random finite bit string of length L, we can
explicitly count the number of bit-stuffs in the set of all possible
strings of length L. This count can then be used to calculate the
expected number of stuffs for the string.
Let f(L) represent the number of bit-stuffs in the set of all
possible strings of length L. Clearly, for 0 <= L <= 4, f(L) = 0 as
there are no strings of length 5. For L >= 5, f(L) = 2^(L-5) + (L-5)
* 2^(L-6) + f(L-5).
A proof of this formula can be found in Appendix B.
Now, the expected number of stuffing events, E[stuffs], can be found
by dividing the total number of stuffs in all possible strings by the
total number of strings. Thus for any L, E[stuffs] = f(L) / 2^L.
Newman & Player Informational [Page 15]
^L
RFC 4814 Hash and Stuffing March 2007
Similarly, the probability that any particular bit is the cause of a
bit-stuff can be calculated by dividing the total number of stuffs in
the set of all strings of length L by the total number of bits in the
set of all strings of length L. Hence for any L, the probability
that L_n, where 5 <= n <= L, caused a stuff is f(L) / (L * 2^L).
5.2.3. Applied Bit-Stuffing
The amount of overhead attributable to bit-stuffing may be calculated
explicitly as long as the expected number of stuff bits per frame,
E[bit-stuffs] is known. For long uniformly random bit-strings,
E[bit-stuffs] may be approximated by multiplying the length of the
string by 1/62.
% overhead = E[bit-stuffs] / framesize (in bits)
Given that the overhead added by bit-stuffing is approximately 1 in
62, or 1.6 percent, it is RECOMMENDED that testers reduce the maximum
intended load by 1.6 percent to avoid introducing congestion when
testing devices using bit-synchronous interfaces (such as T1/E1,
DS-3, and the like).
The percentage given above is an approximation. For greatest
precision, the actual intended load SHOULD be explicitly calculated
from the test traffic.
Note that the DUT/SUT may be able to forward intended loads higher
than the calculated theoretical maximum rate without packet loss.
This results from queuing on the part of the DUT/SUT. While a
device's throughput may be above this level, delay-related
measurements may be affected. Accordingly, it is RECOMMENDED to
reduce offered levels by the amount of bit-stuffing overhead when
testing devices using bit-synchronous links. This recommendation
applies for all measurements, including throughput.
5.3. POS Byte-Stuffing
[RFC1662] requires that "Each Flag Sequence, Control Escape octet,
and any octet which is flagged in the sending Async-Control-
Character-Map (ACCM), is replaced by a two octet sequence consisting
of the Control Escape octet followed by the original octet exclusive-
or'd with hexadecimal 0x20". The practical effect of this is to
insert a stuff byte for instances of up to 34 characters: 0x7E, 0x7D,
or any of 32 ACCM values.
A common implementation of PPP in HDLC-like framing is in PPP over
SONET/SDH (POS), as defined in [RFC2615].
Newman & Player Informational [Page 16]
^L
RFC 4814 Hash and Stuffing March 2007
As with the bit-stuffing case, the requirement in characterizing POS
test traffic is to determine the probability that byte-stuffing will
occur for a given sequence. This is much simpler to do than with
bit-synchronous links, since there is no possibility of overlap
across byte boundaries.
5.3.1. Nullifying ACCM
Testers can greatly reduce the probability of byte-stuffing by
configuring link partners to negotiate an ACCM value of 0x00. It is
RECOMMENDED that testers configure the test instrument(s) and DUT/SUT
to negotiate an ACCM value of 0x00 unless specific ACCM values are
required.
One instance where nonzero ACCM values are used is in the Layer 2
Tunneling Protocol (L2TP), as defined in [RFC2661], section 4.4.6.
When the default ACCM values are used, the probability of stuffing
for any given random byte is 34 in 256, or approximately 13.3
percent.
5.3.2. Other Stuffed Characters
If an ACCM value of 0x00 is negotiated, the only characters subject
to stuffing are the flag and control escape characters. Thus, we can
say that without ACCM the probability of stuffing for any given
random byte is 2 in 256, or approximately 0.8 percent.
5.3.3. Applied Byte-Stuffing
The amount of overhead attributable to byte-stuffing may be
calculated explicitly as long as the expected number of stuff bytes
per frame, E[byte-stuffs], is known. For long uniformly random byte-
strings, E[byte-stuffs] may be approximated by multiplying the length
of the string by the probability that any single byte is a stuff
byte.
% overhead = E[byte-stuffs] / framesize (in bytes)
When testing a DUT/SUT that implements PPP in HDLC-like framing and
L2TP (or any other technology that uses nonzero ACCM values), it is
RECOMMENDED that testers reduce the maximum intended load by 13.3
percent to avoid introducing congestion.
When testing a DUT/SUT that implements PPP in HDLC-like framing and
an ACCM value of 0x00, it is RECOMMENDED that testers reduce the
maximum intended load by 0.8 percent to avoid introducing congestion.
Newman & Player Informational [Page 17]
^L
RFC 4814 Hash and Stuffing March 2007
Note that the percentages given above are approximations. For
greatest precision, the actual intended load SHOULD be explicitly
calculated from the test traffic
Note also that the DUT/SUT may be able to forward intended loads
higher than the calculated theoretical maximum rate without packet
loss. This results from queuing on the part of the DUT/SUT. While a
device's throughput may be above this level, delay-related
measurements may be affected. Accordingly, it is RECOMMENDED to
reduce offered levels by the amount of byte-stuffing overhead when
testing devices using byte-synchronous links. This recommendation
applies for all measurements, including throughput.
6. Security Considerations
This document recommends the use of pseudorandom patterns in test
traffic. This usage requires a uniform distribution, but does not
have strict predictability requirements. Although it is not
sufficient for security applications, the rand() function of many
programming languages may provide a uniform distribution that is
usable for testing purposes in lab conditions. Implementations of
rand() may vary and provide different properties so test designers
SHOULD understand the distribution created by the underlying function
and how seeding the initial state affects its behavior.
[RFC2615], section 6, discusses a denial-of-service attack involving
the intentional transmission of characters that require stuffing.
This attack could consume up to 100 percent of available bandwidth.
However, the test networks described in BMWG documents generally
SHOULD NOT be reachable by anyone other than the tester(s).
Newman & Player Informational [Page 18]
^L
RFC 4814 Hash and Stuffing March 2007
7. Normative References
[RFC1661] Simpson, W., "The Point-to-Point Protocol (PPP)", STD 51,
RFC 1661, July 1994.
[RFC1662] Simpson, W., "PPP in HDLC-like Framing", STD 51, RFC 1662,
July 1994.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2544] Bradner, S. and J. McQuaid, "Benchmarking Methodology for
Network Interconnect Devices", RFC 2544, March 1999.
[RFC2615] Malis, A. and W. Simpson, "PPP over SONET/SDH", RFC 2615,
June 1999.
[RFC2661] Townsley, W., Valencia, A., Rubens, A., Pall, G., Zorn,
G., and B. Palter, "Layer Two Tunneling Protocol "L2TP"",
RFC 2661, August 1999.
[RFC2889] Mandeville, R. and J. Perser, "Benchmarking Methodology
for LAN Switching Devices", RFC 2889, August 2000.
[RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y.,
Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack
Encoding", RFC 3032, January 2001.
Newman & Player Informational [Page 19]
^L
RFC 4814 Hash and Stuffing March 2007
Appendix A. Acknowledgements
The authors gratefully acknowledge reviews and contributions by Tom
Alexander, Len Ciavattone, Robert Craig, John Dawson, Neil Carter,
Glenn Chagnot, Kevin Dubray, Diego Dugatkin, Rafael Francis, Paul
Hoffman, David Joyner, Al Morton, Joe Perches, Jerry Perser, Scott
Poretsky, Dan Romascanu, and Kris Rousey.
Appendix B. Proof of Formula for Finite Bit-Stuffing
We would like to construct a function, f(L), that allows us to
explicitly count the total number of bit-stuffs in the set of all
strings of length L. Let S represent a bit string of length L.
Additionally, let b_n be the nth bit of string S where 1 <= n <= L.
Clearly, when 0 <= L <= 4, f(L) = 0, as there can be no possible bit-
stuff if there are < 5 bits.
Suppose L >= 5, then there is some number of strings that will cause
stuffing events. Let us count them.
We begin by counting the number of strings that will cause at least
one bit-stuff. Let us suppose that the first 5 bits, b_1,...,b_5,
cause a stuffing event. Then, there are (L-5) bits that could have
any value, i.e., the bits in position b_6 to b_L. So, there must be
2^(L-5) strings where the first 5 bits cause a stuff.
Now suppose that some other sequence of bits causes a stuff, b_n to
b_(n+4) for some 1 < n <= L-4. In order to guarantee that b_n starts
a stuff sequence, b_(n-1) must be 0, otherwise a stuff could occur at
b_(n+3). Thus, there are a total of 6 bits which must have fixed
values in the string, S, and a total of L-6 bits which do not have
fixed values. Hence, for each value of n, there are 2^(L-6) possible
strings with at least one bit-stuff for a total of (L-5) * 2^(L-6).
So, given a string of length L, where L >= 5, we know that there are
2^(L-5) + (L-5) * 2^(L-6) strings which will be transmitted with at
least one stuffed bit. However, if L >= 10, then there could be more
than one bit-stuff within the string S. Let Z represent a sequence
of 5 sequential "1" bits. Consider the bit string ..., b_n, b_(n+1),
b_(n+2), Z, b_(n+8), b_(n+9), ... where 1 <= n <= L-9. For the above
sequence of bits to generate two stuffing events, there must be at
least one run of five sequential one's bits in ..., b_n, b_(n+1),
b_(n+2), b_(n+8), b_(n+9), ... Note that the position of Z in the
above sequence is irrelevant when looking for bit-stuffs.
Additionally, we've already determined that the number of strings
with at least one stuff in a bit string of length L is 2^(L-5) +
(L-5) * 2^(L-6). Thus, the total number of stuffing events in the
Newman & Player Informational [Page 20]
^L
RFC 4814 Hash and Stuffing March 2007
set of all bit strings of length L can be represented as f(L) =
2^(L-5) + (L-5) * 2^(L-6) + f(L-5) for all L >= 5.
Appendix C. Explicit Calculation of Bit-Stuffing Overhead for IPv4
Consider a scenario where a tester is transmitting IPv4 test packets
across a bit synchronous link. The test traffic has the following
parameters (values are in decimal):
+-----------------------+---------------------------+
| Field | Value |
+-----------------------+---------------------------+
| IP Version | 4 |
| IP Header Length | 5 |
| Type of service (TOS) | 0 |
| Datagram Length | 1028 |
| ID | 0 |
| Flags/Fragments | 0 |
| Time to live (TTL) | 64 |
| Protocol | 17 |
| Source IP | 192.18.13.1-192.18.13.254 |
| Destination IP | 192.18.1.10 |
| Source UDP Port | pseudorandom port |
| Destination UDP Port | pseudorandom port |
| UDP Length | 1008 |
| Payload | 1000 pseudorandom bytes |
+-----------------------+---------------------------+
We want to calculate the expected number of stuffs per packet, or
E[packet stuffs].
First, we observe that we have 254 different IP headers to consider,
and secondly, that the changing 4th octet in the IP source addresses
will produce occasional bit-stuffing events, so we must enumerate
these occurrences. Additionally, we must take into account that the
3rd octet of the source IP and the first octet of the destination IP
will affect stuffing occurrences.
An exhaustive search shows that cycling through all 254 headers
produces 51 bit-stuffs for the destination IP address. This gives us
an expectation of 51/254 stuffs per packet due to the changing source
IP address.
For the IP CRC, we observe that the value will decrement as the
source IP is incremented. A little calculation shows that the CRC
values for these headers will fall in the range of 0xE790 to 0xE88F.
Newman & Player Informational [Page 21]
^L
RFC 4814 Hash and Stuffing March 2007
Additionally, both the protocol and source IP address must be
considered, as they provide a source of extra leading and trailing
"1" bits.
An exhaustive search shows that cycling through all 254 headers will
produce 102 bit-stuffs for the CRC. This gives us an expectation of
102/254 stuffs per packet due to the CRC.
Since our destination IP address is even and the UDP length is less
than 32768, the random source and destination ports provide 32 bits
of sequential random data without forcing us to consider the boundary
bits. Additionally, we will assume that since our payload is
pseudorandom, our UDP CRC will be too. The even UDP length field
again allows us to only consider the bits explicitly contained within
the CRC and data fields. So, using the formula for the expected
number of stuffs in a finite string from section 5.2.2, we determine
that E[UDP stuffs] = f(32)/2^32 + f(8000+16)/2^(8000+16). Now,
f(32)/2^32 is calculable without too much difficulty and is
approximately 0.465. However, f(8016)/2^8016 is a little large to
calculate easily, so we will approximate this value by using the
probability value obtained in section 5.2.1. Thus, E[UDP] ~ 0.465 +
8016/62 ~ 129.755.
Hence, E[packet stuffs] = 51/254 + 102/254 + 129.755 = 130.357.
However, since we cannot have a fractional stuff, we round down to
130. Thus, we expect 130 stuffs per packet.
Finally, we can calculate bit-stuffing overhead by dividing the
expected number of stuff bits by the total number of bits in the IP
datagram. So, this example traffic would generate 1.58% overhead.
If our payload had consisted exclusively of zero bits, our overhead
would have been 0.012%. An all-ones payload would produce 19.47%
overhead.
Newman & Player Informational [Page 22]
^L
RFC 4814 Hash and Stuffing March 2007
Appendix D. Explicit Calculation of Bit-Stuffing Overhead for IPv6
Consider a scenario where a tester is transmitting IPv6 test packets
across a bit-synchronous link. The test traffic has the following
parameters (values are in decimal except for IPv6 addresses, which
are in hexadecimal):
+----------------------+----------------------------------+
| Field | Value |
+----------------------+----------------------------------+
| IP Version | 6 |
| Traffic Class | 0 |
| Flow Label | pseudorandom label |
| Payload Length | 1008 |
| Next Header | 17 |
| Hop Limit | 64 |
| Source IP | 2001:DB8:0:1::1-2001:DB8:0:1::FF |
| Destination IP | 2001:DB8:0:2::10 |
| Source UDP Port | pseudorandom port |
| Destination UDP Port | pseudorandom port |
| UDP Length | 1008 |
| Payload | 1000 pseudorandom bytes |
+----------------------+----------------------------------+
We want to calculate the expected number of stuffs per packet, or
E[packet stuffs].
First, we observe that we have 255 different IP headers to consider,
and secondly, that the changing 4th quad in the IP source addresses
will produce occasional bit-stuffing events, so we must enumerate
these occurrences. Additionally, we also note that since the first
quad of the destination address has a leading zero bit, we do no have
to consider these adjacent bits when calculating the number of bit-
stuffs in the source IP address.
An exhaustive search shows that cycling through all 255 headers
produces 20 bit-stuffs for the source IP address. This gives us an
expectation of 20/255 stuffs per packet due to the changing source IP
address.
We also have to consider our pseudorandomly generated flow label.
However, since our Traffic Class field is 0 and our Payload Length
field is less than 32768 (and thus the leading bit of the Payload
Length field is 0), we may consider the flow label as 20 bits of
random data. Thus the expectation of a stuff in the flow label is
f(20)/2^20 ~ .272.
Newman & Player Informational [Page 23]
^L
RFC 4814 Hash and Stuffing March 2007
Similar to the flow label case above, the fourth quad of our
destination IP address is even and the UDP length field is less than
32768, so the random source and destination ports provide 32 bits of
sequential random data without forcing us to consider the boundary
bits. Additionally, we will assume that since our payload is
pseudorandom, our UDP CRC will be too. The even UDP length field
again allows us to only consider the bits explicitly contained within
the CRC and data fields. So, using the formula for the expected
number of stuffs in a finite string from section 5.2.2, we determine
that E[UDP stuffs] = f(32)/2^32 + f(8000+16)/2^(8000+16). Now,
f(32)/2^32 is calculable without too much difficulty and is
approximately 0.465. However, f(8016)/2^8016 is a little large to
calculate easily, so we will approximate this value by using the
probability value obtained in section 5.2.1. Thus, E[UDP stuffs] ~
0.465 + 8016/62 ~ 129.755.
Now we may explicitly calculate that E[packet stuffs] = 20/255 +
0.272 + 129.755 = 130.105. However, since we cannot have a
fractional stuff, we round down to 130. Thus, we expect 130 stuffs
per packet.
Finally, we can calculate bit-stuffing overhead by dividing the
expected number of stuff bits by the total number of bits in the IP
datagram. So, this example traffic would generate 1.55% overhead.
If our payload had consisted exclusively of zero bits, our overhead
would have been 0.010%. An all-ones payload would produce 19.09%
overhead.
Appendix E. Terminology
Hashing
Also known as a hash function. In the context of this document, an
algorithm for transforming data for use in path selection by a
networking device. For example, an Ethernet switch with multiple
processing elements might use the source and destination MAC
addresses of an incoming frame as input for a hash function. The
hash function produces numeric output that tells the switch which
processing element to use in forwarding the frame.
Randomness
In the context of this document, the quality of having an equal
probability of any possible outcome for a given pattern space. For
example, if an experiment has N randomly distributed outcomes, then
any individual outcome has a 1 in N probability of occurrence.
Newman & Player Informational [Page 24]
^L
RFC 4814 Hash and Stuffing March 2007
Repeatability
The precision of test results obtained on a single test bed, but from
trial to trial. See also "reproducibility".
Reproducibility
The precision of test results between different setups, possibly at
different locations. See also "repeatability".
Stuffing
The insertion of a bit or byte within a frame to avoid confusion with
control characters. For example, RFC 1662 requires the insertion of
a "0" bit prior to any sequence of five contiguous "1" bits within a
frame to avoid confusion with the HDLC control character 0x7E.
Authors' Addresses
David Newman
Network Test
EMail: dnewman@networktest.com
Timmons C. Player
Spirent Communications
EMail: timmons.player@spirent.com
Newman & Player Informational [Page 25]
^L
RFC 4814 Hash and Stuffing March 2007
Full Copyright Statement
Copyright (C) The IETF Trust (2007).
This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors
retain all their rights.
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Acknowledgement
Funding for the RFC Editor function is currently provided by the
Internet Society.
Newman & Player Informational [Page 26]
^L
|