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
|
<pre>Network Working Group D. Piscitello
Request for Comments: 1561 Core Competence
Category: Experimental December 1993
<span class="h1">Use of ISO CLNP in TUBA Environments</span>
Status of this Memo
This memo defines an Experimental Protocol for the Internet
community. This memo does not specify an Internet standard of any
kind. Discussion and suggestions for improvement are requested.
Distribution of this memo is unlimited.
Abstract
This memo specifies a profile of the ISO/IEC 8473 Connectionless-mode
Network Layer Protocol (CLNP, [<a href="#ref-1">1</a>]) for use in conjunction with <a href="./rfc1347">RFC</a>
<a href="./rfc1347">1347</a>, TCP/UDP over Bigger Addresses (TUBA, [<a href="#ref-2" title=""TCP/UDP over Bigger Addresses (TUBA)"">2</a>]). It describes the
use of CLNP to provide the lower-level service expected by
Transmission Control Protocol (TCP, [<a href="#ref-3" title=""Transmission Control Protocol (TCP)"">3</a>]) and User Datagram Protocol
(UDP, [<a href="#ref-4" title=""User Datagram Protocol (UDP)"">4</a>]). CLNP provides essentially the same datagram service as
Internet Protocol (IP, [<a href="#ref-5" title=""Internet Protocol (IP)"">5</a>]), but offers a means of conveying bigger
network addresses (with additional structure, to aid routing).
While the protocols offer nearly the same services, IP and CLNP are
not identical. This document describes a means of preserving the
semantics of IP information that is absent from CLNP while preserving
consistency between the use of CLNP in Internet and OSI environments.
This maximizes the use of already-deployed CLNP implementations.
Acknowledgments
Many thanks to Ross Callon (Wellfleet Communications), John Curran
(BBN), Cyndi Jung (3Com), Paul Brooks (UNSW), Brian Carpenter (CERN),
Keith Sklower (Cal Berkeley), Dino Farinacci and Dave Katz (Cisco
Systems), Rich Colella (NIST/CSL) and David Oran (DEC) for their
assistance in composing this text.
<span class="grey">Piscitello [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
Conventions
The following language conventions are used in the items of
specification in this document:
* MUST, SHALL, or MANDATORY -- the item is an absolute
requirement of the specification.
* SHOULD or RECOMMENDED -- the item should generally be
followed for all but exceptional circumstances.
* MAY or OPTIONAL -- the item is truly optional and may be
followed or ignored according to the needs of the
implementor.
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Terminology</span>
To the extent possible, this document is written in the language of
the Internet. For example, packet is used rather than "protocol data
unit", and "fragment" is used rather than "segment". There are some
terms that carry over from OSI; these are, for the most part, used so
that cross-reference between this document and <a href="./rfc994">RFC 994</a> [<a href="#ref-6" title=""ISO DIS 8473, Protocol for Providing the Connectionless Network Service"">6</a>] or ISO/IEC
8473 is not entirely painful. OSI acronyms are for the most part
avoided.
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. Introduction</span>
The goal of this specification is to allow compatible and
interoperable implementations to encapsulate TCP and UDP packets in
CLNP data units. In a sense, it is more of a "hosts requirements"
document for the network layer of TUBA implementations than a
protocol specification. It is assumed that readers are familiar with
STD 5, <a href="./rfc791">RFC 791</a>, STD 5, <a href="./rfc792">RFC 792</a> [<a href="#ref-7" title=""Internet Control Message Protocol (ICMP)"">7</a>], STD 3, <a href="./rfc1122">RFC 1122</a> [<a href="#ref-8" title=""Requirements for Internet Hosts - Communication Layers"">8</a>], and, to a
lesser extent, <a href="./rfc994">RFC 994</a> and ISO/IEC 8473. This document is compatible
with (although more restrictive than) ISO/IEC 8473; specifically, the
order, semantics, and processing of CLNP header fields is consistent
between this and ISO/IEC 8473.
[Note: <a href="./rfc994">RFC 994</a> contains the Draft International Standard version of
ISO CLNP, in ASCII text. This is not the final version of the ISO/IEC
protocol specification; however, it should provide sufficient
background for the purpose of understanding the relationship of CLNP
to IP, and the means whereby IP information is to be encoded in CLNP
header fields. Postscript versions of ISO CLNP and associated routing
protocols are available via anonymous FTP from merit.edu, and may be
found in the directory /pub/ISO/IEC.
<span class="grey">Piscitello [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. Overview of CLNP</span>
ISO CLNP is a datagram network protocol. It provides fundamentally
the same underlying service to a transport layer as IP. CLNP provides
essentially the same maximum datagram size, and for those
circumstances where datagrams may need to traverse a network whose
maximum packet size is smaller than the size of the datagram, CLNP
provides mechanisms for fragmentation (data unit identification,
fragment/total length and offset). Like IP, a checksum computed on
the CLNP header provides a verification that the information used in
processing the CLNP datagram has been transmitted correctly, and a
lifetime control mechanism ("Time to Live") imposes a limit on the
amount of time a datagram is allowed to remain in the internet
system. As is the case in IP, a set of options provides control
functions needed or useful in some situations but unnecessary for the
most common communications.
Note that the encoding of options differs between the two protocols,
as do the means of higher level protocol identification. Note also
that CLNP and IP differ in the way header and fragment lengths are
represented, and that the granularity of lifetime control (time-to-
live) is finer in CLNP.
Some of these differences are not considered "issues", as CLNP
provides flexibility in the way that certain options may be specified
and encoded (this will facilitate the use and encoding of certain IP
options without change in syntax); others, e.g., higher level
protocol identification and timestamp, must be accommodated in a
transparent manner in this profile for correct operation of TCP and
UDP, and continued interoperability with OSI implementations. <a href="#section-4">Section</a>
<a href="#section-4">4</a> describes how header fields of CLNP must be populated to satisfy
the needs of TCP and UDP.
Errors detected during the processing of a CLNP datagram MAY be
reported using CLNP Error Reports. Implementations of CLNP for TUBA
environments MUST be capable of processing Error Reports (this is
consistent with the 1992 edition (2) of the ISO/IEC 8473 standard).
Control messages (e.g., echo request/reply and redirect) are
similarly handled in CLNP, i.e., identified as separate network layer
packet types. The relationship between CLNP Error and Control
messages and Internet Control Message Protocol (ICMP, [<a href="#ref-7" title=""Internet Control Message Protocol (ICMP)"">7</a>]), and
issues relating to the handling of these messages is described in
<a href="#section-5">Section 5</a>.
<span class="grey">Piscitello [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
Table 1 provides a high-level comparison of CLNP to IP:
Function | ISO CLNP | DOD IP
----------------------|------------------------|-----------------------
Header Length | indicated in octets | in 32-bit words
Version Identifier | 1 octet | 4 bits
Lifetime (TTL) | 500 msec units | 1 sec units
Flags | Fragmentation allowed, | Don't Fragment,
| More Fragments | More Fragments,
| Suppress Error Reports | <not defined>
Packet Type | 5 bits | <not defined>
Fragment Length | 16 bits, in octets | 16 bits, in octets
Header Checksum | 16-bit (Fletcher) | 16-bit
Total Length | 16 bits, in octets | <not defined>
Addressing | Variable length | 32-bit fixed
Data Unit Identifier | 16 bits | 16 bits
Fragment offset | 16 bits, in octets | 13 bits, 8-octet units
Higher Layer Protocol | Selector in address | Protocol
Options | Security | Security
| Priority | TOS Precedence bits
| Complete Source Route | Strict Source Route
| Quality of Service | Type of Service
| Partial Source Route | Loose Source Route
| Record Route | Record Route
| Padding | Padding
| <defined herein> | Timestamp
Table 1. Comparison of IP to CLNP
The composition and processing of a TCP pseudo-header when CLNP is
used to provide the lower-level service expected by TCP and UDP is
described in <a href="#section-6">Section 6</a>.
[Note: This experimental RFC does not discuss multicasting.
Presently, there are proposals for multicast extensions for CLNP in
ISO/IEC/JTC1/SC6, and a parallel effort within TUBA. A future
revision to this RFC will incorporate any extensions to CLNP that may
be introduced as a result of the adoption of one of these
alternatives.]
<span class="grey">Piscitello [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. Proposed Internet Header using CLNP</span>
A summary of the contents of the CLNP header, as it is proposed for
use in TUBA environments, is illustrated in Figure 4-1:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ........Data Link Header........ | NLP ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Header Length | Version | Lifetime (TTL)|Flags| Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Fragment Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dest Addr Len | Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PROTO field | Src Addr Len | Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Source Address | Reserved | Data Unit Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Fragment Offset | Total Length of packet |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options (see Table 1) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Note that each tick mark represents one bit position.
Figure 4-1. CLNP for TUBA
<span class="grey">Piscitello [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
Note 1: For illustrative purposes, Figure 4-1 shows Destination
and Source Addresses having a length of 19 octets,
including the PROTO/reserved field. In general, addresses
can be variable length, up to a maximum of 20 octets,
including the PROTO/reserved field.
Note 2: Due to differences in link layer protocols, it is not
possible to ensure that the packet starts on an even
alignment. Note, however, that many link level protocols
over which CLNP is operated use a odd length link
(e.g., IEEE 802.2). (In Figure 4-1, the rest of the CLNP
packet is even-aligned.)
The encoding of CLNP fields for use in TUBA environments is as
follows.
<span class="h3"><a class="selflink" id="section-4.1" href="#section-4.1">4.1</a> Network Layer Protocol Identification (NLP ID)</span>
This one-octet field identifies this as the ISO/IEC 8473 protocol; it
MUST set to binary 1000 0001.
<span class="h3"><a class="selflink" id="section-4.2" href="#section-4.2">4.2</a> Header Length Indication (Header Length)</span>
Header Length is the length of the CLNP header in octets, and thus
points to the beginning of the data. The value 255 is reserved. The
header length is the same for all fragments of the same (original)
CLNP packet.
<span class="h3"><a class="selflink" id="section-4.3" href="#section-4.3">4.3</a> Version</span>
This one-octet field identifies the version of the protocol; it MUST
be set to a binary value 0000 0001.
<span class="h3"><a class="selflink" id="section-4.4" href="#section-4.4">4.4</a> Lifetime (TTL)</span>
Like the TTL field of IP, this field indicates the maximum time the
datagram is allowed to remain in the internet system. If this field
contains the value zero, then the datagram MUST be destroyed; a host,
however, MUST NOT send a datagram with a lifetime value of zero.
This field is modified in internet header processing. The time is
measured in units of 500 milliseconds, but since every module that
processes a datagram MUST decrease the TTL by at least one even if it
process the datagram in less than 500 millisecond, the TTL must be
thought of only as an upper bound on the time a datagram may exist.
The intention is to cause undeliverable datagrams to be discarded,
and to bound the maximum CLNP datagram lifetime. [Like IP, the
colloquial usage of TTL in CLNP is as a coarse hop-count.]
<span class="grey">Piscitello [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
Unless otherwise directed, a host SHOULD use a value of 255 as the
initial lifetime value.
<span class="h3"><a class="selflink" id="section-4.5" href="#section-4.5">4.5</a> Flags</span>
Three flags are defined. These occupy bits 0, 1, and 2 of the
Flags/Type octet:
0 1 2
+---+---+---+
| F | M | E |
| P | F | R |
+---+---+---+
The Fragmentation Permitted (FP) flag, when set to a value of one
(1), is semantically equivalent to the "may fragment" value of the
Don't Fragment field of IP; similarly, when set to zero (0), the
Fragmentation Permitted flag is semantically equivalent to the "Don't
Fragment" value of the Don't Fragment Flag of IP.
[Note: If the Fragmentation Permitted field is set to the value 0,
then the Data Unit Identifier, Fragment Offset, and Total Length
fields are not present. This denotes a single fragment datagram. In
such datagrams, the Fragment Length field contains the total length
of the datagram.]
The More Fragments flag of CLNP is semantically and syntactically the
same as the More Fragments flag of IP; a value of one (1) indicates
that more segments/fragments are forthcoming; a value of zero (0)
indicates that the last octet of the original packet is present in
this segment.
The Error Report (ER) flag is used to suppress the generation of an
error message by a host/router that detects an error during the
processing of a CLNP datagram; a value of one (1) indicates that the
host that originated this datagram thinks error reports are useful,
and would dearly love to receive one if a host/router finds it
necessary to discard its datagram(s).
<span class="grey">Piscitello [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h3"><a class="selflink" id="section-4.6" href="#section-4.6">4.6</a> Type field</span>
The type field distinguishes data CLNP packets from Error Reports
from Echo packets. The following values of the type field apply:
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| flags | 1 | 1 | 1 | 0 | 0 | => Encoding of Type = data packet
+---+---+---+---+---+---+---+---+
| flags | 0 | 0 | 0 | 0 | 1 | => Encoding of Type = error report
+---+---+---+---+---+---+---+---+
| flags | 1 | 1 | 1 | 1 | 0 | => Encoding of Type = echo request
+---+---+---+---+---+---+---+---+
| flags | 1 | 1 | 1 | 1 | 1 | => Encoding of Type = echo reply
+---+---+---+---+---+---+---+---+
Error Report packets are described in <a href="#section-5">Section 5</a>.
Echo packets and their use are described in <a href="./rfc1139">RFC 1139</a> [<a href="#ref-9" title=""An Echo Function for ISO 8473"">9</a>].
<span class="h3"><a class="selflink" id="section-4.7" href="#section-4.7">4.7</a> Fragment Length</span>
Like the Total Length of the IP header, the Fragment length field
contains the length in octets of the fragment (i.e., this datagram)
including both header and data.
[Note: CLNP also may also have a Total Length field, that contains
the length of the original datagram; i.e., the sum of the length of
the CLNP header plus the length of the data submitted by the higher
level protocol, e.g., TCP or UDP. See <a href="#section-4.12">Section 4.12</a>.]
<span class="h3"><a class="selflink" id="section-4.8" href="#section-4.8">4.8</a> Checksum</span>
A checksum is computed on the header only. It MUST be verified at
each host/router that processes the packet; if header fields are
changed during processing (e.g., the Lifetime), the checksum is
modified. If the checksum is not used, this field MUST be coded with
a value of zero (0). See <a href="#appendix-A">Appendix A</a> for algorithms used in the
computation and adjustment of the checksum. Readers are encouraged to
see [<a href="#ref-10" title=""Improving the Efficiency of the ISO Checksum Calculation"">10</a>] for a description of an efficient implementation of the
checksum algorithm.
<span class="h3"><a class="selflink" id="section-4.9" href="#section-4.9">4.9</a> Addressing</span>
CLNP uses OSI network service access point addresses (NSAPAs); NSAPAs
serve the same identification and location functions as an IP
address, plus the protocol selector value encoded in the IPv4
datagram header, and with additional hierarchy. General purpose
<span class="grey">Piscitello [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
CLNP implementations MUST handle NSAP addresses of variable length up
to 20 octets, as defined in ISO/IEC 8348 [<a href="#ref-11">11</a>]. TUBA implementations,
especially routers, MUST accommodate these as well. Thus, for
compatibility and interoperability with OSI use of CLNP, the initial
octet of the Destination Address is assumed to be an Authority and
Format Indicator, as defined in ISO/IEC 8348. NSAP addresses may be
between 8 and 20 octets long (inclusive).
TUBA implementations MUST support both ANSI and GOSIP style
addresses; these are described in <a href="./rfc1237">RFC 1237</a> [<a href="#ref-12" title=""Guidelines for OSI NSAP Allocation in the Internet"">12</a>], and illustrated in
Figure 4-2. <a href="./rfc1237">RFC 1237</a> describes the ANSI/GOSIP initial domain parts
as well as the format and composition of the domain specific part. It
is further recommended that TUBA implementations support the
assignment of system identifiers for TUBA/CLNP hosts defined in [<a href="#ref-13" title=""Assignment of System Identifiers for TUBA/CLNP Hosts"">13</a>]
for the purposes of host address autoconfiguration as described in
[<a href="#ref-14">14</a>]. Additional considerations specific to the interpretation and
encoding of the selector part are described in sections <a href="#section-4.9.2">4.9.2</a> and
4.9.4.
+-------------+
| <-- IDP --> |
+----+--------+----------------------------------+
|AFI | IDI | <-- DSP --> |
+----+--------+----+---+-----+----+-----+---+----+
| 47 | 0005 |DFI |AA |Rsvd | RD |Area |ID |Sel |
+----+--------+----+---+-----+----+-----+---+----+
octets | 1 | 2 | 1 | 3 | 2 | 2 | 2 | 6 | 1 |
+----+--------+----+---+-----+----+-----+---+----+
Figure 4-2 (a): GOSIP Version 2 NSAP structure.
+-------------+
|<-- IDP --> |
+----+--------+----------------------------------+
|AFI | IDI | <-- DSP --> |
+----+--------+----+---+-----+----+-----+---+----+
| 39 | 840 |DFI |ORG|Rsvd | RD |Area |ID |Sel |
+----+--------+----+---+-----+----+-----+---+----+
octets | 1 | 2 | 1 | 3 | 2 | 2 | 2 | 6 | 1 |
+----+--------+----+---+-----+----+-----+---+----+
Figure 4-2 (b): ANSI NSAP address format for DCC=840
<span class="grey">Piscitello [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
Definitions:
IDP Initial Domain Part
AFI Authority and Format Identifier
IDI Initial Domain Identifier
DSP Domain Specific Part
DFI DSP Format Identifier
AA Administration Authority
ORG Organization Name (numeric form)
Rsvd Reserved
RD Routing Domain Identifier
Area Area Identifier
ID System Identifier
Sel NSAP Selector
<span class="h4"><a class="selflink" id="section-4.9.1" href="#section-4.9.1">4.9.1</a> Destination Address Length Indicator</span>
This field indicates the length, in octets, of the Destination
Address.
<span class="h4"><a class="selflink" id="section-4.9.2" href="#section-4.9.2">4.9.2</a> Destination Address</span>
This field contains an OSI NSAP address, as described in <a href="#section-4.9">Section 4.9</a>.
It MUST always contain the address of the final destination. (This is
true even for packets containing a source route option, see <a href="#section-4.13.4">Section</a>
<a href="#section-4.13.4">4.13.4</a>).
The final octet of the destination address MUST always contain the
value of the PROTO field, as defined in IP. The 8-bit PROTO field
indicates the next level protocol used in the data portion of the
CLNP datagram. The values for various protocols are specified in
"Assigned Numbers" [<a href="#ref-15" title=""Assigned Numbers"">15</a>]. For the PROTO field, the value of zero (0)
is reserved.
TUBA implementations that support TCP/UDP as well as OSI MUST use the
protocol value (1Dh, Internet decimal 29) reserved for ISO transport
protocol class 4.
<span class="h4"><a class="selflink" id="section-4.9.3" href="#section-4.9.3">4.9.3</a> Source Address Length Indicator</span>
This field indicates the length, in octets, of the Source Address.
<span class="h4"><a class="selflink" id="section-4.9.4" href="#section-4.9.4">4.9.4</a> Source Address</span>
This field contains an OSI NSAP address, as described in <a href="#section-4.9">Section 4.9</a>.
The final octet of the source address is reserved. It MAY be set to
the protocol field value on transmission, and shall be ignored on
reception (the value of zero MUST not be used).
<span class="grey">Piscitello [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h3"><a class="selflink" id="section-4.10" href="#section-4.10">4.10</a> Data Unit Identifier</span>
Like the Identification field of IP, this 16-bit field is used to
distinguish segments of the same (original) packet for the purposes
of reassembly. This field is present when the fragmentation permitted
flag is set to one.
<span class="h3"><a class="selflink" id="section-4.11" href="#section-4.11">4.11</a> Fragment Offset</span>
Like the Fragment Offset of IP, this 16-bit is used to identify the
relative octet position of the data in this fragment with respect to
the start of the data submitted to CLNP; i.e., it indicates where in
the original datagram this fragment belongs. The offset is measured
in octets; the value of this field shall always be a multiple of
eight (8). This field is present when the fragmentation permitted
flag is set to one.
<span class="h3"><a class="selflink" id="section-4.12" href="#section-4.12">4.12</a> Total Length</span>
The total length of the CLNP packet in octets is determined by the
originator and placed in the Total Length field of the header. The
Total Length field specifies the entire length of the original
datagram, including both the header and data. This field MUST NOT be
changed in any fragment of the original packet for the duration of
the packet lifetime. This field is present when the fragmentation
permitted flag is set to one.
<span class="h3"><a class="selflink" id="section-4.13" href="#section-4.13">4.13</a> Options</span>
All CLNP options are "triplets" of the form <parameter code>,
<parameter length>, and <parameter value>. Both the parameter code
and length fields are always one octet long; the length parameter
value, in octets, is indicated in the parameter length field. The
following options are defined for CLNP for TUBA.
<span class="h4"><a class="selflink" id="section-4.13.1" href="#section-4.13.1">4.13.1</a> Security</span>
The value of the parameter code field is binary 1100 0101. The length
field MUST be set to the length of a Basic (and Extended) Security IP
option(s) as identified in <a href="./rfc1108">RFC 1108</a> [<a href="#ref-16" title=""Security Option for IP"">16</a>], plus 1. Octet 1 of the
security parameter value field -- the CLNP Security Format Code -- is
set to a binary value 0100 0000, indicating that the remaining octets
of the security field contain either the Basic or Basic and Extended
Security options as identified in <a href="./rfc1108">RFC 1108</a>. This encoding points to
the administration of the source address (e.g., ISOC) as the
administration of the security option; it is thus distinguished from
the globally unique format whose definition is reserved for OSI use.
Implementations wishing to use a security option MUST examine the
<span class="grey">Piscitello [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
PROTO field in the source address; if the value of PROTO indicates
the CLNP client is TCP or UDP, the security option described in <a href="./rfc1108">RFC</a>
<a href="./rfc1108">1108</a> is used.
[Note: If IP options change, TUBA implementations MUST follow the new
recommendations. This RFC, or revisions thereof, must document the
new recommendations to assure compatibility.]
The formats of the Security option, encoded as a CLNP option, is as
follows. The CLNP option will be used to convey the Basic and
Extended Security options as sub-options; i.e., the exact encoding of
the Basic/Extended Security IP Option is carried in a single CLNP
Security Option, with the length of the CLNP Security option
reflecting the sum of the lengths of the Basic and Extended Security
IP Option.
+--------+--------+--------+--------+--------+---//----+-
|11000100|XXXXXXXX|01000000|10000010|YYYYYYYY| | ...
+--------+--------+--------+--------+--------+---//----+----
CLNP CLNP CLNP BASIC BASIC BASIC
OPTION OPTION FORMAT SECURITY OPTION OPTION
TYPE LENGTH CODE TYPE LENGTH VALUE
(197) (130)
---+------------+------------+----//-------+
... | 10000101 | 000LLLLL | |
-----+------------+------------+----//-------+
EXTENDED EXTENDED EXTENDED OPTION
OPTION OPTION VALUE
TYPE (133) LENGTH
The syntax, semantics and processing of the Basic and Extended IP
Security Options are defined in <a href="./rfc1108">RFC 1108</a>.
<span class="h4"><a class="selflink" id="section-4.13.2" href="#section-4.13.2">4.13.2</a> Type of Service</span>
[Note: Early drafts recommended the use of IP Type of Service as
specified in <a href="./rfc1349">RFC 1349</a>. There now appears to be a broad consensus that
this encoding is insufficient, and there is renewed interest in
exploring the utility of the "congestion experienced" flag available
in the CLNP QOS Maintenance option. This RFC thus recommends the use
of the QOS Maintenance option native to CLNP.]
The Quality of Service Maintenance option allows the originator of a
CLNP datagram to convey information about the quality of service
requested by the originating upper layer process. Routers MAY use
this information as an aid in selecting a route when more than one
route satisfying other routing criteria is available and the
<span class="grey">Piscitello [Page 12]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-13" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
available routes are know to differ with respect to the following
qualities of service: ability to preserve sequence, transit delay,
cost, residual error probability. Through this option, a router may
also indicate that it is experiencing congestion.
The encoding of this option is as follows:
+-----------+-----------+----------+
| 1100 0011 | 0000 0001 | 110ABCDE |
+-----------+-----------+----------+
CLNP QOS OPTION QOS FLAGS
TYPE (195) LENGTH
The value of the parameter code field MUST be set to a value of
binary 1100 0011 (the CLNP Quality of Service Option Code point).
The length field MUST be set to one (1).
Bits 8-6 MUST be set as indicated in the figure. The flags "ABCDE"
are interpreted as follows:
A=1 choose path that maintains sequence over
one that minimizes transit delay
A=0 choose path that minimizes transit delay over
one that maintains sequence
B=1 congestion experienced
B=0 no congestion to report
C=1 choose path that minimizes transit delay over
over low cost
C=0 choose low cost over path that
minimizes transit delay
D=1 choose pathe with low residual error probability over
one that minimizes transit delay
D=0 choose path that minimizes transit delay over
one with low residual error probability
E=1 choose path with low residual error probability over
low cost
E=0 choose path with low cost over one with low
residual error probability
<span class="h4"><a class="selflink" id="section-4.13.3" href="#section-4.13.3">4.13.3</a> Padding</span>
The padding field is used to lengthen the packet header to a
convenient size. The parameter code field MUST be set to a value of
binary 1100 1100. The value of the parameter length field is
variable. The parameter value MAY contain any value; the contents of
padding fields MUST be ignored by the receiver.
<span class="grey">Piscitello [Page 13]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-14" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
+----------+----------+-----------+
| 11001100 | LLLLLLLL | VVVV VVVV |
+----------+----------+-----------+
<span class="h4"><a class="selflink" id="section-4.13.4" href="#section-4.13.4">4.13.4</a> Source Routing</span>
Like the strict source route option of IP, the Complete Source Route
option of CLNP is used to specify the exact and entire route an
internet datagram MUST take. Similarly, the Partial Source Route
option of CLNP provides the equivalent of the loose source route
option of IP; i.e., a means for the source of an internet datagram to
supply (some) routing information to be used by gateways in
forwarding the internet datagram towards its destination. The
identifiers encoded in this option are network entity titles, which
are semantically and syntactically the same as NSAPAs and which can
be used to unambiguously identify a network entity in an intermediate
system (router).
The parameter code for Source Routing is binary 1100 1000. The length
of the source routing parameter value is variable.
The first octet of the parameter value is a type code, indicating
Complete Source Routing (binary 0000 0001) or Partial Source Routing
(binary 0000 0000). The second octet identifies the offset of the
next network entity title to be processed in the list, relative to
the start of the parameter (i.e., a value of 3 is used to identify
the first address in the list). The offset value is modified by each
router using a complete source route or by each listed router using a
partial source route to point to the next NET.
The third octet begins the list of network entity titles. Only the
NETs of intermediate systems are included in the list; the source and
destination addresses shall not be included. The list consists of
variable length network entity title entries; the first octet of each
entry gives the length of the network entity title that comprises the
remainder of the entry.
<span class="h4"><a class="selflink" id="section-4.13.5" href="#section-4.13.5">4.13.5</a> Record Route</span>
Like the IP record route option, the Record route option of CLNP is
used to trace the route a CLNP datagram takes. A recorded route
consists of a list of network entity titles (see Source Routing). The
list is constructed as the CLNP datagram is forwarded along a path
towards its final destination. Only titles of intermediate systems
(routers) that processed the datagram are included in the recorded
route; the network entity title of the originator of the datagram
SHALL NOT be recorded in the list.
<span class="grey">Piscitello [Page 14]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-15" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
The parameter code for Record Route is binary 1100 1011. The length
of the record route parameter value is variable.
The first octet of the parameter value is a type code, indicating
Complete Recording of Route (0000 0001) or Partial Recording of Route
(0000 0000). When complete recording of route is selected, reassembly
at intermediate systems MAY be performed only when all fragments of a
given datagram followed the same route; partial recording of route
eliminates or "loosens" this constraint.
The second octet identifies the offset where the next network entity
title entry (see Source Routing) MAY be recorded (i.e., the end of
the current list), relative to the start of the parameter. A value
of 3 is used to identify the initial recording position. The process
of recording a network entity title entry is as follows. A router
adds the length of its network entity title entry to the value of
record route offset and compares this new value to the record route
list length indicator; if the value does not exceed the length of the
list, entity title entry is recorded, and the offset value is
incremented by the value of the length of the network entity title
entry. Otherwise, the recording of route is terminated, and the
router MUST not record its network entity title in the option. If
recording of route has been terminated, this (second) octet has a
value 255.
The third octet begins the list of network entity titles.
<span class="h4"><a class="selflink" id="section-4.13.6" href="#section-4.13.6">4.13.6</a> Timestamp</span>
[Note: There is no timestamp option in edition 1 of ISO/IEC 8473, but
the option has been proposed and submitted to ISO/IEC JTC1/SC6.]
The parameter code value 1110 1110 is used to identify the Timestamp
option; the syntax and semantics of Timestamp are identical to that
defined in IP.
The Timestamp Option is defined in STD 5, <a href="./rfc791">RFC 791</a>. The CLNP parameter
code 1110 1110 is used rather than the option type code 68 to
identify the Timestamp option, and the parameter value conveys the
option length. Octet 1 of the Timestamp parameter value shall be
encoded as the pointer (octet 3 of IP Timestamp); octet 2 of the
parameter value shall be encoded as the overflow/format octet (octet
4 of IP Timestamp); the remaining octets shall be used to encode the
timestamp list. The size is fixed by the source, and cannot be
changed to accommodate additional timestamp information.
<span class="grey">Piscitello [Page 15]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-16" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
+--------+--------+--------+--------+
|11101110| length | pointer|oflw|flg|
+--------+--------+--------+--------+
| network entity title |
+--------+--------+--------+--------+
| timestamp |
+--------+--------+--------+--------+
| . |
.
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. Error Reporting and Control Message Handling</span>
CLNP and IP differ in the way in which errors are reported to hosts.
In IP environments, the Internet Control Message Protocol (ICMP, [<a href="#ref-7" title=""Internet Control Message Protocol (ICMP)"">7</a>])
is used to return (error) messages to hosts that originate packets
that cannot be processed. ICMP messages are transmitted as user data
in IP datagrams. Unreachable destinations, incorrectly composed IP
datagram headers, IP datagram discards due to congestion, and
lifetime/reassembly time exceeded are reported; the complete internet
header that caused the error plus (at least) 8 octets of the segment
contained in that IP datagram are returned to the sender as part of
the ICMP error message. For certain errors, e.g., incorrectly
composed IP datagram headers, the specific octet which caused the
problem is identified.
In CLNP environments, an unique message type, the Error Report type,
is used in the network layer protocol header to distinguish Error
Reports from CLNP datagrams. CLNP Error Reports are generated on
detection of the same types of errors as with ICMP. Like ICMP error
messages, the complete CLNP header that caused the error is returned
to the sender in the data portion of the Error Report.
Implementations SHOULD return at least 8 octets of the datagram
contained in the CLNP datagram to the sender of the original CLNP
datagram. Here too, for certain errors, the specific octet which
caused the problem is identified.
A summary of the contents of the CLNP Error Report, as it is proposed
for use in TUBA environments, is illustrated in Figure 5-1:
<span class="grey">Piscitello [Page 16]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-17" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ........Data Link Header........ | NLP ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Header Length | Version | Lifetime (TTL)| 000 | Type=ER |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TOTAL Length of Error Report | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dest Addr Len | Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PROTO field | Src Addr Len | Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address | Reason for Discard (type/len) |
| | 1100 0001 | 0000 0010 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reason for Discard | Options... |
| code | pointer | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options |
: :
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
: :
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Note that each tick mark represents one bit position.
Figure 5-1. Error Report Format
<span class="grey">Piscitello [Page 17]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-18" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h3"><a class="selflink" id="section-5.1" href="#section-5.1">5.1</a> Rules for processing an Error Report</span>
The following is a summary of the rules for processing an Error
Report:
* An Error Report is not generated to report a problem
encountered while processing an Error Report.
* Error Reports MAY NOT be fragmented (hence, the
fragmentation part is absent).
* The Reason for Discard Code field is populated with one of
the values from Table 5-1.
* The Pointer field is populated with number of the first
octet of the field that caused the Error Report to be
generated. If it is not possible to identify the offending
octet, this field MUST be zeroed.
* If the Priority or Type of Service option is present in the
errored datagram, the Error Report MUST specify the same
option, using the value specified in the original datagram.
* If the Security option is present in the errored datagram,
the Error Report MUST specify the same option, using the
value specified in the original datagram; if the Security
option is not supported by the intermediate system, no Error
Report is to be generated (i.e., "silently discard" the
received datagram).
* If the Complete Source Route option is specified in the
errored datagram, the Error Report MUST compose a reverse of
that route, and return the datagram along the same path.
<span class="grey">Piscitello [Page 18]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-19" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h3"><a class="selflink" id="section-5.2" href="#section-5.2">5.2</a> Comparison of ICMP and CLNP Error Messages</span>
Table 5-1 provides a loose comparison of ICMP message types and codes
to CLNP Error Type Codes (values in Internet decimal):
CLNP Error Type Codes | ICMP Message (Type, Code)
----------------------------------|------------------------------------
Reason not specified (0) | Parameter Problem (12, 0)
Protocol Procedure Error (1) | Parameter Problem (12, 0)
Incorrect Checksum (2) | Parameter Problem (12, 0)
PDU Discarded--Congestion (3) | Source Quench (4, 0)
Header Syntax Error (4) | Parameter problem (12, 0)
Need to Fragment could not (5) | Frag needed, DF set (3, 4)
Incomplete PDU received (6) | Parameter Problem (12, 0)
Duplicate Option (7) | Parameter Problem (12, 0)
Destination Unreachable (128) | Dest Unreachable,Net unknown (3, 0)
Destination Unknown (129) | Dest Unreachable,host unknown(3, 1)
Source Routing Error (144) | Source Route failed (3, 5)
Source Route Syntax Error (145) | Source Route failed (3, 5)
Unknown Address in Src Route(146) | Source Route failed (3, 5)
Path not acceptable (147) | Source Route failed (3, 5)
Lifetime expired (160) | TTL exceeded (11, 0)
Reassembly Lifetime Expired (161) | Reassembly time exceeded (11, 1)
Unsupported Option (176) | Parameter Problem (12, 0)
Unsupported Protocol Version(177) | Parameter problem (12, 0)
Unsupported Security Option (178) | Parameter problem (12, 0)
Unsupported Src Rte Option (179) | Parameter problem (12, 0)
Unsupported Rcrd Rte (180) | Parameter problem (12, 0)
Reassembly interference (192) | Reassembly time exceeded (11, 1)
Table 5-1. Comparison of CLNP Error Reports to ICMP Error Messages
Note 1: The current accepted practice for IP is that source quench
should not be used; if it is used, implementations MUST
not return a source quench packet for every relevant packet.
TUBA/CLNP implementations are encouraged to adhere to these
guidelines.
Note 2: There are no corresponding CLNP Error Report Codes for the
following ICMP error message types:
- Protocol Unreachable (3, 2)
- Port Unreachable (3, 3)
[Note: Additional error code points available in the ER type
code block can be used to identify these message types.]
<span class="grey">Piscitello [Page 19]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-20" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. Pseudo-Header Considerations</span>
A checksum is computed on UDP and TCP segments to verify the
integrity of the UDP/TCP segment. To further verify that the UDP/TCP
segment has arrived at its correct destination, a pseudo-header
consisting of information used in the delivery of the UDP/TCP segment
is composed and included in the checksum computation.
To compute the checksum on a UDP or TCP segment prior to
transmission, implementations MUST compose a pseudo-header to the
UDP/TCP segment consisting of the following information that will be
used when composing the CLNP datagram:
* Destination Address Length Indicator
* Destination Address (including PROTO field)
* Source Address Length Indicator
* Source Address (including Reserved field)
* A two-octet encoding of the Protocol value
* TCP/UDP segment length
If the length of the {source address length field + source address +
destination address field + destination address } is not an integral
number of octets, a trailing 0x00 nibble is padded. If GOSIP
compliant NSAP addresses are used, this never happens (this is known
as the Farinacci uncertainty principle). The last byte in the
Destination Address has the value 0x06 for TCP and 0x11 for UDP, and
the Protocol field is encoded 0x0006 for TCP and 0x0011 for UDP. If
needed, an octet of zero is added to the end of the UDP/TCP segment
to pad the datagram to a length that is a multiple of 16 bits.
[Note: the pseudoheader is encoded in this manner to expedite
processing, as it allows implementations to grab a contiguous stream
of octets beginning at the destination address length indicator and
terminating at the final octet of the source address; the PROTOCOL
field is present to have a consistent representation across IPv4 and
CLNP/TUBA implementations.]
<span class="grey">Piscitello [Page 20]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-21" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
Figure 6-1 illustrates the resulting pseudo-header when both source
and destination addresses are maximum length.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Dest Addr Len | Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Destination Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| (PROTO) | Src Addr Len | Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... Source Address... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... | (Reserved) | Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| UDP/TCP segment length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 6-1. Pseudo-header
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>. Security Considerations</span>
ISO CLNP is an unreliable network datagram protocol, and is subject
to the same security considerations as Internet Protocol ([<a href="#ref-5" title=""Internet Protocol (IP)"">5</a>], [<a href="#ref-8" title=""Requirements for Internet Hosts - Communication Layers"">8</a>]);
methods for conveying the same security handling information
recommended for IP are described in <a href="#section-4.13.1">Section 4.13.1</a>, Security Option.
<span class="grey">Piscitello [Page 21]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-22" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>. Author's Address</span>
David M. Piscitello
Core Competence
1620 Tuckerstown Road
Dresher, PA 19025
Phone: 215-830-0692
EMail: wk04464@worldlink.com
<span class="h2"><a class="selflink" id="section-9" href="#section-9">9</a>. References</span>
[<a id="ref-1">1</a>] ISO/IEC 8473-1992. International Standards Organization -- Data
Communications -- Protocol for Providing the Connectionless
Network Service, Edition 2.
[<a id="ref-2">2</a>] Callon, R., "TCP/UDP over Bigger Addresses (TUBA)", <a href="./rfc1347">RFC 1347</a>,
Internet Architecture Board, May 1992.
[<a id="ref-3">3</a>] Postel, J., "Transmission Control Protocol (TCP)", STD 7, <a href="./rfc793">RFC</a>
<a href="./rfc793">793</a>, USC/Information Sciences Institute, September 1981.
[<a id="ref-4">4</a>] Postel, J., "User Datagram Protocol (UDP)", STD 6, <a href="./rfc768">RFC 768</a>,
USC/Information Sciences Institute, September 1981.
[<a id="ref-5">5</a>] Postel, J., "Internet Protocol (IP)", STD 5, <a href="./rfc791">RFC 791</a>,
USC/Information Sciences Institute, September 1981.
[<a id="ref-6">6</a>] Chapin, L., "ISO DIS 8473, Protocol for Providing the
Connectionless Network Service", <a href="./rfc994">RFC 994</a>, March 1986.
[<a id="ref-7">7</a>] Postel, J., "Internet Control Message Protocol (ICMP)", STD 5,
<a href="./rfc792">RFC 792</a>, USC/Information Sciences Institute, September 1981.
[<a id="ref-8">8</a>] Braden, R., Editor, "Requirements for Internet Hosts -
Communication Layers", STD 3, <a href="./rfc1122">RFC 1122</a>, Internet Engineering Task
Force, October 1989.
[<a id="ref-9">9</a>] Hagens, R., "An Echo Function for ISO 8473", <a href="./rfc1139">RFC 1139</a>, IETF-OSI
Working Group, May 1993.
[<a id="ref-10">10</a>] Sklower, K., "Improving the Efficiency of the ISO Checksum
Calculation" ACM SIGCOMM CCR 18, no. 5 (October 1989):32-43.
[<a id="ref-11">11</a>] ISO/IEC 8348-1992. International Standards Organization--Data
Communications--OSI Network Layer Service and Addressing.
<span class="grey">Piscitello [Page 22]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-23" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
[<a id="ref-12">12</a>] Callon, R., Gardner, E., and R. Hagens, "Guidelines for OSI NSAP
Allocation in the Internet", <a href="./rfc1237">RFC 1237</a>, NIST, Mitre, DEC, July
1991.
[<a id="ref-13">13</a>] Piscitello, D., "Assignment of System Identifiers for TUBA/CLNP
Hosts", <a href="./rfc1526">RFC 1526</a>, Bellcore, September 1993.
[<a id="ref-14">14</a>] ISO/IEC 9542:1988/PDAM 1. Information Processing Systems -- Data
Communications -- ES/IS Routeing Protocol for use with ISO CLNP
-- Amendment 1: Dynamic Discovery of OSI NSAP Addresses by End
Systems.
[<a id="ref-15">15</a>] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, <a href="./rfc1340">RFC 1340</a>
USC/Information Sciences Institute, July 1992.
[<a id="ref-16">16</a>] Kent, S., "Security Option for IP", <a href="./rfc1108">RFC 1108</a>, BBN Communications,
November 1991.
<span class="grey">Piscitello [Page 23]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-24" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
<span class="h2"><a class="selflink" id="appendix-A" href="#appendix-A">Appendix A</a>. Checksum Algorithms (from ISO/IEC 8473)</span>
Symbols used in algorithms:
c0, c1 variables used in the algorithms
i position of octet in header (first
octet is i=1)
Bi value of octet i in the header
n position of first octet of checksum (n=8)
L Length of header in octets
X Value of octet one of the checksum parameter
Y Value of octet two of the checksum parameter
Addition is performed in one of the two following modes:
* modulo 255 arithmetic;
* eight-bit one's complement arithmetic;
The algorithm for Generating the Checksum Parameter Value is as
follows:
A. Construct the complete header with the value of the
checksum parameter field set to zero; i.e., c0 <- c1 <- 0;
B. Process each octet of the header sequentially from i=1 to L
by:
* c0 <- c0 + Bi
* c1 <- c1 + c0
C. Calculate X, Y as follows:
* X <- (L - 8)(c0 - c1) modulo 255
* Y <- (L - 7)(-C0) + c1
D. If X = 0, then X <- 255
E. If Y = 0, then Y <- 255
F. place the values of X and Y in octets 8 and 9 of the
header, respectively
The algorithm for checking the value of the checksum parameter is as
follows:
<span class="grey">Piscitello [Page 24]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-25" ></span>
<span class="grey"><a href="./rfc1561">RFC 1561</a> CLNP in TUBA Environments December 1993</span>
A. If octets 8 and 9 of the header both contain zero, then the
checksum calculation has succeeded; else if either but not
both of these octets contains the value zero then the
checksum is incorrect; otherwise, initialize: c0 <- c1 <- 0
B. Process each octet of the header sequentially from i = 1 to
L by:
* c0 <- c0 + Bi
* c1 <- c1 + c0
C. When all the octets have been processed, if c0 = c1 = 0,
then the checksum calculation has succeeded, else it has
failed.
There is a separate algorithm to adjust the checksum parameter value
when a octet has been modified (such as the TTL). Suppose the value
in octet k is changed by Z = newvalue - oldvalue. If X and Y denote
the checksum values held in octets n and n+1 respectively, then
adjust X and Y as follows:
If X = 0 and Y = 0 then do nothing, else if X = 0 or Y = 0 then the
checksum is incorrect, else:
X <- (k - n - 1)Z + X modulo 255
Y <- (n - k)Z + Y modulo 255
If X = 0, then X <- 255; if Y = 0, then Y <- 255.
In the example, n = 89; if the octet altered is the TTL (octet 4),
then k = 4. For the case where the lifetime is decreased by one unit
(Z = -1), the assignment statements for the new values of X and Y in
the immediately preceeding algorithm simplify to:
X <- X + 5 Modulo 255
Y <- Y - 4 Modulo 255
Piscitello [Page 25]
</pre>
|