Repository navigation
Expand file tree
/
Copy pathnetapp-tutorial14.html
More file actions
1239 lines (1137 loc) · 78.1 KB
/
Copy pathnetapp-tutorial14.html
File metadata and controls
1239 lines (1137 loc) · 78.1 KB
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fibre Channel SAN — FCP Topologies, FC Layers & Switch Architecture</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<style>
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Sora:wght@300;400;600;700;800&family=Inter:wght@300;400;500;600&display=swap');
:root {
--bg-primary:#0d1117;--bg-secondary:#161b22;--bg-card:#1c2333;
--accent-blue:#58a6ff;--accent-green:#3fb950;--accent-orange:#f78166;
--accent-purple:#bc8cff;--accent-yellow:#e3b341;--accent-teal:#39d3c3;
--text-primary:#e6edf3;--text-secondary:#8b949e;--text-muted:#6e7681;
--border:#30363d;--border-bright:#484f58;--sidebar-width:290px;
}
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}
body{font-family:'Inter',sans-serif;background:var(--bg-primary);color:var(--text-primary);display:flex;min-height:100vh}
#reading-progress{position:fixed;top:0;left:var(--sidebar-width);right:0;height:3px;background:linear-gradient(90deg,var(--accent-blue),var(--accent-teal),var(--accent-purple));transform-origin:left;transform:scaleX(0);z-index:999;transition:transform .1s linear}
.sidebar{width:var(--sidebar-width);background:var(--bg-secondary);border-right:1px solid var(--border);position:fixed;top:0;left:0;height:100vh;overflow-y:auto;z-index:100;display:flex;flex-direction:column}
.sidebar-header{padding:20px 16px;border-bottom:1px solid var(--border);background:var(--bg-secondary);position:sticky;top:0;z-index:10}
.sidebar-logo{display:flex;align-items:center;gap:10px;margin-bottom:4px}
.sidebar-logo .logo-icon{width:32px;height:32px;background:linear-gradient(135deg,var(--accent-orange),var(--accent-purple));border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px}
.sidebar-logo span{font-family:'Sora',sans-serif;font-weight:700;font-size:14px;color:var(--text-primary);letter-spacing:.5px}
.sidebar-subtitle{font-size:11px;color:var(--text-muted);padding-left:42px}
.toc-nav{padding:12px 0;flex:1}
.toc-section-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:1.2px;color:var(--text-muted);padding:12px 16px 6px}
.toc-link{display:flex;align-items:center;gap:8px;padding:7px 16px;font-size:12.5px;color:var(--text-secondary);text-decoration:none;transition:all .2s ease;border-left:2px solid transparent;line-height:1.4}
.toc-link:hover{background:var(--bg-card);color:var(--text-primary);border-left-color:var(--accent-orange)}
.toc-link.active{background:rgba(247,129,102,.1);color:var(--accent-orange);border-left-color:var(--accent-orange);font-weight:500}
.toc-link .toc-num{font-size:10px;font-weight:700;color:var(--text-muted);min-width:18px;font-family:'JetBrains Mono',monospace}
.toc-link.sub{padding-left:32px;font-size:12px}
.series-nav{padding:12px 16px;border-top:1px solid var(--border)}
.series-nav-title{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:1px;color:var(--text-muted);margin-bottom:8px}
.series-link{display:block;padding:5px 8px;font-size:11.5px;color:var(--text-secondary);text-decoration:none;border-radius:5px;transition:all .2s;margin-bottom:2px}
.series-link:hover{background:var(--bg-card);color:var(--accent-teal)}
.series-link.current{color:var(--accent-orange);font-weight:600}
.main-content{margin-left:var(--sidebar-width);flex:1;max-width:calc(100vw - var(--sidebar-width))}
.top-header{background:linear-gradient(135deg,#0d1117 0%,#1a0d1f 50%,#0d1117 100%);border-bottom:1px solid var(--border);padding:60px 60px 50px;position:relative;overflow:hidden}
.top-header::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 70% 50%,rgba(247,129,102,.07) 0%,transparent 60%),radial-gradient(ellipse at 20% 80%,rgba(188,140,255,.06) 0%,transparent 50%)}
.header-badge{display:inline-flex;align-items:center;gap:6px;background:rgba(247,129,102,.12);border:1px solid rgba(247,129,102,.3);border-radius:20px;padding:4px 14px;font-size:12px;color:var(--accent-orange);font-weight:500;margin-bottom:18px;font-family:'JetBrains Mono',monospace}
.main-title{font-family:'Sora',sans-serif;font-size:36px;font-weight:800;line-height:1.15;margin-bottom:16px;background:linear-gradient(135deg,#e6edf3 20%,#f78166 55%,#bc8cff 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;position:relative}
.header-desc{font-size:15px;color:var(--text-secondary);line-height:1.7;max-width:700px;position:relative}
.header-meta{display:flex;gap:24px;flex-wrap:wrap;margin-top:20px;position:relative}
.meta-chip{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-secondary)}
.meta-chip .dot{width:8px;height:8px;border-radius:50%}
.prog-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px;position:relative}
.prog-chip{background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:6px;padding:3px 10px;font-size:11px;color:var(--text-muted);font-family:'JetBrains Mono',monospace}
.content-area{padding:40px 60px 80px;max-width:1020px}
.section{margin-bottom:64px;scroll-margin-top:30px}
.section-header{display:flex;align-items:flex-start;gap:16px;margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--border)}
.section-icon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;margin-top:2px}
.icon-teal{background:rgba(57,211,195,.15);border:1px solid rgba(57,211,195,.3)}
.icon-blue{background:rgba(88,166,255,.15);border:1px solid rgba(88,166,255,.3)}
.icon-green{background:rgba(63,185,80,.15);border:1px solid rgba(63,185,80,.3)}
.icon-orange{background:rgba(247,129,102,.15);border:1px solid rgba(247,129,102,.3)}
.icon-purple{background:rgba(188,140,255,.15);border:1px solid rgba(188,140,255,.3)}
.icon-yellow{background:rgba(227,179,65,.15);border:1px solid rgba(227,179,65,.3)}
.section-title-wrap h2{font-family:'Sora',sans-serif;font-size:24px;font-weight:700;color:var(--text-primary);line-height:1.2}
.section-title-wrap .section-num{font-size:11px;font-family:'JetBrains Mono',monospace;color:var(--text-muted);font-weight:400;margin-bottom:4px}
.card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:24px;margin-bottom:20px;transition:border-color .2s}
.card:hover{border-color:var(--border-bright)}
.card-title{font-family:'Sora',sans-serif;font-weight:600;font-size:15px;color:var(--text-primary);margin-bottom:12px;display:flex;align-items:center;gap:8px}
p{font-size:14.5px;line-height:1.8;color:var(--text-secondary);margin-bottom:14px}
.callout{border-radius:10px;padding:16px 20px;margin:20px 0;display:flex;gap:14px;align-items:flex-start}
.callout-icon{font-size:18px;margin-top:1px;flex-shrink:0}
.callout-content{flex:1}
.callout-title{font-weight:600;font-size:13px;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.callout-text{font-size:13.5px;line-height:1.7;color:var(--text-secondary)}
.callout.info{background:rgba(88,166,255,.08);border:1px solid rgba(88,166,255,.25)}.callout.info .callout-title{color:var(--accent-blue)}
.callout.success{background:rgba(63,185,80,.08);border:1px solid rgba(63,185,80,.25)}.callout.success .callout-title{color:var(--accent-green)}
.callout.warning{background:rgba(227,179,65,.08);border:1px solid rgba(227,179,65,.3)}.callout.warning .callout-title{color:var(--accent-yellow)}
.callout.danger{background:rgba(247,129,102,.08);border:1px solid rgba(247,129,102,.3)}.callout.danger .callout-title{color:var(--accent-orange)}
.callout.tip{background:rgba(188,140,255,.08);border:1px solid rgba(188,140,255,.25)}.callout.tip .callout-title{color:var(--accent-purple)}
.callout.teal{background:rgba(57,211,195,.08);border:1px solid rgba(57,211,195,.25)}.callout.teal .callout-title{color:var(--accent-teal)}
.code-block{background:#080c10;border:1px solid var(--border);border-radius:10px;overflow:hidden;margin:16px 0}
.code-header{background:var(--bg-secondary);border-bottom:1px solid var(--border);padding:8px 16px;display:flex;align-items:center;justify-content:space-between}
.code-lang{font-size:11px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.8px;font-family:'JetBrains Mono',monospace}
.code-dots{display:flex;gap:5px}.code-dots span{width:10px;height:10px;border-radius:50%}
.dot-red{background:#ff5f56}.dot-ylw{background:#ffbd2e}.dot-grn{background:#27c93f}
.code-body{padding:20px;font-size:12.5px;line-height:1.85;color:#79c0ff;overflow-x:auto;white-space:pre;font-family:'JetBrains Mono',monospace}
.code-body .cmd{color:#3fb950}.code-body .comment{color:#6e7681;font-style:italic}
.code-body .param{color:#ffa657}.code-body .value{color:#a5d6ff}
.code-body .output{color:#8b949e}.code-body .prompt{color:#e3b341}.code-body .hl{color:#39d3c3}
.spec-table{width:100%;border-collapse:collapse;margin:16px 0;font-size:13.5px}
.spec-table th{background:var(--bg-secondary);color:var(--text-secondary);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;padding:10px 16px;text-align:left;border-bottom:2px solid var(--border)}
.spec-table td{padding:11px 16px;border-bottom:1px solid var(--border);color:var(--text-secondary);vertical-align:middle}
.spec-table tr:hover td{background:rgba(255,255,255,.02)}
.badge{display:inline-block;padding:2px 10px;border-radius:20px;font-size:11.5px;font-weight:600;font-family:'JetBrains Mono',monospace}
.badge-blue{background:rgba(88,166,255,.15);color:var(--accent-blue);border:1px solid rgba(88,166,255,.3)}
.badge-green{background:rgba(63,185,80,.15);color:var(--accent-green);border:1px solid rgba(63,185,80,.3)}
.badge-orange{background:rgba(247,129,102,.15);color:var(--accent-orange);border:1px solid rgba(247,129,102,.3)}
.badge-yellow{background:rgba(227,179,65,.15);color:var(--accent-yellow);border:1px solid rgba(227,179,65,.3)}
.badge-teal{background:rgba(57,211,195,.15);color:var(--accent-teal);border:1px solid rgba(57,211,195,.3)}
.badge-purple{background:rgba(188,140,255,.15);color:var(--accent-purple);border:1px solid rgba(188,140,255,.3)}
.badge-red{background:rgba(247,129,102,.15);color:#ff7b72;border:1px solid rgba(247,100,80,.3)}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:16px 0}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:16px 0}
.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:10px;padding:20px;text-align:center}
.stat-num{font-family:'Sora',sans-serif;font-size:28px;font-weight:800;margin-bottom:4px}
.stat-label{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}
.step-list{list-style:none;margin:12px 0}
.step-list li{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid rgba(48,54,61,.5);font-size:13.5px;color:var(--text-secondary);line-height:1.6;align-items:flex-start}
.step-list li:last-child{border-bottom:none}
.step-num{width:22px;height:22px;border-radius:6px;background:rgba(57,211,195,.15);border:1px solid rgba(57,211,195,.3);color:var(--accent-teal);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;font-family:'JetBrains Mono',monospace}
.bullet-list{list-style:none;margin:10px 0}
.bullet-list li{padding:6px 0 6px 20px;position:relative;font-size:13.5px;color:var(--text-secondary);line-height:1.6}
.bullet-list li::before{content:'▸';position:absolute;left:0;color:var(--accent-orange);font-size:11px;top:8px}
h3{font-family:'Sora',sans-serif;font-size:17px;font-weight:600;color:var(--text-primary);margin:24px 0 12px}
h4{font-family:'Sora',sans-serif;font-size:14px;font-weight:600;color:var(--accent-teal);margin:18px 0 8px;text-transform:uppercase;letter-spacing:.5px}
.diagram-wrap{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:24px;margin:20px 0;overflow-x:auto}
.diagram-caption{text-align:center;font-size:12px;color:var(--text-muted);margin-top:12px;font-style:italic}
.mermaid{display:flex;justify-content:center}
.svg-wrap{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:24px;margin:20px 0;overflow-x:auto}
.quiz-card{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;padding:22px;margin-bottom:16px}
.quiz-q{font-size:14px;font-weight:600;color:var(--text-primary);margin-bottom:12px}
.quiz-a{display:none;background:rgba(57,211,195,.06);border:1px solid rgba(57,211,195,.2);border-radius:8px;padding:14px 16px;margin-top:10px;font-size:13.5px;color:var(--text-secondary);line-height:1.7}
.quiz-btn{background:rgba(247,129,102,.1);border:1px solid rgba(247,129,102,.3);color:var(--accent-orange);border-radius:6px;padding:6px 14px;font-size:12px;cursor:pointer;font-family:'JetBrains Mono',monospace;transition:all .2s}
.quiz-btn:hover{background:rgba(247,129,102,.2)}
.author-card{background:linear-gradient(135deg,#161b22,#1c2333);border:1px solid var(--border);border-radius:16px;padding:32px;margin-top:40px;position:relative;overflow:hidden}
.author-card::before{content:'';position:absolute;top:-40px;right:-40px;width:180px;height:180px;background:radial-gradient(circle,rgba(247,129,102,.08),transparent 70%);border-radius:50%}
.author-avatar{font-size:48px;margin-bottom:12px}
.author-name{font-family:'Sora',sans-serif;font-size:22px;font-weight:700;color:var(--text-primary);margin-bottom:4px}
.author-title{font-size:13px;color:var(--accent-orange);margin-bottom:16px;font-family:'JetBrains Mono',monospace}
.author-bio{font-size:14px;color:var(--text-secondary);line-height:1.7;margin-bottom:20px}
.tech-badges{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
.tech-badge{background:rgba(88,166,255,.1);border:1px solid rgba(88,166,255,.25);color:var(--accent-blue);border-radius:20px;padding:3px 12px;font-size:12px;font-family:'JetBrains Mono',monospace}
.contact-link{display:inline-flex;align-items:center;gap:8px;background:rgba(247,129,102,.1);border:1px solid rgba(247,129,102,.3);color:var(--accent-orange);border-radius:8px;padding:8px 16px;font-size:13px;text-decoration:none;transition:all .2s;margin-bottom:20px}
.contact-link:hover{background:rgba(247,129,102,.2)}
/* Frame visualizer */
.frame-viz{display:flex;width:100%;border-radius:8px;overflow:hidden;margin:16px 0;font-family:'JetBrains Mono',monospace}
.frame-seg{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:14px 8px;font-size:11px;font-weight:700;text-align:center;gap:4px}
.frame-seg .seg-name{font-size:12px;font-weight:700}
.frame-seg .seg-size{font-size:10px;opacity:.7}
.fs-sof{background:rgba(88,166,255,.25);border:1px solid rgba(88,166,255,.5);color:var(--accent-blue);flex:4}
.fs-hdr{background:rgba(57,211,195,.25);border:1px solid rgba(57,211,195,.5);color:var(--accent-teal);flex:24}
.fs-pay{background:rgba(63,185,80,.25);border:1px solid rgba(63,185,80,.5);color:var(--accent-green);flex:112}
.fs-crc{background:rgba(227,179,65,.25);border:1px solid rgba(227,179,65,.5);color:var(--accent-yellow);flex:4}
.fs-eof{background:rgba(247,129,102,.25);border:1px solid rgba(247,129,102,.5);color:var(--accent-orange);flex:4}
/* Switch blade diagram */
.blade-chassis{display:grid;grid-template-columns:1fr;gap:4px;background:var(--bg-secondary);border:2px solid var(--border-bright);border-radius:10px;padding:12px;margin:16px 0}
.blade-row{display:grid;gap:4px;border-radius:6px;overflow:hidden}
.blade{border-radius:5px;padding:10px 14px;font-size:12px;font-family:'JetBrains Mono',monospace;display:flex;align-items:center;gap:10px}
.blade-cp{background:rgba(88,166,255,.15);border:1px solid rgba(88,166,255,.4);color:var(--accent-blue)}
.blade-icl{background:rgba(188,140,255,.15);border:1px solid rgba(188,140,255,.4);color:var(--accent-purple)}
.blade-port{background:rgba(63,185,80,.12);border:1px solid rgba(63,185,80,.3);color:var(--accent-green)}
.blade-empty{background:rgba(255,255,255,.02);border:1px solid var(--border);color:var(--text-muted)}
.blade-dot{width:8px;height:8px;border-radius:50%}
.bd-blue{background:var(--accent-blue)}
.bd-purple{background:var(--accent-purple)}
.bd-green{background:var(--accent-green)}
.bd-gray{background:var(--text-muted)}
.port-row{display:flex;gap:3px;margin-left:auto}
.port-sq{width:10px;height:10px;border-radius:2px}
.port-on{background:var(--accent-teal)}
.port-off{background:var(--border-bright)}
@media(max-width:900px){.sidebar{transform:translateX(-100%)}.main-content{margin-left:0;max-width:100vw}.top-header{padding:30px 20px}.content-area{padding:20px}.grid-2,.grid-3{grid-template-columns:1fr}#reading-progress{left:0}.frame-viz{flex-direction:column}.frame-seg{padding:10px}}
</style>
</head>
<body>
<div id="reading-progress"></div>
<!-- SIDEBAR -->
<nav class="sidebar">
<div class="sidebar-header">
<div class="sidebar-logo">
<div class="logo-icon">🔌</div>
<span>SAN Fundamentals</span>
</div>
<div class="sidebar-subtitle">FCP · FC Layers · Switch Architecture</div>
</div>
<div class="toc-nav">
<div class="toc-section-label">FCP Topologies</div>
<a class="toc-link" href="#s1"><span class="toc-num">01</span>What is FCP & Why Dedicated?</a>
<a class="toc-link" href="#s2"><span class="toc-num">02</span>Point-to-Point Topology</a>
<a class="toc-link sub" href="#s2"><span class="toc-num">↳</span>Use Cases & Limits</a>
<a class="toc-link" href="#s3"><span class="toc-num">03</span>FC Arbitrated Loop (FCAL)</a>
<a class="toc-link sub" href="#s3"><span class="toc-num">↳</span>ALPA Addressing</a>
<a class="toc-link sub" href="#s3"><span class="toc-num">↳</span>Limitations</a>
<a class="toc-link" href="#s4"><span class="toc-num">04</span>Switched Fabric Topology</a>
<a class="toc-link sub" href="#s4"><span class="toc-num">↳</span>Dual Fabric Design</a>
<a class="toc-link sub" href="#s4"><span class="toc-num">↳</span>Domain IDs & PID Addressing</a>
<div class="toc-section-label">FC Protocol Stack</div>
<a class="toc-link" href="#s5"><span class="toc-num">05</span>Five FC Protocol Layers</a>
<a class="toc-link" href="#s6"><span class="toc-num">06</span>FC Frame Structure</a>
<a class="toc-link sub" href="#s6"><span class="toc-num">↳</span>CRC — Two-Way Check</a>
<div class="toc-section-label">Switch Architecture</div>
<a class="toc-link" href="#s7"><span class="toc-num">07</span>SAN Switch Vendors</a>
<a class="toc-link" href="#s8"><span class="toc-num">08</span>Director-Class Switches</a>
<a class="toc-link sub" href="#s8"><span class="toc-num">↳</span>Blades: CP, ICL, Port</a>
<a class="toc-link sub" href="#s8"><span class="toc-num">↳</span>ASIC & Port Groups</a>
<a class="toc-link" href="#s9"><span class="toc-num">09</span>Department-Class Switches</a>
<a class="toc-link" href="#s10"><span class="toc-num">10</span>Topology Comparison</a>
<a class="toc-link" href="#s11"><span class="toc-num">11</span>Interview Q&A</a>
<a class="toc-link" href="#author"><span class="toc-num">★</span>About the Author</a>
</div>
<div class="series-nav">
<div class="series-nav-title">SAN Tutorial Series</div>
<a class="series-link" href="https://mohammedabdularchitect.github.io/NetAppTutorials/index.html" target="_blank">📋 Series Index</a>
<a class="series-link" href="https://mohammedabdularchitect.github.io/NetAppTutorials/netapp-tutorial13.html" target="_blank">← Tutorial 13 (iSCSI)</a>
<a class="series-link current" href="#">Tutorial 14 (FCP)</a>
</div>
</nav>
<!-- MAIN -->
<div class="main-content">
<header class="top-header">
<div class="header-badge">🔌 Tutorial 14 · Fibre Channel SAN Administration</div>
<h1 class="main-title">Fibre Channel Protocol — Topologies,<br>FC Layers & Switch Architecture</h1>
<p class="header-desc">A structured deep-dive into Fibre Channel SAN: understanding the three connectivity topologies, the five-layer FC protocol stack, the anatomy of an FC frame, and how enterprise-grade SAN switches are architected — from chassis blades to port groups and ASIC processors.</p>
<div class="header-meta">
<div class="meta-chip"><span class="dot" style="background:var(--accent-orange)"></span>FCP Topologies</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-blue)"></span>FC Protocol Layers</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-purple)"></span>Frame Structure</div>
<div class="meta-chip"><span class="dot" style="background:var(--accent-teal)"></span>Switch Architecture</div>
</div>
<div class="prog-chips">
<span class="prog-chip">FCP</span>
<span class="prog-chip">FCAL</span>
<span class="prog-chip">Switched Fabric</span>
<span class="prog-chip">ALPA</span>
<span class="prog-chip">PID / 24-bit</span>
<span class="prog-chip">WWN / WWPN</span>
<span class="prog-chip">Director Switch</span>
<span class="prog-chip">DCX Series</span>
<span class="prog-chip">ASIC</span>
<span class="prog-chip">Dual Fabric</span>
</div>
</header>
<div class="content-area">
<!-- ═══ SECTION 1 ═══ -->
<section class="section" id="s1">
<div class="section-header">
<div class="section-icon icon-orange">🔌</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 01</div>
<h2>What is FCP and Why a Dedicated Network?</h2>
</div>
</div>
<p>Fibre Channel Protocol (FCP) is the second major SAN protocol alongside iSCSI. Unlike iSCSI, which can piggyback on your existing Ethernet LAN infrastructure, FCP demands its own dedicated network. Both the server and the storage array must reside in the same physical location and connect directly via fibre channel cabling — there is no option to route FCP traffic across geographically separate sites over a conventional IP backbone.</p>
<p>This dedicated nature is a double-edged characteristic: it introduces higher infrastructure cost, but in return delivers extremely low latency, high throughput, and deterministic performance that shared networks simply cannot guarantee. FCP is the protocol of choice in performance-critical environments such as financial platforms, high-transaction databases, and media production workloads.</p>
<div class="grid-2">
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-orange)">3</div>
<div class="stat-label">FC Topologies Available</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-blue)">5</div>
<div class="stat-label">FC Protocol Layers</div>
</div>
</div>
<div class="grid-2">
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-teal)">2148</div>
<div class="stat-label">Bytes per FC Frame</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-purple)">16M</div>
<div class="stat-label">Theoretical Devices / Fabric</div>
</div>
</div>
<div class="callout info">
<div class="callout-icon">💡</div>
<div class="callout-content">
<div class="callout-title">iSCSI vs FCP — Network Dependency</div>
<div class="callout-text">iSCSI reuses an existing IP/Ethernet LAN — no dedicated cabling required. FCP requires a dedicated Fibre Channel network with FC-capable HBAs (Host Bus Adapters) on servers and FCA (Fibre Channel Adapters) on storage controllers. Each HBA and FCA has both a transmitter and a receiver port.</div>
</div>
</div>
<div class="diagram-wrap">
<div class="mermaid">
graph LR
subgraph iSCSI["iSCSI — Uses Existing LAN"]
S1["Server\n(NIC)"] -->|"Ethernet"| LAN["Existing IP Network"] -->|"Ethernet"| ST1["Storage\n(NIC)"]
end
subgraph FCP["FCP — Dedicated Fibre Channel Network"]
S2["Server\n(HBA)"] -->|"FC Cable"| FCN["Dedicated FC Network\n(SAN Switches)"] -->|"FC Cable"| ST2["Storage\n(FCA)"]
end
</div>
<div class="diagram-caption">Figure 1 — iSCSI leverages an IP LAN; FCP requires a fully dedicated Fibre Channel fabric</div>
</div>
</section>
<!-- ═══ SECTION 2 ═══ -->
<section class="section" id="s2">
<div class="section-header">
<div class="section-icon icon-blue">⟷</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 02</div>
<h2>Point-to-Point Topology</h2>
</div>
</div>
<p>Point-to-point is the most elementary Fibre Channel connectivity method. Two devices — typically a single server and a single storage array — are joined directly by a fibre channel cable, with absolutely nothing in between. There are no switches, no hubs, and no intermediary components. The cable connects directly from the server's HBA port to the storage controller's FCA port.</p>
<div class="svg-wrap">
<svg viewBox="0 0 700 180" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:700px;display:block;margin:0 auto">
<!-- Server box -->
<rect x="30" y="50" width="160" height="80" rx="10" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5"/>
<text x="110" y="83" text-anchor="middle" font-family="Sora,sans-serif" font-size="13" font-weight="700" fill="#e6edf3">Application Server</text>
<text x="110" y="102" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="10" fill="#8b949e">HBA Port</text>
<rect x="175" y="80" width="15" height="20" rx="2" fill="#58a6ff" opacity="0.7"/>
<!-- Storage box -->
<rect x="510" y="50" width="160" height="80" rx="10" fill="#1c2333" stroke="#f78166" stroke-width="1.5"/>
<text x="590" y="83" text-anchor="middle" font-family="Sora,sans-serif" font-size="13" font-weight="700" fill="#e6edf3">Storage Array</text>
<text x="590" y="102" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="10" fill="#8b949e">FCA Port</text>
<rect x="510" y="80" width="15" height="20" rx="2" fill="#f78166" opacity="0.7"/>
<!-- Direct cable line -->
<line x1="190" y1="90" x2="510" y2="90" stroke="#39d3c3" stroke-width="2.5" stroke-dasharray="8,4"/>
<text x="350" y="78" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="11" fill="#39d3c3">FC Cable — Direct Link</text>
<!-- Arrow heads -->
<polygon points="505,85 515,90 505,95" fill="#39d3c3"/>
<polygon points="195,85 185,90 195,95" fill="#39d3c3"/>
<!-- Label bottom -->
<text x="350" y="155" text-anchor="middle" font-family="Inter,sans-serif" font-size="11" fill="#6e7681" font-style="italic">Only two devices — no switch, no network, no intermediary</text>
</svg>
<div class="diagram-caption">Figure 2 — Point-to-point: a single direct FC cable between server HBA and storage FCA</div>
</div>
<h3>When Point-to-Point Makes Sense</h3>
<p>This topology only makes economic sense when an organization truly has a single server connecting to a single storage system and has no plans to expand. Because storage controllers typically ship with multiple FCA ports, it is technically possible to connect several servers individually — but each server-storage pair becomes its own isolated point-to-point link with no shared infrastructure.</p>
<div class="callout danger">
<div class="callout-icon">🚫</div>
<div class="callout-content">
<div class="callout-title">Critical Limitation — Cannot Scale</div>
<div class="callout-text">Point-to-point supports exactly two devices. If you need to add a third server or a second storage array, the entire topology must be redesigned. There is no upgrade path within point-to-point itself — you must migrate to FCAL or Switched Fabric.</div>
</div>
</div>
<table class="spec-table">
<thead><tr><th>Characteristic</th><th>Detail</th></tr></thead>
<tbody>
<tr><td>Maximum Devices</td><td><span class="badge badge-orange">2 Only</span></td></tr>
<tr><td>Connectivity</td><td>Direct cable — no switch required</td></tr>
<tr><td>Bandwidth</td><td>Dedicated — full link speed between two devices</td></tr>
<tr><td>Scalability</td><td>None — fixed at two endpoints</td></tr>
<tr><td>Addressing</td><td>Not applicable — direct physical connection</td></tr>
<tr><td>Real-World Usage</td><td>Rare — only in very small, static environments</td></tr>
</tbody>
</table>
</section>
<!-- ═══ SECTION 3 ═══ -->
<section class="section" id="s3">
<div class="section-header">
<div class="section-icon icon-yellow">🔁</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 03</div>
<h2>FC Arbitrated Loop (FCAL)</h2>
</div>
</div>
<p>FC Arbitrated Loop (FCAL) allows more than two devices to participate in a Fibre Channel network by connecting them in a circular ring topology. Every device is linked to the next, forming a closed loop. Data travels around this loop in a single direction — there is no bidirectional flow. If a server needs to write data to a storage system that sits "behind" it in the loop, the data must travel the long way around through all intermediate devices.</p>
<div class="diagram-wrap">
<div class="mermaid">
graph LR
SRV1["🖥️ Server A"] -->|"FC"| SRV2["🖥️ Server B"]
SRV2 -->|"FC"| STO1["💾 Storage X"]
STO1 -->|"FC"| STO2["💾 Storage Y"]
STO2 -->|"FC"| HUB["FC Hub"]
HUB -->|"FC"| SRV1
style SRV1 fill:#1c2333,stroke:#58a6ff,color:#e6edf3
style SRV2 fill:#1c2333,stroke:#58a6ff,color:#e6edf3
style STO1 fill:#1c2333,stroke:#3fb950,color:#e6edf3
style STO2 fill:#1c2333,stroke:#3fb950,color:#e6edf3
style HUB fill:#1c2333,stroke:#e3b341,color:#e3b341
</div>
<div class="diagram-caption">Figure 3 — FCAL: all devices connected in a single-direction ring. Data always travels the full loop path.</div>
</div>
<h3>ALPA — Arbitrated Loop Port Address</h3>
<p>When a device joins an FCAL network, it is automatically assigned an 8-bit address known as the ALPA (Arbitrated Loop Port Address). Devices identify and communicate with each other using these ALPA values rather than names or IP addresses. Because the address is 8 bits wide, the addressable space limits the maximum loop to 127 active devices. Adding devices beyond this threshold degrades performance and can introduce connectivity instability.</p>
<div class="card">
<div class="card-title">📌 ALPA — How It Works</div>
<ul class="bullet-list">
<li>8-bit address automatically assigned on loop entry</li>
<li>Maximum addressable devices per loop: <strong>127</strong></li>
<li>Devices with ALPA value <code>0x00</code> hold the highest priority in loop arbitration</li>
<li>Addresses are dynamically assigned — not manually configured</li>
<li>Removing a device triggers loop re-initialization (brief disruption)</li>
</ul>
</div>
<h3>FCAL Limitations — Why It Is Obsolete</h3>
<div class="callout warning">
<div class="callout-icon">⚠️</div>
<div class="callout-content">
<div class="callout-title">FCAL Is a Legacy Topology</div>
<div class="callout-text">FCAL is considered an outdated technology and is not deployed in modern data center environments. Its fundamental design — shared bandwidth, sequential arbitration, single-direction flow — makes it unsuitable for any workload that demands consistent throughput or low latency.</div>
</div>
</div>
<table class="spec-table">
<thead><tr><th>Limitation</th><th>Impact</th><th>Severity</th></tr></thead>
<tbody>
<tr><td>Only two devices can communicate at once</td><td>All remaining devices blocked during active I/O</td><td><span class="badge badge-red">Critical</span></td></tr>
<tr><td>Shared bandwidth across all loop members</td><td>Performance degrades as device count grows</td><td><span class="badge badge-orange">High</span></td></tr>
<tr><td>Single-direction data flow</td><td>Data travels longest possible path through loop</td><td><span class="badge badge-orange">High</span></td></tr>
<tr><td>One device failure breaks entire ring</td><td>All loop devices lose connectivity</td><td><span class="badge badge-red">Critical</span></td></tr>
<tr><td>Adding/removing devices requires downtime</td><td>Loop re-initialization impacts all members</td><td><span class="badge badge-yellow">Medium</span></td></tr>
<tr><td>127 device maximum</td><td>Very limited scalability</td><td><span class="badge badge-yellow">Medium</span></td></tr>
</tbody>
</table>
<div class="diagram-wrap">
<div class="mermaid">
flowchart TD
A["Device wants to send I/O"] --> B["Arbitrate for loop access"]
B --> C{"Loop free?"}
C -->|"No — another pair active"| D["Wait for current I/O to complete"]
D --> B
C -->|"Yes"| E["Win arbitration — begin I/O"]
E --> F["Data travels one direction around loop"]
F --> G["Destination receives data"]
G --> H["Release loop — next device arbitrates"]
style A fill:#1c2333,stroke:#58a6ff,color:#e6edf3
style B fill:#1c2333,stroke:#e3b341,color:#e3b341
style C fill:#1c2333,stroke:#bc8cff,color:#bc8cff
style D fill:#1c2333,stroke:#f78166,color:#f78166
style E fill:#1c2333,stroke:#3fb950,color:#3fb950
style F fill:#1c2333,stroke:#39d3c3,color:#39d3c3
style G fill:#1c2333,stroke:#3fb950,color:#3fb950
style H fill:#1c2333,stroke:#8b949e,color:#8b949e
</div>
<div class="diagram-caption">Figure 4 — FCAL arbitration flow: devices wait sequentially for loop access, drastically limiting throughput</div>
</div>
</section>
<!-- ═══ SECTION 4 ═══ -->
<section class="section" id="s4">
<div class="section-header">
<div class="section-icon icon-teal">🕸️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 04</div>
<h2>Switched Fabric Topology</h2>
</div>
</div>
<p>Switched Fabric is the de-facto standard for all modern Fibre Channel deployments. Every enterprise SAN today runs on switched fabric. The fundamental idea is that dedicated SAN switches sit between all servers and storage systems, forming an intelligent, self-configuring network called a <strong>fabric</strong>. The term "fabric" is the official technical name for a FC SAN network — whenever you hear "fabric," think SAN network.</p>
<h3>The Dual-Fabric Standard</h3>
<p>Every well-designed production environment maintains two independent fabrics — Fabric A and Fabric B. Each server connects to both fabrics simultaneously via separate HBA ports. Each storage controller connects to both fabrics via separate FCA ports. This design eliminates every single point of failure at the network level: if an entire fabric goes down, all I/O simply flows through the surviving fabric with a temporary performance impact but zero downtime.</p>
<div class="svg-wrap">
<svg viewBox="0 0 740 420" xmlns="http://www.w3.org/2000/svg" style="width:100%;max-width:740px;display:block;margin:0 auto">
<!-- Background labels -->
<text x="200" y="22" text-anchor="middle" font-family="Sora,sans-serif" font-size="13" font-weight="700" fill="#58a6ff">Fabric A</text>
<text x="540" y="22" text-anchor="middle" font-family="Sora,sans-serif" font-size="13" font-weight="700" fill="#bc8cff">Fabric B</text>
<!-- Fabric A switch -->
<rect x="120" y="32" width="160" height="55" rx="8" fill="#1c2333" stroke="#58a6ff" stroke-width="2"/>
<text x="200" y="58" text-anchor="middle" font-family="Sora,sans-serif" font-size="12" font-weight="700" fill="#58a6ff">FC Switch A1</text>
<text x="200" y="75" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="10" fill="#8b949e">Domain ID: 1</text>
<!-- Fabric A switch 2 -->
<rect x="120" y="110" width="160" height="55" rx="8" fill="#1c2333" stroke="#58a6ff" stroke-width="1.5" stroke-dasharray="4,2"/>
<text x="200" y="136" text-anchor="middle" font-family="Sora,sans-serif" font-size="12" font-weight="700" fill="#58a6ff">FC Switch A2</text>
<text x="200" y="153" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="10" fill="#8b949e">Domain ID: 2</text>
<!-- ISL line between A switches -->
<line x1="200" y1="87" x2="200" y2="110" stroke="#58a6ff" stroke-width="1.5" stroke-dasharray="4,2"/>
<text x="215" y="101" font-family="JetBrains Mono,monospace" font-size="9" fill="#6e7681">ISL</text>
<!-- Fabric B switch -->
<rect x="460" y="32" width="160" height="55" rx="8" fill="#1c2333" stroke="#bc8cff" stroke-width="2"/>
<text x="540" y="58" text-anchor="middle" font-family="Sora,sans-serif" font-size="12" font-weight="700" fill="#bc8cff">FC Switch B1</text>
<text x="540" y="75" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="10" fill="#8b949e">Domain ID: 1</text>
<!-- Fabric B switch 2 -->
<rect x="460" y="110" width="160" height="55" rx="8" fill="#1c2333" stroke="#bc8cff" stroke-width="1.5" stroke-dasharray="4,2"/>
<text x="540" y="136" text-anchor="middle" font-family="Sora,sans-serif" font-size="12" font-weight="700" fill="#bc8cff">FC Switch B2</text>
<text x="540" y="153" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="10" fill="#8b949e">Domain ID: 2</text>
<line x1="540" y1="87" x2="540" y2="110" stroke="#bc8cff" stroke-width="1.5" stroke-dasharray="4,2"/>
<text x="555" y="101" font-family="JetBrains Mono,monospace" font-size="9" fill="#6e7681">ISL</text>
<!-- Servers -->
<rect x="30" y="215" width="110" height="50" rx="6" fill="#1c2333" stroke="#3fb950" stroke-width="1.5"/>
<text x="85" y="238" text-anchor="middle" font-family="Sora,sans-serif" font-size="11" font-weight="700" fill="#e6edf3">Server 01</text>
<text x="85" y="254" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="9" fill="#8b949e">HBA0 | HBA1</text>
<rect x="30" y="285" width="110" height="50" rx="6" fill="#1c2333" stroke="#3fb950" stroke-width="1.5"/>
<text x="85" y="308" text-anchor="middle" font-family="Sora,sans-serif" font-size="11" font-weight="700" fill="#e6edf3">Server 02</text>
<text x="85" y="324" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="9" fill="#8b949e">HBA0 | HBA1</text>
<rect x="30" y="355" width="110" height="50" rx="6" fill="#1c2333" stroke="#3fb950" stroke-width="1.5"/>
<text x="85" y="378" text-anchor="middle" font-family="Sora,sans-serif" font-size="11" font-weight="700" fill="#e6edf3">Server 03</text>
<text x="85" y="394" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="9" fill="#8b949e">HBA0 | HBA1</text>
<!-- Storage arrays -->
<rect x="600" y="230" width="120" height="50" rx="6" fill="#1c2333" stroke="#f78166" stroke-width="1.5"/>
<text x="660" y="253" text-anchor="middle" font-family="Sora,sans-serif" font-size="11" font-weight="700" fill="#e6edf3">Storage-1</text>
<text x="660" y="270" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="9" fill="#8b949e">FCA0 | FCA1</text>
<rect x="600" y="300" width="120" height="50" rx="6" fill="#1c2333" stroke="#f78166" stroke-width="1.5"/>
<text x="660" y="323" text-anchor="middle" font-family="Sora,sans-serif" font-size="11" font-weight="700" fill="#e6edf3">Storage-2</text>
<text x="660" y="340" text-anchor="middle" font-family="JetBrains Mono,monospace" font-size="9" fill="#8b949e">FCA0 | FCA1</text>
<!-- Server → Fabric A connections (HBA0) -->
<line x1="140" y1="235" x2="140" y2="87" stroke="#58a6ff" stroke-width="1.2" opacity="0.7"/>
<line x1="140" y1="305" x2="140" y2="87" stroke="#58a6ff" stroke-width="1.2" opacity="0.7"/>
<line x1="140" y1="375" x2="140" y2="165" stroke="#58a6ff" stroke-width="1.2" opacity="0.7"/>
<!-- Server → Fabric B connections (HBA1) -->
<line x1="140" y1="240" x2="460" y2="75" stroke="#bc8cff" stroke-width="1.2" opacity="0.5" stroke-dasharray="5,3"/>
<line x1="140" y1="310" x2="460" y2="87" stroke="#bc8cff" stroke-width="1.2" opacity="0.5" stroke-dasharray="5,3"/>
<line x1="140" y1="375" x2="460" y2="160" stroke="#bc8cff" stroke-width="1.2" opacity="0.5" stroke-dasharray="5,3"/>
<!-- Storage → Fabric A connections (FCA0) -->
<line x1="600" y1="248" x2="280" y2="75" stroke="#58a6ff" stroke-width="1.2" opacity="0.6"/>
<line x1="600" y1="318" x2="280" y2="155" stroke="#58a6ff" stroke-width="1.2" opacity="0.6"/>
<!-- Storage → Fabric B connections (FCA1) -->
<line x1="600" y1="253" x2="620" y2="87" stroke="#bc8cff" stroke-width="1.2" opacity="0.7"/>
<line x1="600" y1="323" x2="620" y2="87" stroke="#bc8cff" stroke-width="1.2" opacity="0.7"/>
<!-- Legend -->
<line x1="30" y1="410" x2="60" y2="410" stroke="#58a6ff" stroke-width="1.5"/>
<text x="65" y="414" font-family="Inter,sans-serif" font-size="10" fill="#8b949e">Fabric A path</text>
<line x1="160" y1="410" x2="190" y2="410" stroke="#bc8cff" stroke-width="1.5" stroke-dasharray="5,3"/>
<text x="195" y="414" font-family="Inter,sans-serif" font-size="10" fill="#8b949e">Fabric B path</text>
</svg>
<div class="diagram-caption">Figure 5 — Dual-fabric switched topology: every server and storage connects to both Fabric A and Fabric B for full redundancy</div>
</div>
<h3>Why Fabric Is Called "Intelligent and Self-Configuring"</h3>
<p>SAN fabric switches automatically detect the type of device connected to each port and configure themselves accordingly. Connect a server's HBA — the port configures itself as an F-Port (fabric port). Connect another SAN switch — it becomes an E-Port (expansion port) that forms an ISL (Inter-Switch Link). The switches also auto-negotiate link speed, matching the lower-speed device. This removes manual port-type configuration entirely.</p>
<div class="card">
<div class="card-title">🧭 Domain IDs — Switch Identity in a Fabric</div>
<p style="margin-bottom:10px">Every switch within a single fabric receives a unique <strong>Domain ID</strong>. Domain IDs range from 1 to 239, which also sets the maximum number of switches per fabric at 239. When a new switch joins an existing fabric, the Principal Switch assigns it a domain ID automatically. This is how one switch identifies and routes traffic to another switch within the same fabric.</p>
<ul class="bullet-list">
<li>Domain ID is unique per switch within a single fabric</li>
<li>Maximum 239 switches → 239 domain IDs per fabric</li>
<li>Assigned automatically by the Principal Switch during fabric login</li>
<li>Domain ID forms part of the 24-bit PID address assigned to connected devices</li>
</ul>
</div>
<h3>PID — Port Identifier (24-bit Addressing)</h3>
<p>In switched fabric, every device that logs into the fabric receives a 24-bit address called the PID (Port Identifier). Unlike FCAL's 8-bit ALPA addressing, the 24-bit PID space is vastly larger — theoretically supporting up to 16 million devices within a single fabric. In practice, modern high-end fabrics support tens of thousands of connected devices, far exceeding what any single organization would require.</p>
<div class="diagram-wrap">
<div class="mermaid">
block-beta
columns 3
A["Domain ID\n(8 bits)\nIdentifies the Switch"]:1
B["Area ID\n(8 bits)\nIdentifies the Port Blade"]:1
C["Port ID\n(8 bits)\nIdentifies the Specific Port"]:1
</div>
<div class="diagram-caption">Figure 6 — PID (Port Identifier) structure: 3 × 8-bit fields packed into a single 24-bit fabric address</div>
</div>
<div class="grid-3">
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-teal)">239</div>
<div class="stat-label">Max Switches per Fabric</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-blue)">24-bit</div>
<div class="stat-label">PID Address Space</div>
</div>
<div class="stat-card">
<div class="stat-num" style="color:var(--accent-green)">16M</div>
<div class="stat-label">Theoretical Device Limit</div>
</div>
</div>
<div class="callout success">
<div class="callout-icon">✅</div>
<div class="callout-content">
<div class="callout-title">Best Practice — Always Use Switched Fabric</div>
<div class="callout-text">For any production SAN deployment with more than two devices, switched fabric is the only viable topology. Configure dual fabrics (A and B), connect every server and storage port to both fabrics, and ensure no single component failure can disrupt active I/O operations.</div>
</div>
</div>
</section>
<!-- ═══ SECTION 5 ═══ -->
<section class="section" id="s5">
<div class="section-header">
<div class="section-icon icon-purple">📚</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 05</div>
<h2>The Five Fibre Channel Protocol Layers</h2>
</div>
</div>
<p>Fibre Channel is built on a layered protocol model, similar in concept to the OSI network model. The FC protocol stack has five layers, each responsible for a distinct function. Understanding these layers is essential for advanced troubleshooting and is a common interview topic for SAN administration roles.</p>
<div class="diagram-wrap">
<div class="mermaid">
block-beta
columns 1
FC4["FC-4 — Upper Layer Protocol\nMaps higher-level protocols (FCP-SCSI, FICON, IP) onto Fibre Channel"]
FC3["FC-3 — Common Services\nMulticast, striping, hunt groups, and fabric-wide services"]
FC2["FC-2 — Framing & Flow Control\nBuilds frames, manages sequencing, exchange/sequence tracking"]
FC1["FC-1 — Encoding & Decoding\n8b/10b or 64b/66b encoding; bit-level synchronization"]
FC0["FC-0 — Physical Layer\nFibre/copper media, connectors, signal levels, link speed"]
</div>
<div class="diagram-caption">Figure 7 — FC protocol stack: five layers from physical medium (FC-0) to application mapping (FC-4)</div>
</div>
<table class="spec-table">
<thead>
<tr><th>Layer</th><th>Name</th><th>Primary Responsibility</th></tr>
</thead>
<tbody>
<tr>
<td><span class="badge badge-orange">FC-0</span></td>
<td>Physical Layer</td>
<td>Cables, SFP transceivers, optical/copper media, speed (8G/16G/32G/128G FC)</td>
</tr>
<tr>
<td><span class="badge badge-yellow">FC-1</span></td>
<td>Encoding & Decoding</td>
<td>8b/10b encoding for older FC; 64b/66b encoding for 16G FC and beyond</td>
</tr>
<tr>
<td><span class="badge badge-teal">FC-2</span></td>
<td>Framing & Flow Control</td>
<td>Frame construction, sequencing, exchange tracking, credit-based flow control</td>
</tr>
<tr>
<td><span class="badge badge-blue">FC-3</span></td>
<td>Common Services</td>
<td>Multicast, hunt groups, striping across multiple ports</td>
</tr>
<tr>
<td><span class="badge badge-purple">FC-4</span></td>
<td>Upper Layer Protocol</td>
<td>Protocol mapping: FCP (SCSI over FC), FICON (IBM mainframe), FC-IP</td>
</tr>
</tbody>
</table>
<div class="callout tip">
<div class="callout-icon">🎯</div>
<div class="callout-content">
<div class="callout-title">Interview Tip — Know These Layer Names Cold</div>
<div class="callout-text">Interviewers consistently ask "How many layers does Fibre Channel have, and what are they?" Be prepared to name all five layers with their designations (FC-0 through FC-4) and describe the purpose of each. You are unlikely to be asked deep implementation details of each layer, but the names and functions are fair game at every seniority level.</div>
</div>
</div>
</section>
<!-- ═══ SECTION 6 ═══ -->
<section class="section" id="s6">
<div class="section-header">
<div class="section-icon icon-green">📦</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 06</div>
<h2>FC Frame Structure — Anatomy of a 2148-Byte Frame</h2>
</div>
</div>
<p>In IP networks, data is broken into <em>packets</em> and transported across the LAN. In a Fibre Channel SAN, the equivalent unit is the <strong>frame</strong>. Every piece of data that flows between a server and a storage system — every read, every write — is broken into fixed-size FC frames, each 2148 bytes in total. Each frame carries its own addressing, error checking, and payload data.</p>
<h3>Visual Frame Layout</h3>
<div class="svg-wrap">
<div class="frame-viz">
<div class="frame-seg fs-sof">
<div class="seg-name">SOF</div>
<div class="seg-size">4 bytes</div>
<div style="font-size:9px;margin-top:4px">Start of Frame</div>
</div>
<div class="frame-seg fs-hdr">
<div class="seg-name">HEADER</div>
<div class="seg-size">24 bytes</div>
<div style="font-size:9px;margin-top:4px">Control & Routing</div>
</div>
<div class="frame-seg fs-pay">
<div class="seg-name">PAYLOAD</div>
<div class="seg-size">2112 bytes</div>
<div style="font-size:9px;margin-top:4px">Actual Data</div>
</div>
<div class="frame-seg fs-crc">
<div class="seg-name">CRC</div>
<div class="seg-size">4 bytes</div>
<div style="font-size:9px;margin-top:4px">Error Check</div>
</div>
<div class="frame-seg fs-eof">
<div class="seg-name">EOF</div>
<div class="seg-size">4 bytes</div>
<div style="font-size:9px;margin-top:4px">End of Frame</div>
</div>
</div>
<div class="diagram-caption">Figure 8 — FC frame: 2148 bytes total, sized proportionally above. Payload carries 98.3% of the frame.</div>
</div>
<table class="spec-table">
<thead>
<tr><th>Field</th><th>Size</th><th>Purpose</th></tr>
</thead>
<tbody>
<tr>
<td><span class="badge badge-blue">SOF</span></td>
<td>4 bytes</td>
<td>Start Of Frame delimiter — marks the beginning of a new frame boundary</td>
</tr>
<tr>
<td><span class="badge badge-teal">Header</span></td>
<td>24 bytes</td>
<td>Contains source PID, destination PID, sequence ID, exchange ID, frame type, and control bits</td>
</tr>
<tr>
<td><span class="badge badge-green">Payload</span></td>
<td>0 – 2112 bytes</td>
<td>The actual application data being transported (SCSI commands or raw block data)</td>
</tr>
<tr>
<td><span class="badge badge-yellow">CRC</span></td>
<td>4 bytes</td>
<td>Cyclic Redundancy Check — two-way integrity verification of frame content</td>
</tr>
<tr>
<td><span class="badge badge-orange">EOF</span></td>
<td>4 bytes</td>
<td>End Of Frame delimiter — signals frame completion; receiving device preps for next frame</td>
</tr>
</tbody>
</table>
<h3>CRC — Two-Way Integrity Verification</h3>
<p>The CRC (Cyclic Redundancy Check) field serves as a two-stage validation mechanism. During the first check, the receiving device confirms that the destination address embedded in the frame matches its own identity. In the second check, the receiving device verifies that it is willing to accept data from the specific source that sent it. Only after both validations pass does the frame's payload get processed. This prevents misdirected writes and unauthorized data injection.</p>
<div class="diagram-wrap">
<div class="mermaid">
sequenceDiagram
participant SRC as Source (Server HBA)
participant FAB as FC Fabric
participant DST as Destination (Storage FCA)
SRC->>FAB: Frame with SOF + Header (src/dst PID) + Payload + CRC + EOF
FAB->>DST: Route frame via 24-bit PID
DST->>DST: Check 1 — Does destination PID match my own address?
DST->>DST: Check 2 — Do I accept data from this source PID?
DST->>SRC: Acknowledgement — Frame accepted
Note over SRC,DST: Both checks must pass before payload is written
</div>
<div class="diagram-caption">Figure 9 — CRC two-phase verification: destination-match first, then source-accept. Both must pass.</div>
</div>
<div class="callout info">
<div class="callout-icon">💡</div>
<div class="callout-content">
<div class="callout-title">Packets vs Frames — Know the Difference</div>
<div class="callout-text">In NAS environments (NFS, CIFS/SMB), performance troubleshooting often involves checking for <em>packet drops</em> — because NAS data travels as IP packets. In a SAN environment, the equivalent conversation is about <em>frame drops</em>. When a SAN admin investigates I/O errors, they look at frame error counters on FC switch ports, not packet statistics.</div>
</div>
</div>
</section>
<!-- ═══ SECTION 7 ═══ -->
<section class="section" id="s7">
<div class="section-header">
<div class="section-icon icon-blue">🏭</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 07</div>
<h2>SAN Switch Vendors — Choosing the Right Platform</h2>
</div>
</div>
<p>Just as the storage market has multiple competing vendors, the SAN switch market is served by several manufacturers. The choice of switch platform has significant operational implications — affecting management complexity, protocol support, and integration with the storage stack.</p>
<div class="grid-2">
<div class="card">
<div class="card-title">🔵 Broadcom / Brocade</div>
<ul class="bullet-list">
<li>Market leader in dedicated FC SAN switching</li>
<li>Simpler management model — SAN-only focus</li>
<li>Preferred for pure FC environments</li>
<li>Firmware upgrades manageable without network team coordination</li>
<li>Intuitive CLI — lower barrier for SAN administrators</li>
</ul>
</div>
<div class="card">
<div class="card-title">🟦 Cisco Nexus</div>
<ul class="bullet-list">
<li>Multi-protocol: handles both FC and standard Ethernet traffic</li>
<li>Required for FCoE (Fibre Channel over Ethernet) deployments</li>
<li>Requires coordination with the network team for OS upgrades</li>
<li>Networking knowledge essential for full configuration</li>
<li>Common in environments consolidating SAN and LAN infrastructure</li>
</ul>
</div>
</div>
<div class="callout teal">
<div class="callout-icon">🔍</div>
<div class="callout-content">
<div class="callout-title">When to Choose Which Vendor</div>
<div class="callout-text">If you need a pure, dedicated FC SAN with the simplest possible operational model, Brocade is the industry preference. If your organization wants to consolidate FC and Ethernet onto shared infrastructure using FCoE, Cisco Nexus is the appropriate choice. FCoE reduces cable count and hardware by carrying FC frames over Ethernet — but adds operational complexity.</div>
</div>
</div>
<table class="spec-table">
<thead>
<tr><th>Factor</th><th>Brocade / Broadcom</th><th>Cisco Nexus</th></tr>
</thead>
<tbody>
<tr><td>Protocol Focus</td><td>Pure FC</td><td>FC + Ethernet (FCoE capable)</td></tr>
<tr><td>Management Simplicity</td><td><span class="badge badge-green">Higher</span></td><td><span class="badge badge-yellow">Moderate</span></td></tr>
<tr><td>Network Team Dependency</td><td>Minimal</td><td>Required for upgrades/config</td></tr>
<tr><td>FCoE Support</td><td>Limited</td><td><span class="badge badge-green">Full</span></td></tr>
<tr><td>Real-World Prevalence</td><td><span class="badge badge-blue">Very High</span></td><td>High (FCoE sites)</td></tr>
</tbody>
</table>
</section>
<!-- ═══ SECTION 8 ═══ -->
<section class="section" id="s8">
<div class="section-header">
<div class="section-icon icon-purple">🏗️</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 08</div>
<h2>Director-Class SAN Switches — Architecture Deep Dive</h2>
</div>
</div>
<p>Director-class switches are the enterprise tier of the SAN switch family. They are physically large chassis-based systems, typically rack-mounted at approximately 2 meters in height, designed for maximum port density, performance, and availability. Unlike fixed-form-factor switches, director-class systems use a modular blade architecture that allows incremental capacity expansion without replacing the entire unit.</p>
<h3>Blade Types in a Director-Class Chassis</h3>
<div class="blade-chassis">
<div class="blade blade-cp">
<div class="blade-dot bd-blue"></div>
<div>
<strong>Control Processor (CP) Blade — Slot A</strong>
<div style="font-size:10px;color:#8b949e;margin-top:2px">Management console port (ILO) · OS storage · RAM · Switch config · Active CP</div>
</div>
</div>
<div class="blade blade-cp">
<div class="blade-dot bd-blue"></div>
<div>
<strong>Control Processor (CP) Blade — Slot B</strong>
<div style="font-size:10px;color:#8b949e;margin-top:2px">Standby CP — automatic failover if primary CP fails · Redundancy</div>
</div>
</div>
<div class="blade blade-icl">
<div class="blade-dot bd-purple"></div>
<div>
<strong>ICL Blade — Inter-Chassis Link (DCX series only)</strong>
<div style="font-size:10px;color:#8b949e;margin-top:2px">Dedicated ports for switch-to-switch backbone connectivity within a fabric</div>
</div>
</div>
<div class="blade blade-icl">
<div class="blade-dot bd-purple"></div>
<div>
<strong>ICL Blade — Redundant Inter-Chassis Link</strong>
<div style="font-size:10px;color:#8b949e;margin-top:2px">Second ICL blade for inter-switch redundancy (DCX 8510 series)</div>
</div>
</div>
<div class="blade blade-port">
<div class="blade-dot bd-green"></div>
<div style="flex:1">
<strong>Port Blade 1 — 32 × 32Gbps FC Ports</strong>
<div style="font-size:10px;color:#8b949e;margin-top:2px">Server & storage connectivity · Port groups × 4 · ASIC per group</div>
</div>
<div class="port-row">
<div class="port-sq port-on"></div><div class="port-sq port-on"></div><div class="port-sq port-on"></div>
<div class="port-sq port-on"></div><div class="port-sq port-off"></div><div class="port-sq port-off"></div>
<div class="port-sq port-off"></div><div class="port-sq port-off"></div>
</div>
</div>
<div class="blade blade-port">
<div class="blade-dot bd-green"></div>
<div style="flex:1">
<strong>Port Blade 2 — 32 × 32Gbps FC Ports</strong>
<div style="font-size:10px;color:#8b949e;margin-top:2px">Server & storage connectivity · Port groups × 4 · ASIC per group</div>
</div>
<div class="port-row">
<div class="port-sq port-on"></div><div class="port-sq port-on"></div><div class="port-sq port-on"></div>
<div class="port-sq port-on"></div><div class="port-sq port-on"></div><div class="port-sq port-on"></div>
<div class="port-sq port-off"></div><div class="port-sq port-off"></div>
</div>
</div>
<div class="blade blade-port">
<div class="blade-dot bd-green"></div>
<div style="flex:1">
<strong>Port Blade 3 — 32 × 32Gbps FC Ports</strong>
<div style="font-size:10px;color:#8b949e;margin-top:2px">Server & storage connectivity · Port groups × 4 · ASIC per group</div>
</div>
<div class="port-row">
<div class="port-sq port-on"></div><div class="port-sq port-off"></div><div class="port-sq port-off"></div>
<div class="port-sq port-off"></div><div class="port-sq port-off"></div><div class="port-sq port-off"></div>
<div class="port-sq port-off"></div><div class="port-sq port-off"></div>
</div>
</div>
<div class="blade blade-empty">
<div class="blade-dot bd-gray"></div>
<div>
<strong>Empty Slot — Available for Future Expansion</strong>
<div style="font-size:10px;color:#6e7681;margin-top:2px">Purchase and install a port blade when additional ports are needed</div>
</div>
</div>
</div>
<div class="diagram-caption">Figure 10 — Director-class switch blade layout. CP blades (always present), optional ICL blades (DCX series), and port blades installed as needed</div>
<h3>ASIC — The Port Group Processor</h3>
<p>Within each port blade, the individual FC ports are grouped into clusters called <strong>port groups</strong>. Each port group has a dedicated ASIC (Application-Specific Integrated Circuit) chip in the blade's backplane. The ASIC provides compute resources to the ports in its group — handling I/O scheduling, speed negotiation, and link management. Port speed, oversubscription ratios, and non-blocking performance characteristics are all directly tied to the ASIC model used in a blade.</p>
<div class="diagram-wrap">
<div class="mermaid">
graph TD
PB["Port Blade"]
PB --> PG1["Port Group 1\n(8 × FC Ports)"]
PB --> PG2["Port Group 2\n(8 × FC Ports)"]
PB --> PG3["Port Group 3\n(8 × FC Ports)"]
PB --> PG4["Port Group 4\n(8 × FC Ports)"]
PG1 --> A1["ASIC 1\n(Dedicated processor)"]
PG2 --> A2["ASIC 2\n(Dedicated processor)"]
PG3 --> A3["ASIC 3\n(Dedicated processor)"]
PG4 --> A4["ASIC 4\n(Dedicated processor)"]
style PB fill:#1c2333,stroke:#bc8cff,color:#bc8cff
style PG1 fill:#1c2333,stroke:#3fb950,color:#3fb950
style PG2 fill:#1c2333,stroke:#3fb950,color:#3fb950
style PG3 fill:#1c2333,stroke:#3fb950,color:#3fb950
style PG4 fill:#1c2333,stroke:#3fb950,color:#3fb950
style A1 fill:#161b22,stroke:#e3b341,color:#e3b341
style A2 fill:#161b22,stroke:#e3b341,color:#e3b341
style A3 fill:#161b22,stroke:#e3b341,color:#e3b341
style A4 fill:#161b22,stroke:#e3b341,color:#e3b341
</div>
<div class="diagram-caption">Figure 11 — Port blade internal structure: port groups each backed by a dedicated ASIC processor</div>
</div>
<h3>Director-Class Switch Models</h3>
<table class="spec-table">
<thead>
<tr><th>Model Series</th><th>Generation</th><th>Notable Features</th></tr>
</thead>
<tbody>
<tr><td><span class="badge badge-orange">12K / 24K / 48K</span></td><td>Legacy</td><td>Older chassis; no dedicated ICL blades; ISL via standard port blades</td></tr>
<tr><td><span class="badge badge-blue">DCX</span></td><td>Mid-Range Current</td><td>10 standard slots; dedicated ICL blades added; modular port blades</td></tr>
<tr><td><span class="badge badge-purple">DCX 4S</span></td><td>Mid-Range Current</td><td>Compact 8-slot variant; 4 port blade slots; smaller rack footprint</td></tr>
<tr><td><span class="badge badge-teal">DCX 8510-4</span></td><td>High-End</td><td>12 slots; higher-speed ASICs; non-blocking architecture; 4 ICL slots</td></tr>
<tr><td><span class="badge badge-green">DCX 8510-8</span></td><td>High-End</td><td>16 slots; maximum port density; full non-blocking 128Gbps per slot</td></tr>
</tbody>
</table>
<div class="callout success">
<div class="callout-icon">💰</div>
<div class="callout-content">
<div class="callout-title">Pay Only for What You Need — Blade-Based Purchasing</div>
<div class="callout-text">Director-class switches use a pay-as-you-grow model. CP blades are mandatory and always included. Port blades are optional — purchase only the number you need for your current connectivity requirements. As your environment grows, order additional port blades and install them live into empty chassis slots. This avoids the capital expense of buying a fully populated switch from day one.</div>
</div>
</div>
</section>
<!-- ═══ SECTION 9 ═══ -->
<section class="section" id="s9">
<div class="section-header">
<div class="section-icon icon-teal">📦</div>
<div class="section-title-wrap">
<div class="section-num">SECTION 09</div>
<h2>Department-Class SAN Switches</h2>
</div>
</div>
<p>Department-class switches are the smaller, fixed-form-factor counterpart to director-class systems. Everything — management ports, FC data ports, and electronics — is integrated into a single compact 1U or 2U unit. There are no blades, no chassis slots, and no modular expansion options. What you purchase is the complete switch.</p>
<div class="grid-2">
<div class="card">
<div class="card-title">✅ Advantages</div>
<ul class="bullet-list">
<li>Lower upfront cost — suited for smaller environments</li>
<li>Simple deployment — no blade configuration needed</li>
<li>Compact footprint — minimal rack space consumption</li>
<li>Faster to procure and rack</li>
</ul>
</div>
<div class="card">
<div class="card-title">⚠️ Limitations</div>
<ul class="bullet-list">
<li>Fixed port count — cannot expand without replacing the switch</li>
<li>When ports are exhausted, a new switch must be purchased</li>
<li>Lower maximum throughput vs director-class</li>
<li>Less granular redundancy at hardware level</li>
</ul>
</div>
</div>
<div class="callout info">
<div class="callout-icon">🏗️</div>
<div class="callout-content">
<div class="callout-title">Core-Edge Design Pattern</div>
<div class="callout-text">Many enterprise fabrics use a two-tier design: director-class switches at the <strong>core</strong> (forming the backbone of the fabric) and department-class switches at the <strong>edge</strong> (connecting servers and storage in individual racks or zones). Department switches connect upward to director switches via ISLs, benefiting from the director's routing capacity without requiring full director-class ports for every edge device.</div>
</div>