Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

Also see [[AdvancedOptions]]
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox where print preview displays the noscript content */
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
[[O mnie]]
I'm a ~PhD student at [[Institute of Computing Science|]] at [[Poznan University of Technology|]]
To reach me, please write an e-mail to //jan.konczak// at //
!nefilter i iptables
''[[Netfilter|]]'' to część jądra systemu operacyjnego Linux zbierająca funkcje kontroli ruchu sieciowego.

Do kontroli zachowania mechanizmów kernela składających się na netfilter służą programy ''{{{iptables}}}'', <html><small> <code>ip6tables</code>, <code>ebtables</code> oraz <code>arptables<code/></small></html>

[[Netfilter project|]] jest zbiorem projektów związanych z frameworkiem do filtrowania pakietów, w tym iptables.
!!Hooki, tabele, łańcuchy
Podczas przejścia pakietu przez jądro Linuksa wykonywane są w ściśle określonej kolejności [[hooki|]] decydujące co z pakietem zrobić.

Każdemu hookowi odpowada jeden ''łańcuch'' reguł (''chain'') przeglądanych w kolejności.

Łańcuchy są pogrupowane w ''tabele'' (''table'') pod względem funkcjonalności. W {{{iptables}}} dostępne są następujące tabele:
*''filter'' – odrzuca niechciane pakiety
*''nat'' – zmienia adresy źródłowe lub docelowe pakietu
*mangle – modyfikuje pakiety
*raw – udostępnia pakietów przed ich przetworzeniem przez część kernela (np. conntrack)
*security – używana przy zaawansowanych modelach bezpieczeństwa w Linuksie (np. ~SELinux)
Łańchy mają nazwy odpowiadające momentowi ich wywołania:
* ''PREROUTING'' jest wykonywany dla pakietów przychodzących przed decyzją czy pakiet jest kierowany do tego komputera czy należy go przesłać dalej lub odrzucić
* ''INPUT'' jest wykonywany dla pakietów przychodzących skierowanych do tego komputera
* ''FORWARD'' jest wykonywany dla pakietów przychodzących które mają być wysłane dalej
* ''OUTPUT'' jest wykonywany dla pakietów wyprodukowanych na tym komputerze
* ''POSTROUTING'' jest wykonywany dla pakietów wychodzących po podjęciu decyzji gdzie je wysłać
Droga pakietu przez mechanizmy filtrujące w systemie Linux podsumowana jest tutaj:

Można tworzyć własne łańcuchy, ale mogą one być uruchomione tylko przez dołączenie ich do już istniejących.
!!Stanowość i bezstanowość - conntrack
Jądro Linuksa jest zaopatrzone w mechanizm śledzenia połączeń (conntrack). Duża część reguł korzysta z tego, co znacznie ułatwia konfigurację filtracji.
''Komenda {{{iptables}}} wszędzie rozróżnia wielkie i małe litery, ponadto kolejność argumentów decyduje o zrozumieniu polecenia.''

Reguły są przetwarzane ''w kolejności'' – ''jeśli któraś reguła zdecyduje o losie pakietu, późniejsze nie są brane pod uwagę''.

{{{iptables [-t filter] -L [-n]}}} – wypisanie ({{{--list}}}) tablica filtracji
{{{iptables -t <tablica> -L [-n]}}} – wypisanie innych tablic
{{{iptables [-t <tablica>] --line-numbers -L}}}  – dodaje numery reguł

{{{iptables [-t filter] -P <łańcuch> <polityka>}}} – zmiana domyślnego zachowania (tj. jeśli żadna z reguł nie podejmie decyzji)
Zwykle stosowane polityki to {{{ACCEPT}}} lub {{{DROP}}}. Przykład:
{{{iptables -P INPUT DROP}}} – ignoruje pakiety przychodzące

{{{iptables -A <łańcuch> <reguła>}}} – dodaje regułę do łańcucha ({{{--append}}}), np: &nbsp;{{{iptables -A INPUT -s -j ACCEPT}}}
{{{iptables -I <łańcuch> [pozycja] <reguła>}}} – wstawia ({{{--insert}}}) regułę na podane miejsce do łańcucha (lub na początek jeśli numeru nie podano), np: &nbsp;{{{iptables -I INPUT 1 -s -j ACCEPT}}}
{{{iptables -D <łańcuch> <nr>}}} – usuwa ({{{--delete}}}) regułę na podanej pozycji z łańcucha, np: &nbsp;{{{iptables -D 2}}}
{{{iptables -D <łańcuch> <reguła>}}} – usuwa ({{{--delete}}}) regułę z łańcucha, np: &nbsp;{{{iptables -D INPUT -s -j ACCEPT}}}
{{{iptables -F [łańcuch]}}} – usuwa wszystkie reguły [z łańcucha] ({{{--flush}}}); wysoce niebezpieczne

Zwykle reguły w {{{iptables}}} są zakończone akcją:
* {{{ -j ACCEPT}}} – przepuszcza pakiet
* {{{ -j DROP}}} – ignoruje (odrzuca) pakiet
* {{{ -j REJECT}}} – dodatkowa akcja, symuluje zamknięte gniazdo
* Są też dostępne m. inn. dodatkowa akcje {{{LOG}}}, {{{MARK}}} i {{{SET}}}

Rdzeń {{{iptables}}} zawiera niewiele filtrów, m. inn. źródłowy i docelowy adres({{{-s}}}&nbsp;&nbsp;{{{-d}}}), interface ({{{-i}}}&nbsp;&nbsp;{{{-o}}}) i protokół ({{{-p}}}). ''Patrz: {{{man iptables}}}''.
Filtry można negować przez użycie '!' (wykrzyknika)

Netfilter jest modularny – większość funkcji mieści się w ''rozszerzeniach'', ładowanych przez {{{-m <nazwa>}}}
To pozwala na bardzo szczegółową filtrację. ''Patrz: {{{man iptables-extensions}}}''

Przykładowe rozszerzenia:
* {{{-m tcp/udp}}}&nbsp; jest ''automatycznie'' ładowany razem z {{{-p udp/tcp}}}; pozwala ustalić m. inn. port źródłowy i docelowy {{{--sport / --dport}}}
* {{{-m conntrack}}}&nbsp; wybiera stan połączenia {{{--ctstate}}}, m. inn.: {{{INVALID,NEW,ESTABLISHED,RELATED}}}
* {{{-m comment}}} &nbsp;pozwala na dowolny komentarz {{{--comment}}}
* {{{-m limit}}}&nbsp; dzięki {{{--limit}}} ogranicza ilość pakietów na jednostkę czasu 
* {{{-m time}}} &nbsp;pozwala włączyć regułę o {{{--datestart}}} i wyłączyć o {{{--datestop}}}
* {{{-m u32}}} &nbsp;udostępnia {{{--u32}}} wykonujący dowolny test na danych pakietu
* {{{-m connlimit}}}&nbsp; używając {{{--connlimit-above}}} pozwala ograniczyć ilość połączeń z jednego adresu

Komenda {{{iptables}}} ma rozbudowaną pomoc wewnętrzną - po napotkaniu {{{--help}}} przerwie dodawanie reguły i pokaże listę opcji, np.:
{{{iptables -I INPUT -p tcp --help}}}
{{{iptables -m hashlimit -m limit -m connlimit --help}}}

{{{iptables-save}}} oraz {{{iptables-restore}}} są używane do zapisu/odczytu tablic do pliku.

!!Filtracja pakietów
!!!Filtracja na wejściu
Najczęściej stosowana do wpuszczania tylko pożądanego ruchu. Typowe podejście to zabronienie wszystkiego, co nie jest wprost dozwolone.

{{{iptables -P INPUT DROP}}}&nbsp;&nbsp;– ustawienie domyślnej akcji wybieranej jeśli żadna z reguł nie zadziała
{{{iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT}}}&nbsp;&nbsp;– pozwala przychodzić pakietom połączeń które już istnieją
{{{iptables -A INPUT -p tcp --dport 22 -j ACCEPT}}}&nbsp;&nbsp;– pozwala na dostęp do ssh
!!!Filtracja pakietów przechodzących
Decyduje jaki ruch może przechodzić przez komputer. Podejście do reguł zależy od zastosowania.

{{{iptables -A FORWARD -m connlimit --connlimit-above 5 -j DROP}}}&nbsp;&nbsp;– pozwala na nie więcej niż 5 połączeń przechodzących od każdego nadawcy
!!!Filtracja na wyjściu
Najczęściej stosowana do wpuszczania tylko pożądanego ruchu. Typowe podejście to blokowanie niepożądanego ruchu.

{{{iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT}}}&nbsp;&nbsp;– pozwala na używanie http
{{{iptables -A OUTPUT -p tcp -d -j DROP}}}&nbsp;&nbsp;– blokuje prób połączenia z
uwaga: iptables wypyta DNS o adresy IP i doda reguły z adresami IP, nie z nazwą Działa tylko przy dodawaniu, odjęcie trzeba zrealizować ręcznie

{{{iptables -v [-x] -L}}}&nbsp;&nbsp; – wyświetlenie z uwzględnieniem liczników
{{{iptables -Z [co zerować]}}}&nbsp;&nbsp;– zerowanie stanu liczników – wszystkich lub wybranego łańcucha / reguły

''[[Filtracja pakietów w systemie Linux - ćwiczenia]]''

!!Manipulowanie pakietami
Przykłady na manipulację pakietami:
{{{iptables -t mangle -A POSTROUTING -o wlan0 -j TTL --ttl-set 1}}}
{{{iptables -t mangle -A PREROUTING -i wlan0 -j TTL --ttl-inc 16}}}
{{{iptables -t mangle -A PREROUTING -i wlan0 -j TEE --gateway}}}
{{{iptables -t mangle -A POSTROUTING -p tcp --sport 5222 -j TOS --set-tos Minimize-Delay}}}

!!NAT (Network Address Translation) – translacja adresów
W systemie Linux translacja adresów jest zawsze ''stanowa'', stąd odpowiedzi zawsze znajdą drogę powrotną.
!!!Translacja źródłowa (Source NAT, SNAT)
Pozwala na dostęp do sieci z adresacją publiczną (np. internet) urządzeniom z sieci z adresacją prywatną.

Uproszczony tryb translacji źródłowej – maskarada:
{{{iptables --table nat --append POSTROUTING --out-interface wlan0 -j MASQUERADE}}}
Przy użyciu maskarady adres źródłowy jest automatycznie ustawiany na adres interface'u którym pakiet opuszcza router

Klasyczny SNAT wymaga podania adresu (lub adresów) na jakie ma być zmieniane źródło:
{{{iptables -t nat -A POSTROUTING -j SNAT --to-source  [--out-interface wlan0]}}}
!!!Translacja docelowa (Destination NAT, DNAT)
Pozwala na dostęp świata do urządzeń znajdujących się w sieci prywatnej, np:
{{{iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination}}}
{{{iptables -t nat -A PREROUTING -p tcp ! --dport 22 -j DNAT --to-destination}}}

''[[NAT w systemie Linux - ćwiczenia]]''

Na początku 2014 roku do jądra Linuksa włączono nową implementację kontroli ruchu sieciowego, ''nftables'' [[[1]|]]

nftables jest nastawiony na poprawienie czytelności i jakości kodu, wygodę użytkowania i zwiększenie wydajności.
Reguły w nftables nie są interpretowane, a wykonywane po uprzednim przygotowaniu bytecode.
Polecenia {{{.*tables}}} zastąpiono jednym poleceniem {{{nft}}} o prostszej składni.

Inne moduły:
*{{{ recent}}} pozwala filtrować biorąc pod uwagę wcześniejszą aktywność danego IP/ danej sieci: <html><br /></html>   {{{iptables -A INPUT -p tcp --dport 139 -m recent --name unwanted --set --seconds 15 -j DROP}}}<html><br /></html>  {{{iptables -A INPUT -m recent --update --seconds 15 -j DROP}}}
* {{{string}}} pozwalający dopasowywać tekst i moduł {{u32}} pozwalający dopasowywać dana na podanej pozycji<html><br /></html>   {{{iptables -A FORWARD -p udp --dport domain -m string --algo bm --hex-string '|08|facebook|03|com|00|' -j LOG --log-prefix 'facebook '}}}
* {{{mac}}} pozwala filtrację adresów MAC<html><br /></html>  {{{iptables -A input -m mac ! --mac-source 00:12:34:56:78:ab -j DROP}}}
*{{{-p icmp}}} pozwala na filtrowania icmp<html><br /></html>  {{{iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT}}}

API systrmów Windows do tworzenia firewalli:

* Znać komendę listującą reguły dla wybranej tablicy
* rozumieć po co jest polityka (policy) 
* Umieć podać komendę:
** wypisującą tablicę filtrów
** zmieniającą politykę wybranego łańcucha
* Umieć podać wzór komendy:
** dodającej regułę
** wstawiającej regułę w środek łańcucha
** usuwającą regułę
* Rozumieć kiedy są uruchamiane łańcuchy INPUT, OUTPUT i FORWARD
* Wiedzieć w jakiej kolejności rozpatrywane są reguły i polityki
* Odpowiedzieć na pytanie która reguła / polityka zdecyduje o losie pakietu
* Umieć określić do jakiego łańcucha należy dodać konkretną regułę
* Wiedzieć co oznaczają podstawowe cele (ACCEPT, DROP, REJECT)
* wiedzieć jaka jest różnica między DROP a REJECT
* Kojarzyć że rdzeń iptables ma 4 przełączniki pozwalające definiować filtrowanie ruchu i możliwość ładowania rozszerzeń
* Umieć prawidłowo ustawić (lub nie) adresy źródłowe (-s) i docelowe (-d) dla reguły
* Kojarzyć przełączniki -m (-''''-match) i -p (-''''-protocol) do ładowania rozszerzeń
* Rozumieć co to znaczy że firewall jest stanowy
* Znać przełącznik -p pozwalający filtrować po protokole
* Kojarzyć dla protokołów tcp i udp opcje  -''''-sport i -''''-dport
* Kojarzyć rozszerzenie conntrack
* Umieć z pomocą manuala napisać komendy filtrujące ruch
Po ''każdym'' punkcie należy skutecznie sprawdzić czy reguła działa.
# Zablokuj cały ruch wchodzący. Użyj do tego polityki, nie reguły.
# Pozwól wchodzić połączeniom już ustanowionym.
# Pozwól wchodzić połączenim ssh.
# Zabroń wchodzenia ruchu SSH z wybranego adresu nie kasując żadnej z powyższych reguł
# Wyświetl liczniki, sprawdź ile razy reguła z poprzedniego zadania została uruchomiona
# Zbadaj (używając wiresharka) czym różni się cel DROP od REJECT  
# Zablokuj ruch wychodzący do wybranej strony. Uwaga: iptables domyślnie pracuje tylko na ~IPv4. Niektóre strony (np. mają też adresy ~IPv6.
# Ogranicz ilość połączeń od każdego adresu IP z osobna
# Ogranicz globalną ilość wchodzącego ruchu
# Dodaj regułę, która zabroni przekazywania ruchu z em1 do p4p1
# Dodaj regułę bez akcji, która pozwoli zliczać wymienione komunikaty ping
# Dodaj regułę z akcją {{{LOG}}}, która pozwoli logować wystąpienia wybranych pakietów (użyj {{{dmesg}}} do wypisania komunikatów z logu systemu)
# Korzystając z {{{iptables-save}}} zapisz reguły do pliku, następnie wyczyść listę reguł i odtwórz ją z pliku używając {{{iptables-restore}}}
//Skrętka// – kabel złożony z par skręconych przewodów. W kontekście sieci komputerowych to skręcone 4 pary, również skręconych, przewodów. <html><small>Każda para ma różną ilość skrętów na metr - wszysto w celu minimalizacji zakłóceń</small></html> (ętka)
//Patch cord// – krótki "gotowy" kabel, z założenia do połączeń między gniazdem a urządzeniem (
//Patch panel// – <html><span title="[czyt. dający się na stałe zamontować kawałek blachy]">panel</span></html> do szaf rackowych (szaf 19") z gniazdami ethernetowymi (
//Okablowanie poziome// – kable leżące w (lub zawieszone na) ścianach od "ostatniego" patch panelu do gniazd przy stacjach
//Okablowanie pionowe// – pozostałe kable leżące w (lub zawieszone na) ścianach
<html><small>"typowo" na każdym piętrze leży switch do którego są podpięte komputery, stąd "poziome" okablowanie do komputerów i "pionowe" między sprzętem sieciowym</small></html>
//Drut// – "lity" przewód
//Linka// – przewód spleciony z cienkich drucików
Linka jest odporna na wielokrotne zginanie. Używana w patch cordach.
Drut ma lepsze parametry elektryczne [przy kablach sieciowych] <html><small>i łatwiej się go zarabia</small></html>. Kładzona w (na) ścianach.

Trzeba znać wszystkie powyższe definicje.
!!!Kategorie kabli (i nie tylko)
* <html><small>3 (class C) - starożytna, nadaje się już tylko na telefon. Nawet nieskręcane kable spełniają stawiane tej klasie wymagania. Potradi przesłać 10Mbps na dwóch parach (10BASE-T)</small></html>
* 5 (class D) - do 100Mbps na 2 parach, 100m (100BASE-TX)
* 5e - "ulepszona" (enhanced) piątka, pozwala na użycie 1Gbps na 4 parach, do 100m (1000BASE-T)
* 6 (class E) - powstała dla 1Gbps, pozwala przesłać 1Gbps na 2 lub 4 parach (1000BASE-T/1000BASE-TX). <html><small>Na krótszych odległościach (30-50m) potrafi działać 10Gbps</small></html>
* 6A (class E<html><sub>A</sub></html>) - istnieje tylko w wersji ekranowanej, pozwala na przesłanie 4 parami 10Gbps na 100m (10GBASE-T)
* "7" i "7A" (class F i F<html><sub>A</sub></html>) - stworzone przez ISO, nie uznawane przez EIA, zwiększone ekranowanie, wciąż tylko 10Gbps
* <html><small> w trakcie opracowania jest 8.1 i 8.2 dla 40Gbps</small></html>
<html><small>100m to oficjalnie 90m w ścianie i łącznie 10m od paneli/gniazd do urządzeń</small></html>
Kategorie dotyczą zarówno kabli jak i gniazd i wtyczek!

Dla każdej z kategorii trzeba znać
*Najwyższy wspierany standard warstwy fizycznej
*Ilość żył które są użyte

Nieekrannowany kabel kategorii 5e (UTP 5e) jest w tej chwii (jeszcze) standardem do poziomego okablowania (do stacji końcowych). Do połączeń między switchami (i routerami) zwykle wykorzystuje się wyższe kategorie (np. 6A) lub światłowód.

Trzeba umieć dobrać właściwą kategorię do zastosowania.
Można ekranować cały kabel (F/UTP) lub każdą parę żył z osobna (U/FTP) lub jedno i drugie. Spotykane w handlu nieścisłe określenie FTP oznacza zwykle "jakieś ekranowanie". Znaczenie liter:
*U - nieekranowana
*S - shielded - ekran z siatki [jak np. w kablu antenowym]
*F - foiled - ekran z folii [metalowej]
Ekranowanie zmniejsza zakłócenia, przez co stosowane jest przy dużych prędkościach (konieczne od 10Gbps z uwagi na dużą wrażliwość na zakłócenia) i w instalacjach narażonych na zakłócenia z zewnątrz. 

Trzeba umieć zdecydować czy kabel wymaga ekranowania czy też nie.
!!! Wtyczki i gniazda
Poprawna nazwa wtyczki (i odpowiadającego gniazda) używanej w Ethernecie to [[8P8C|]]. W praktyce wtyczki są nazywane ~RJ45 od standardu telekomunikacyjnego używającego złącz 8P8C, który poza określeniem złącz specyfikuje też użycie linii i rodzaj kabla.
Trzeba znać nazwy 8P8C oraz ~RJ45 i wiedzieć która jest poprawna, a która jest powszechnie używana ;-)

Standard dla zarabiania wtyczek dla Ethernetu to TIA/~EIA-568-B ( 
Definiuje on dwa zakończenia – ~T568B oraz ~T568A.
Kabel prosty zarabia się mając na obu końcach standard "B"
Kabel skrosowany zarabia się mając na jednym końcu "A", na drugim "B". <html><small>W praktyce kabel skrosowany używa się tylko przy 100BASE-TX, dla 1Gbps istnieje martwy standard zarabiania kabli skrosowanych</small></html>
Zakończenie ~T568B to: bp p bz n bn z bb b <html><small>[b = biało-, p = pomarańczowe, z = zielone, n = niebieskie, b = brązowe]</small></html>
Pary p i z są używane w 100BASE-TX, stąd zakończenie ~T568A ma je parami zamienione.
<html><small>TIA/~EIA-568-B to aktualna norma amerykańska dotycząca okablowania struktrualnego, której jeden z framgnetów definiuje też gniazda. Nie obowiązuje w Polsce; tu zastosowanie znajduje bliźniacza międzynarodowa norma opisująca tworzenie okablowania strukturalnego ISO/IEC 11801 oraz zestaw polskich i europejskich norm, m. inn. PN-EN 50173 i PN-EN 50174.</small></html>

Trzeba znać na pamięć kolejność przewodów w ~T568B (oraz ~T568A).

Narzędzie do zarabiania wtyczek to zaciskarka ~RJ45 / crimp(ing) tool 
Narzędzie do zarabianie gniazd i patch paneli to wciskacz LSA / nóż krone / narzędzie uderzeniowe / nóż krosowniczy / punch down tool
Decybel (dB, czyli 1/10 bela) to liczba - decybel nie oznacza żadnej wielkości fizycznej. W decybelach wyraża się ''stosunek między dwoma wartościami''. Dokładniej jest to ''logarytm'' dziesiętny stosunku dwóch wartości. Zwyczajowo używana do porównywania mocy.
<html><small>Przykład: wieża hi-fi ustawiona na -30dB oznacza, że moc z głośników to -3B mocy maksymalnej, czyli 10<sup>-3</sup>, czyli 0.001 mocy maksymalnej.</small></html>
Użycie takiej jednostki pozwala [w teorii sygnałów] łatwo prezentować zmianę mocy sygnału.

Co można sprawdzić / zmierzyć (miernikiem) w kablu sieciowym:
* poprawność zarobienia – każdy miernik powie czy nie pomyliliśmy kolejności przewodów.
* tłumienność (ang. attenuation) – <html><span title="poza nadprzewodnikowym">każdy kabel</span></html> wprowadza straty. Miernik mierzy jak duże. (
* przesłuchy (ang. crosstalk) – w wyniku indukcji, jeśli jedynym przewodem nadajemy sygnał, na przewodzie leżącym obok pojawi się ten sam sygnał. Skręcenie par różnicowych w gigantycznym (ale nie całkowitym) stopniu redukuje przesłuchy. (
** NEXT – przesłuch zbliżny – określa ile sygnału wysyłanego na jednej parze odbieramy na drugiej.
** FEXT – przesłuch zdalny –  określa ile sygnału który odbiera odbiornik pojawia się też na innej parze; silnie zależne od długości kabla.
** ~PS-NEXT i ~PS-FEXT to parametry dla kabli Ethernetowych, które określają jak duży jest przesłuch na jednej parze, kiedy pozostałymi trzema nadawany jest ten sam sygnał.
* ACR. Tłumienność w decybelach oznacza ile z pierwotnego sygnału zostało; przesłuch w decybelach - ile z pierwotnego sygnału pojawia się na drugiej linii. Jeśli stłumiony sygnał jest słabszy niż przesłuchy, nie da się przesłać danych. Dlatego powstała miara ''ACR'' - attenuation-crosstalk ratio, określająca stosunek stłumionego sygnału do zakłóceń z innych par. <html><small>Uwaga, dB są logarytmiczne - stąd stosunek mocy to różnica logarytmów!</small></html> ACR to różnica między przesłuchami a tłumiennością, określa zapas mocy. (
* różnica czasu propagacji – ile szybciej sygnał przepłynie jedną parą niż drugą. Powstaje jeśli pary są różnej długości, np. przez złe wykonanie kabla. Za duża uniemożliwa transmisję.
* (nie) zmierzymy zakłóceń zewnętrznych (jeśli akurat ktoś wyłączył ich źródło) – a takie mogą być i skutecznie uniemożliwiać działanie sieci.
Parametry kabla (tłumienność, przesłuchy) ściśle zależą od częstotliwości sygnału(!). Stąd mierniki sprawdzają te parametry dla różnych częstotliwości. Każda kategoria kabla ma określoną częstotliwość do której musi spełnić odpowiednie normy.

Polecam przeczytać ze zrozumieniem

Trzeba znać i rozumieć co oznaczają mierzalne parametry kabla.
!!!Warto spojrzeć
Przykładowe ceny -
!!Mikrotik i ~RouterOS
Urządzenia firmy [[MikroTik|]] domyślnie pracują pod systemem operacyjnym ~RouterOS. 

Domyślna konfiguracja systemu ~RouterOS ma aktywny przynajmniej port ''ether1'' z ustawionym adresem ~IPv4 ''''.

~RouterOS pozwala na zarządzanie:
* przez konsolę (po połączeniu szeregowym lub sieciowym przez telnet/ssh)<html><br /></html> {{{picocom -b 115200 /dev/ttyS0}}} <html><br /></html> {{{ssh}}}
* używając graficznego programu ~WinBox
* z wykorzystaniem interface'u webowego ~WinFig<html><br /></html>{{{}}}

Dokumentacja dla systemu znajduje się na stronie [[|]].
W szczególności na potrzeby zajęć należy przejrzeć:
W trakcie zajęć konfigurację najprościej przeprowadzać korzystając z intuicyjnego interface'u webowego.

Przydatne komendy:

/ip address add address= interface=ether2 <br />
 <br />
/routing ospf network add network= area=backbone <br />
 <br />
/ip pool add ranges= name=pool1 <br />
/ip dhcp-server network add address= gateway= <br />
/ip dhcp-server add interface=ether2 address-pool=pool1 name=server1 <br />
 <br />
/ping <br />
/tool traceroute <br />
 <br />
/system reset-configuration <br />
!!Kilka pozostałych narzędzi dla Linuksa
Quagga zawiera m. innymi to implementację serwera OSPF dla Linuksa. Najprostsza konfiguracja wygląda następująco:
* stwórz pusty katalog {{{/etc/quagga}}}
* stwórz pusty plik {{{/etc/quagga/zebra.conf}}}
* stwórz plik {{{/etc/quagga/ospfd.conf}}}  z zawartością 'password <haslo>'
* włącz ospfd: {{{rcospfd start}}} &nbsp; lub &nbsp; {{{/etc/init.d/ospfd start}}}
* zaloguj się do 'routera' - {{{telnet localhost 2604}}}
* dalej - postępuj jak w routerach CISCO. Zestaw komend jest ograniczony do tych dotyczących protokołu OSPF.
* do utrwalenia konfiguracji, podobnie jak w przypadku systemu IOS, służy komenda {{{copy running-config startup-config}}}
AS (Autonomous System [[[1]|]], [[[2]|]]) – fragment internetu zarządzany przez jedną jednostkę.
Numery 1÷63999 są publiczne, 64512÷65534 prywatne.
Powoli realizuje się przejście na 32 bitowe numery (z 16 bitowych) ze względu na wyczerpanie puli AS.
!''[[Slajdy (pdf)|]]''
!Podstawy BGP
BGP używa się gdy:
* należy zapewnić routing z i do AS
* AS ma minimum dwa połączenia z innymi (ew. innym) AS
Konfigurując BGP podaje się następujące informacje:
* adresy i maski rozgłaszanych sieci 
* partnerów (peers) BGP, dla których dodatkowo podaje się:
** polityka (filtr) mówiąca jakie sieci są akceptowanych od partnera (zwykle: wszystkie o maskach nie większych niż /20)
** polityka (filtr) wybierająca które sieci są rozgłaszane do partnera (zwykle: tylko nasze)
** dodatkowo można zmienić wysyłane do danego partnera opisy tras do sieci i ustalić preferencje odbieranych tras
!!!iBGP i eBGP
Routery z tego samego AS muszą być połączone ze sobą (wszystkie wzajemnie) by ustalać spójną strategię trasowania. Do tego celu wewnątrz AS routery używają iBGP (internal BGP), który zezwala na przesyłanie lokalnych dla AS parametrów tras (nazywanych discretionary).
Routery z różnych AS używają eBGP (external BGP).
Konfiguracja iBGP i eBGP nie różni się w żaden sposób, typ wykrywany jest na podstawie źródłowego i docelowego AS.
<html><small>iBGP wymagając połączenia każdy-z-każdym bardzo źle się skaluje – jest to jeden z problemów BGP.</small></html>
!!!Wybór trasy w BGP
Automatyczne wyliczanie ścieżki w BGP jest bardzo uproszczone, nieoptymalne przy wielu alternatywnych trasach.
W skrócie: z grupy pasujących sieci o najdłuższej masce wybierana trasa do tej mającej najmniej przeskoków (szczegóły: [[[1]|]]).
Jest tak dlatego, że w założeniu przy konfiguracji BGP ''człowiek'' ma zdecydować którędy pójdzie ruch. Dlaczego?
* pieniądze
Przy połączeniach między AS zwykle płaci się za ''transfer''. Stąd "optymalna" trasa będzie zwykle oznaczać najtańszą.
Natomiast zwyczajowo nie płaci się za transfer przez punkt wymiany ruchu internetowego (IXP, [[[1]|]]), tj. dedykowane miejsce łączące sieci różnych operatorów.
<html><small>Największy polski IXP (obsługujący ponad 1/3 ruchu międzyoperatorskiego w Polsce) to <a href="" target="_blank" class="externalLink">PLIX</a>.</small></html>
!!!Atrybuty ścieżki
''Atrybuty'' BGP (patrz: slajdy lub [[[2]|]]): ~AS_PATH, ~NEXT_HOP, ~LOCAL_PREF
!!!Policy routing
Polityka (policy) jest ustalana dla konkretnego połączenia z partnerem (peer).
Polityka jest osobna na wyjściu i na wejściu. Polityka to reguły które filtrują (blokują lub dopuszczają) sieci i reguły które ustalają podejście do sieci (przez zmianę jej parametrów – w tym trasy do sieci, jej preferencji).
Poza optymalizacją tras do sieci pozwala to na odcięcie (przez brak znanych tras) wybranych części Internetu. BGP nie posiada też skutecznych mechanizmów zapobiegających podszywaniu się pod inne sieci – poza selekcją zaufanych administratorów i ręcznemu nawiązywaniu połączeń BGP.
!!!Sterowanie wyborem trasy przez człowieka
Ścieżka. Sposób zapisu ścieżki. Cel powtarzania tego samego AS na ścieżce kilka razy. [[[1]|]]
Znaczenie lokalnych preferencji. [[[2]|]]
"Ręczny" load balancing - dzielenie większych prefiksów na mniejsze i wielokrotne rozgłaszanie tej samej sieci.
BGP wykrywa potencjalne pętle w ścieżce i nie pozwala im zaistnieć.
Ile miejsca zajmuje "cały internet":

Błędy w konfiguracji BGP potrafią "zepsuć internet", a wprowadzanie ich celowo może służyć atakom sieciowym.
Krótki przegląd wpadek i ataków: [[[1]|]]. Opis //BGP hijacking// dla spamowania i podszywania się pod inne strony: [[[2]|]]. Opis "przypadkowego" trasowania ruchu ze stanów do stanów przez Europę [[[3]|]]

[[O mnie|@O mnie]]
[[SK1|@SK1]] •&nbsp;
!!!Model ISO/OSI i model TCP/IP
Motywacja. Powstawanie modeli.
* (od slajdu 46)
kapsułkowanie (enkapsulacja) / dekapsulacja
* PDU - , bity - ramki - pakiety - datagramy/segmenty - dane
* MTU -
!!!(inne) Przykłady wykorzystania modelu sieci
* ~ZigBee
* Bluetooth
* {{{wireshark}}} ({{{tcpdump}}})
''[[Model warstwowy i architektura sieci komputerowej|]]''
Ćwiczenia mają sens jeśli są wyonywane w grupach 3 osobowych.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.------.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(internet)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`--+---'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;S3<br />
&nbsp;&nbsp;&nbsp;&nbsp;_____&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__|__&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_____<br />
&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;S1&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;S2&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;&nbsp;&nbsp;|&nbsp;PC1&nbsp;|---------|&nbsp;PC2&nbsp;|---------|&nbsp;PC3&nbsp;|<br />
# Skonfiguruj sieci i komputery jak na powyższym rysunku (~PC1 może mieć dostęp do internetu, ~PC3 – nie)
# Dodaj na ~PC3 bramę domyślną przez ~PC2. Nie zmieniaj trasowania na ~PC1.
# Ustaw //ip forwarding// na ~PC2 (np. {{{sysctl net.ipv4.conf.all.forwarding=1}}})
# Ustaw na ~PC2 maskaradę adresów tak, żeby ~PC3 mógł korzystać z internetu
# Sprawdź czy ~PC3 może łączyć się z ~PC1. Jeśli nie, napraw to używając SNAT.
# Używając wiresharka zobacz jakie adresy ma ustawiony pakiet wysłany z ~PC1 do ~PC3 na każdym komputerze 
# Zmień TTL pakietów przechodzących przez ~PC2 z ~PC3 do ~PC1 na 1, zaobserwuj (w wiresharku) co się dzieje. 
# Włącz na ~PC3 program nasłuchujący na wybranym porcie.
# Skonfiguruj ~PC2 tak, by ~PC1 mógł połączyć się z programem działającym na ~PC3 używając adresu ~PC2
# Skonfiguruj ~PC2 tak, by ~PC1 mógł połączyć się z serwerem SSH działającym na ~PC3 używając adresu ~PC2 i portu innego niż 22.
# Używając wiresharka zobacz jak modyfikowane są pakiety z powyższych poleceń
# Skonfiguruj ~PC2 tak, by ruch z wybranego zakresu portów trafiał do ~PC3

|>| ''Jan Kończak'' |
| e-mail|imie.nazwisko (at)|
| pokój|2.7.5|
| konsultacje|po ustaleniu przez e-mail|
Protokół stanu łącza (wewnątrz obszaru. Między obszarami - wektora odległości.)
OSPF w wersji 2 działa tylko na ~IPv4, w wersji wersja 3 też na ~IPv6. 
Każdy router konstruuje mapę sieci. Używa algorytmu dijkstry dla znajdowania najkrótszych ścieżek.

Routery, wymieniając wiadomości //Hello//, nawiązują relację z sąsiadami.
Następnie przesyłają wzajemnie w wiadomościach //database descriptions// (//DD//) informacje o znanych połączeniach.
Po transferze żądają wiadomością //~Link-State Request// nieznanych sobie wiadomości LSA i otrzymują je w wiadomościach ~Link-State Update.
Po każdej wykrytej zmianie router wysyła komunikat LSU z opisem zmian. Komunikat LSU jest rozgłaszana epidemicznie do wszystkich sąsiadów.
Wszystkie komunikaty poza Hello nazywa się zbiorczo nazwą //~Link-State advertisement//  (LSA;

Żeby zapobiec zalewaniu sieci pakietami LSA, w jednej domenie rozgłoszeniowej wybiera się //router desygnowany// i zapasowy router desygnowany (DR i ~DRother w CISCO) i dopuszcza się tylko komunikację do / z routera  desygnowanego.
OSPF do odróżniania routerów wykorzystuje //identyfikator routera// - w CISCO to najniższy przypisany do urządzenia adres IP. Na router desygnowany wybierany jest router z najniższym priorytetem, jeśli priorytety są równe (a domyślnie są) - z najmniejszym identyfikatorem.

OSPF w miarę możliwości (technicznych sieci) używa //~IP-multicast//, wykorzystując dwa adresy:
* - wszystkie routery - ~AllSPFRouters
* - desygnowane routery - ~AllDRouters
Przy konfiguracji OSPF pozwala podzielić sieć na obszary (areas). Routing w każdym obszarze jest wykonywany osobno, wykorzystując alg. Dijkstry, między obszarami wymieniane są gotowe trasy. Obszar 0 (//area 0//) stanowi szkielet (backbone), wszystkie inne obszary muszą mieć z nim łączność. Router łączący dwa obszary nazywa się //area border router// (ABR).
''[[Slajdy|]]'' (wbrew tytułowi zawierają też informacje dla routerów CISCO)
Najpierw należy wejść do trybu konfiguracji (znak zachęty: {{{(config)#}}}).
* {{{router ospf <processId>}}} - wejście do konfiguracji procesu OSPF o podanym numerze. Numer procesu jest lokalny - stąd można wybrać dowolny, np: {{{router ospf 1}}}. Prompt zmieni się na {{{(config-router)#}}}
** {{{network <adres_ip> <odwrócona_maska> area <obszar>}}} - dodaje sieci pasujące do wzorca do rozgłaszanych sieci. Dodanie pierwszej sieci włącza proces. <html><br /></html> Przykład: do dodania sieci do obszaru 0 należy wpisać: {{{network area 0}}}<html><br /></html>Można też podać "cały świat", który dopasuje się do każdej bezpośrednio podłączonej sieci: {{{network area 0}}} 
** {{{default-information originate}}} - włącza redystrybucję trasy domyślnej 
** {{{redistribute <co rozgłaszać>}}} - domyślne rozgłaszanie tras podanego typu - połączonych, statycznych lub z innego procesu/protokołu routiingu. Np: <html>
<br /> </html> {{{redistribute connected subnets}}} - wszystkie bezpośrednio podłączone sieci <html>
<br /> </html> {{{redistribute static subnets}}} - wszystkie trasy statyczne<html>
<br /> </html> {{{redistribute eigrp subnets}}} - wszystkie trasy dostarczone przez protokół eigrp
W trybie uprzywilejowanym: 
* {{{show ip protocols}}} 
* {{{show ip ospf}}} - informacje o działających procesach ospf
* {{{show ip ospf neighbor}}} - informacje o sąsiadach
* {{{show ip ospf database}}} - podsumowane dane o połączeniach
* {{{show ip ospf database router}}} - pełne dane o połączeniach 
W trybie konfiguracji interface'u:
* {{{bandwidth <prędkość>}}} - zmiana postrzeganej prze protokoły routingu prędkości
* {{{ip ospf cost <koszt>}}} - sztuczna zmiana kosztu danego łącza dla OSPF
Każdemu protokołowi routingu CISCO przypisuje wartość AD ([[administrative distance|]]).
CISCO wybiera trasy biorąc pod uwagę wpierw trasy z najmniejszą AD, potem porównuje dopiero koszt. 
Zapis w tablicy routingu: [AD/koszt], np:
|{{{O [110/65] via, 00:49:11, FastEthernet0/0}}}|AD:110, koszt:65|
|{{{D [90/2297856] via, 00:09:38, Serial0/0}}}|AD:90, koszt:2297856|
|{{{C is directly connected, FastEthernet0/1}}}|AD:1|
Quaqqa ( - implementacja wielu protokołów routingu, w tym ~OSPFv2, dla systemu Linux
!!!Zapis poleceń
Wzór polecenia:
{{{polecenie {jeden|z|wielu} <argument1> [-opcja1 <argument2>] --długa_opcja=<argument3> [opcja2]}}}
Przykład polecenia:
<html><code>polecenie jeden <i>42</i> [-opcja1 <i>foo</i>] --długa_opcja=<i>x</i></code></html>
Co trzeba wpisać w konsolę:
{{{polecenie jeden 44 -opcja1 baz --długa_opcja=x}}}

Proszę obejrzeć wynik: {{{tracepath -h}}} &nbsp; ; &nbsp; {{{netstat -h}}} &nbsp; ; &nbsp; {{{ip a h}}} &nbsp; ; &nbsp; {{{ifconfig -h}}}

!!!Pakiety {{{net-tools}}} oraz {{{iproute2}}}
Pakiet narzędzi {{{net-tools}}} powstał w  1983 roku, początkowo w systemie BSD.
Od tego czasu jest utrzymywany, jednak od przeszło 10 lat jest uznawany za przstarzały i nie jest rozwijany dalej.
W skład wchodzą:
<html><code><b>arp</b> <small>dnsdomainname domainname</small> hostname <b>ifconfig</b> <small>ipmaddr</small> iptunnel <small>mii-tool nameif</small> netstat <small>nisdomainname plipconfig</small> rarp <b>route</b> <small>slattach ypdomainname</small></code></html>

Około roku 2000 stworzono pakiet {{{iproute2}}}, mający zastąpić {{{net-tools}}} (i inne, powstałe by udostępnić użytkownikom nowe możliwości jądra systemu Linux).
Pakiet {{{iproute2}}} zawiera następujące polecenia:
<html><code><small>arpd ctstat genl ifcfg ifstat</small> <b>ip</b> <small>lnstat nstat routef routel rtacct rtmon rtpr rtstat</small> ss tc</code></html>

(Narzędzia: <html><code><b>omawiane</b> | ważne albo popularne | <small>mało znane albo zbędne</small></code></html>)
* {{{man ifconfig ip-link ip-address}}}
!!!Inne narzędzia
* {{{iputils}}} - narzędzia <html><code><b>arping</b> <small>clockdiff ipg</small> <b>ping</b> ping6 <small>rarpd rdisc</small> tftpd <b>tracepath</b> tracepath6 traceroute6</code></html>
* {{{traceroute}}}
* {{{mtr}}}
!!Wyświetlanie listy urządzeń i adresów
| Lista aktywnych urządzeń|{{{ifconfig}}}|{{{ip link show up}}}|
| Lista wszystkich urządzeń|{{{ifconfig -a}}}|{{{ip link [show]}}}|
| Lista adresów|{{{ifconfig [-a]}}}|{{{ip address [show [up]]}}}|

Wszystkie argumenty polecenia {{{ip}}} można dowolnie skracać, ale jeśli skróty kolidują, narzędzie wybiera jedno rozwinięcie zamiast wyświetlić komunikat o błędzie (sic!).
Np. {{{ip link show}}} można zapisać jako {{{ip l sh}}}, ale {{{ip l s}}} jest już traktowane jako {{{ip link set}}}

Interface'y można podzielić na fizyczne (reprezentują urządzenia sieciowe) i wirtualne (reszta).

Tradycyjne nazwy urządzeń (zwykle zakończone numerem)
* loopback {{{lo}}}
* przewodowe karty sieciowe {{{eth}}}
* bezprzewodowe karty sieciowe {{{wlan, ath, wifi, radio}}}
* {{{firewire}}}, infiniband {{{ib}}}
* urządzenia wirtualne, mostki, tunele etc. {{{dummy; br, tun, tap; sit, tnl, ppp, vpn, gre}}}
Niedawno w systemie Linux zmieniono sposób nadawania nazw urządzeniom. Stąd można spotkać nazwy: {{{eno1, sls1, wwp2s0, wlx78e7d1ea46da}}} 
<html><small>Dotychczas to, która karta sieciowa dostanie który numer (eth0, eth1) było trudne do przewidzenia (ale stałe dla danej konfiguracji sprzętowej). Co gorsza, kolejność po dodaniu nowej karty sieciowej mogła ulec zmianie.
Więcej szczegółów na: <a class="externalLink" href="" target="_blank"></a></small></html>
!!!Sprawdzanie łączności IP
{{{ping, traceroute, mtr}}}
!!!Włączanie / wyłączanie urządzenia
* <html><code>ifconfig <i>eth0</i> up</code></html> &nbsp; / &nbsp; <html><code>ifconfig <i>eth0</i> down</code></html>
* <html><code>ip link set dev <i>eth0</i> up</code></html> &nbsp; / &nbsp; <html><code>ip link set dev <i>eth0</i> down</code></html>
!!!Ustawianie / dodawanie / usuwanie adresów IP
Inne podejście w {{{net-tools}}} i w {{{iproute2}}} - ifconfig dla jednego urządzenia przydziela tylko jeden adres ~IPv4.

dodanie nowego adresu do urządzenia: <html><code>ip addr add <i></i> dev <i>eth0</i></code></html>
usunięcie adresu z urządzenia: <html><code>ip addr del <i></i> dev <i>eth0</i></code></html>
//Uwaga!// Każdy adres bez maski polecenie {{{ip}}} interpretuje jako adres z maską /32

wyczyszczenie adrsów: {{{ip addr flush [dev eth0]}}}

//zmiana// bieżącego adresu: <html><code>ifconfig <i>eth0</i> [<i></i>] [netmask <i></i>]</code></html>
dodanie nowego adresu do urządzenia (tworząc alias urządzenia): <html><code>ifconfig <i>eth0:something</i> <i></i></code></html>
'usunięcie' dodatkowego adresu do urządzenia (usunięcie aliasu): <html><code>ifconfig <i>eth0:something</i> down</code></html>

!!!~RS-232 (Przypomienie z innych przedmiotów)
[[RS-232|]] - standard szeregowej transmisji danych. Kiedyś bardzo rozpowszechniony w informatyce. Dawniej łączono terminal z komputerem po ~RS-232, potem używano go do łączenia PC i podłączania urządzeń zewnętrznych do PC. Został zastąpiony przez standard USB, jednak w tej chwili wciąż wiele urządzeń wciąż korzysta / wspiera ten protokół. Na jego bazie powstało wiele nowych i powiązanych protokołów.

Cisco używa części standardu ~RS-232 dotyczącej komunikacji do łączenia swoich produktów przez port zwany konsolą (console) z komputerami. Nie używa jednak standardowych gniazd, port konsoli jest gniazdem 8P8C[[*|Kabelki]]. <html><small style="margin-left:5em;"> Dla zainteresowanych: 
<a class="externalLink" href="" target="_blank">niestandardowe kable i złącza CISCO</a></small></html>

W niektórych komputerach i w laptopach nie montuje się portów COM, w razie potrzeby należy skorzystać z konwerterów usb-serial.

Obsługa portu COM (nazwa portu szeregowego obsługującego standard ~RS-232 w komputerach) możliwa jest przy pomocy następujących narzędzi:
* Linux: {{{minicom [-s]}}} &nbsp; / &nbsp; {{{picocom [/dev/ttyS0]}}}
* Windows: {{{hyperterminal}}} (tylko do Windows XP)  &nbsp; / &nbsp; {{{putty}}}
Urządzenia CISCO pracują pod kontrolą systemu [[IOS|]].


Poruszanie się w konsoli CISCO -

{{{no …}}} – odwraca działanie komendy
Tryb użytkownika - [[prompt|]] {{{>}}}
* {{{ping}}}
* {{{traceroute}}}
* {{{show}}} - pozwala na pokazanie (w tym trybie tylko __części__) stanu i ustawień 
* {{{enable}}} - przechodzi do trybu uprzywilejowanego
Tryb uprzywilejowany - prompt {{{#}}}
* {{{show}}} - pozwala na pokazanie stanu i ustawień 
* {{{show interfaces}}} - (długa) informacja o interface'ach sieciowych
* {{{show ip interface brief}}} - podsumowanie interface'ów sieciowych
* {{{show ip route}}} - informacje o routingu (tablica tras)
* {{{show ip route <ip>}}} - pokazanie trasy jaka jest wybierana do <ip>
* {{{configure terminal}}} przechodzi do trybu konfiguracji
Tryb konfiguracji - prompt {{{(config) #}}}
* {{{hostname <nazwa>}}} - ustawienia nazwy routera
* {{{router …}}} - ustawienia protokołów routingu
* {{{interface <nazwa interface'u>}}}&nbsp; - wejście w tryb ustawień podanego interface'u - prompt {{{(config-if) #}}}, np: <html><br /></html>{{{interace Fa 0/0}}} - ~FastEthernet (ethernet 100Mbit)<html><br /></html>{{{interace Gi 0/0}}} - ~GigaEthernet (ethernet 1Gbit)<html><br /></html>{{{interace Se 0/0}}} - Serial (szeregowegy)<html><br /></html> {{{0/0}}}&nbsp; oznacza logiczno-fizyczne położenie interface'u na routerze<html><br /></html>Polecenia w trybie konfiguracji interface'u:
** {{{ip address <adres> <maska>}}} - ustawienie adresu, np:<html><br /></html>{{{ip address}}}
** {{{no shutdown}}} - włączenie interface'u
** {{{clock rate <prędkość>}}} - (dla połączenia __szeregowego__) ustawienie zegara, np. <html><br /></html>{{{clock rate 8000000}}}
* {{{ip route <adres> <maska> <ip następnego skoku>}}} - dodanie trasy statycznej, np:<html><br /></html>{{{ip route}}}

* {{{show running-config}}} - konfiguracja (dostępna w trybie uprzywilejowanym)
* {{{exit}}} wychodzi o jeden tryb w górę, działa do trybu uprzywilejowanego
* {{{disable}}} wychodzi z trybu uprzywilejowanego (porównaj: {{{enable}}})
* {{{end}}} / {{{ctrl+z}}} cofa się do trybu uprzywilejowanego
* {{{do <komenda>}}} pozwala wykonać komendę z wcześniejszego poziomu - np. komendę {{{show ip route}}} w trybie konfiguracji  
* {{{ctrl+r}}} odświeża bieżącą linię
* {{{?}}} podpowiada możliwe komendy i ich składnie
* {{{tab}}} autouzupełnia komendy
* komendy można skracać (póki są jednoznaczne), np. zamiast {{{configure terminal}}} wystarczy {{{conf t}}}
* {{{ctrl+alt+6}}} przerywa hostname lookup / ping etc.
* {{{undebug all}}} wyłącza {{{debug all}}}
!!!Łączenie routerów CISCO po połączeniu szeregowym
Używane połączenia szeregowe jest synchroniczne, tzn. potrzebuje zegara.
Urządzenia nie są równorzędne, tylko jedna strona może nadawać zegar - nadaje go [[DCE|]], podczas gdy [[DTE|]] dostosowuje się do niego.
Przykładowa konfiguracja połączenia szeregowego jest na slajdach.
!!!Appendix: sprzęt CISCO
WIC / HWIC / EHWIC to nazwy standardów kart rozszerzeń do sprzętu CISCO.
[[GBIC|]], [[SFP i SFP+|]] to standardy transceiverów; duża część sprzętu sieciowego wyższej klasy posiada złącza tego typu by umożliwić użycie dowolnego medium [transceiver = połączenie nadajnika i odbiornika]  
!!!Symulacja routerów CISCO
<html><small> przykładowy link gdzie da się znaleźć jakieś obrazy systemów:
<a class="externalLink" href="" target="_blank"></a> 
<a class="externalLink" href="" target="_blank"></a> <a class="externalLink" href="" target="_blank"></a>
* kojarzyć co to jest i do czego służy port szeregowy (port COM, ~RS-232), kojarzyć że CISCO używa typowego protokołu transmisji i nietypowych wtyczek/gniazd
* umieć napisać komendę uruchamiającą dowolny program do komunikacji po porcie szeregowym
* kojarzyć że na routerach CISCO działa system IOS (nie mylić z iOS)
* kojarzyć że nazwy interface'ów w urządzeniach CISCO są nadawane w przewidywalny sposób bazując na tym gdzie interface jest podpięty
* wiedzieć że na urządzeniach CISCO są różne poziomy uprawnień:
** kojarzyć że różnią się znakiem zachęty (promptem)
** wiedzieć że istnieje tryb użytkownika pozwalający na okrojone wyświetlanie stanu ({{{>}}})
** wiedzieć że istnieje tryb uprzywilejowany¹ pozwalający na wyświetlanie stanu i bieżącej konfiguracji (zdecydowana większość dopuszczalnych tu komend nie modyfikuje ustawień) ({{{#}}})
** wiedzieć że istnieją tryby konfiguracji z których można wprowadzać zmiany w konfiguracji ({{{(conf.*)#}}})
* znać komendy potrzebne do:
** zmiany trybu na uprzywilejowany i konfiguracji
** wyświetlenia stanu interface'ów (w tym aktywnych adresów IP)
** wyświetlenia tablicy routingu
** wejścia w tryb konfiguracji interface'u
** uruchomienia interface'u
** ustawienia adresu IP
* kojarzyć pozostałe komendy z materiałów

¹ Co nie do końca jest zgodne z prawdą [[[1]|]]
!!!Internet Protocol version 4
Nagłówek ~IPv4 - [[|]]

Idea trasowania (routingu).
Fragmentacja (flagi: DF, MF; offset)
Protokół warstwy wyższej
IGMP - zarządzanie przynależnością do grup multicastowych.
Zastosowanie, typy wiadomości.

{{{ping}}} &nbsp;&nbsp;&nbsp; {{{traceroute [-I]}}}
Urządzenie działające na warstwie sieci to trasownik (router).
O routingu będzie kilka laboratoriów później.
!!!Automatyczne nadawanie adresów IP
Historyczne protokoły - RARP, BOOTP.

* Komunikaty discover, offer, request, nack, ack, release
* Przepływ wiadomości dla przyznawania, odnawiania i zwalniania adresu -
* Zakres adresów (address pool), dzierżawa (lease)
* Dane przekazywane przez DHCP - [[|]]
* Stały adres IP a DHCP
Serwer - {{{dhcpd}}}, klienty DHCP - {{{dhcpcd dhclient udhcpc pump}}}
* żądanie adresu IP: <html><code>dhcpcd [-d] <i>em1</i><code></html> &nbsp; / &nbsp; <html><code>dhclient [-d] [-v] <i>em1</i></code></html>
* uwlnienie adresu IP: <html><code>dhcpcd -k <i>em1</i><code></html> &nbsp; / &nbsp; <html><code>dhclient -r <i>em1</i></code></html>

Zeroconf (, APIPA, Avahi

* wiedzieć na czym polega trasowanie, wiedzieć że każdy węzeł wybiera tylko następny skok
* kojarzyć że routery działają na warstwie sieci
* rozumieć jaka jest rola pola TTL w nagłówku IP, wiedzieć co dzieje się gdy TTL dojdzie do 0
* wiedzieć jak działa fragmentacja
** kiedy fragmentacja musi zostać wykonana - kojarzyć związek MTU warstwy 2 z ograniczeniem na rozmiar pakietu
** jak rozpoznać pakiet będący fragmentem, jak system składa fragmenty
** wiedzieć po co jest pole ID w nagłówku
* kojarzyć że w nagłówku IP znajduje się pole definiujące protokół warstwy wyższej, adresy źródła i celu oraz suma kontrolna samego nagłówka
* kojarzyć protokołu ICMP i IGMP jako pomocnicze dla IP
* wiedzieć że wiadomości I(C|G)MP są pakietami IP plus nagłówek I(C|G)MP
* kojarzyć do czego jest stworzony IGMP
* znać podstawowe wiadomości ICMP (ping request/response, destination unreachable, ttl exceeded), wiedzieć kiedy są wysyłane
* kojarzyć program ping z ICMP, wiedzieć na jakiej zasadzie tracepath / traceroute poznają trasę pakietu
* znać protokół DHCP
** wiedzieć jak wygląda wymiana wiadomości przy przyznawaniu, odnawianiu i oddawaniu adresu IP
** znać pojęcie dzierżawy i puli adresów
** znać podstawowe parametry które serwer może przekazać klientowi
** umieć napisać komendę uruchamiającą klienta DHCP i pobierającą adres IP
Lista przydzielonych numerów protokółów – {{{/etc/protocols}}} &nbsp;

''Port'' - adres wiadomości z danego protokołu "wewnątrz" komputera.
Domyślne porty - {{{/etc/services}}}
''Połączenie'', identyfikacja połączenia - adres zdalny, adres lokalny, protokół, port zdalny, port lokalny.

Zakresy portów
* uprzywilejowane (system / well-known / privileged) – 1÷1023.
* //zarejestrowane// (polskie tłumaczenie?) (user / registered) – 1024 ÷ 49151
* efemeryczne (dynamic / private / ephemeral) – 49152÷65535

Gniazdo sieciowe (socket) - "zmaterializwany" interface między systemem operacyjnym a programem użytkownika.
Przydzielanie gniazdu nazwy (bind).

Monitorowanie bieżących połączeń 
* {{{netstat [-a|-l] [-t] [-u] [-p] [-n]}}}
* {{{ss [-a|-l] [-t] [-u] [-p] [-n]}}}
* {{{/proc/net/(tcp|udp|…)}}}

Testowanie łączności programami {{{netcat/nc}}} oraz {{{socat}}}

Najpopularniejszy program netcat / nc ma wiele wersji, między innymi: 
* [[GNU netcat|]] (rozpoznawanie: {{{man nc}}}&nbsp;/&nbsp;{{{man netcat}}} przedstawia się jako GNU netcat)
* [["oryginalny" netcat|]] (rozpoznawanie: {{{man nc}}}&nbsp;/&nbsp;{{{man netcat}}}  ma kota w ASCII art)
* [[BSD netcat|]] (rozpoznawanie: {{{man nc}}}&nbsp;/&nbsp;{{{man netcat}}} przedstawia się jako .*BSD netcat)
* [[busybox nc|]] (rozpoznawanie: używasz busyboxa)
|  | Serwer (GNU / "oryginalny" / bb) | Serwer (BSD) | Klient |
| TCP|<html><code>nc &nbsp;&nbsp; -l -p 12345</code></html>|<html><code>nc &nbsp;&nbsp; -l 12345</code></html>|<html><code>nc &nbsp;&nbsp; 12345</code></html>|
| UDP|{{{nc -u -l -p 12345}}}|{{{nc -u -l 12345}}}|{{{nc -u 12345}}}|
Mniej popularny, bardziej rozbudowany (i wciąż rozwijany) [[socat|]]
|  | Serwer | Klient |
| TCP|{{{socat TCP-LISTEN:12345 -}}}|{{{socat - TCP-CONNECT:}}}|
| UDP|{{{socat UDP-RECV:12345 -}}}|{{{socat - UDP-SENDTO:}}}|
| UDP|{{{socat UDP-LISTEN:12345 -}}}|{{{socat - UDP:}}}|
| SCTP|{{{socat SCTP-LISTEN:12345 -}}}|{{{socat - SCTP-CONNECT:}}}|
<html><small>Socat nie rozróżnia wielkości liter, pozwala na skróty - np. <code>udp-l</code> jako <code>udp-listen</code> czy <code>tcp</code> jako <code>tcp-connect</code><br>Adresy IPv6 podaje się w nawiasach kwadratowych (sic!), np. [::1]</small></html>
{{{socat tcp-l:12345,reuseaddr -}}}
{{{socat tcp-l:12345,fork -}}}
{{{socat tcp-l:8080,fork}}}
Działanie - bezpołączeniowe, brak kontroli przepływu, brak gwarancji dostarczenia.
Wielkość ''datagramów'', suma kontrolna.
<html><small>Pozwala na używanie rozgłoszeń / multicastów</small></html>
Protokoły / programy używające UDP - DNS, DHCP, strumieniowanie dźwięku (multimediów), gry sieciowe
* Nagłówek TCP - [[[1]|]] [[[2]|]]
* Flagi - syn, ack, fin, rst [[[1]|]], psh
* ''Segment'' TCP
* Strumień (kolejnść!) danych
* ''Kontrola przepływu'', potwierdzenia, wielkość okna
* Buforowanie
* ''Połączeniowy'' - punkt-punkt. Nawiązanie połączenia, podtrzymywanie połączenia, zakończenie połączenia, półzakończenie, zerwanie.  [[[1]|tcp_flow.svg]]
* Stan połączenia [[[1]|]] [[[2]|]]
* Warstwy sieci na których działa TCP.
* [extra] [[window scale option, RTTM|]], [[congestion control (przeciążenie)|]], ECN [[[1]|]] [[[2]|]], [[skaner portów|]], [[SYN flood|]]
Protokoły / programy używające TCP - "wszysto", np. http, ftp, ssh, ssl, …
!!!Inne protokoły warstwy transportu
* wiedzieć że port / numer portu to adres warstwy transportowej który pozwala adresować program
* kojarzyć że każdy protokół warstwy transportowej ma osobną pulę portów
* rozumieć jakie adresy / numery i dlaczego te pozwalają zaliczyć wiadomość do konkretnego połączenia
* kojarzyć podział portów na system (do 1024) / user (do któregośtam) / dynamic i rozumieć po co jest
* wiedzieć że programy słuchające na portach uprzywilejowanych mogą być uruchamiane tylko przez administratora
* wiedzieć że konkrente protokoły / używające ich programy zwykle mają ustalone numery portów (by dało się do nich wysyłać wiadomości)
* kojarzyć że program może czekać na połączenie (słuchać) lub próbować się połączyć ze słuchającym programem
* umieć wyświetlić listę aktywnych połączeń sieciowych w systemie
* umieć zinterpretować listę aktywnych połączeń sieciowych w systemie
* umieć programem netcat lub socat:
** oczekiwać (słuchać) na połączenia na konkretnym porcie podanego protokołu (UDP lub TCP)
** połączyć się z podanym adresem ip:port podanego protokołu (UDP lub TCP)
* znać (wszystkie 4) pola protokołu UDP
* znać i rozumieć cechy UDP - bezpołączeniowy, bezstanowy, przesyła wiadomości bez gwarancji dostarczenia, brak kontroli przepływu, ograniczenie rozmiaru paczki danych
* znać i rozumieć cechy TCP - stanowy, połączeniowy, strumieniowy, z kontrolą przepływu, z gwarancjami dostarczenia (przy braku awarii)
* znać tradycyjne nazwy wiadomości TCP (segmenty) i UDP (datagramy)
* wiedzieć jak jest nawiązywane i kończone połączenie, kojarzyć znacenie flag SYN, FIN, RST
* wiedzieć jak wysyłane są potwierdzenia (ACK), kojarzyć potwierdzenia i algorytm przesuwnego okna z kontrolą przepływu
* wiedzieć że TCP może buforować dane zarówno u nadawcy jak i odbiorcy, znać zastosowanie flagi PSH
* znać typowe zastosowania protokołów TCP i UDP
* na której warstwie działają
* jakie zadania spełniają
* jak routery mają się do domen kolizyjnych / rozgłoszeniowych

* jakie są sposoby na konfiguracje (webgui / konsola szeregowa / konsola zdalna, np. ssh)
* jakie są domyślne ustawienia:
** czy karty sieciowe są domyślnie włączone czy wyłączone
** czy urządzenia mają ustawione adresy IP
* kiedy wprowadzone ustawienia zaczynają działać
* kiedy wprowadzone ustawienia są zapisywane jako trwałe (tj. będą przywrócone po restarcie)
* skąd się biorą nazwy interface'ów (CISCO)

* zasada działania
* co jest przesyłane między routerami
* wiedzieć że każde łącze ma przypisywany koszt, wiedzieć od czego zależy koszt
* jak są liczone najkrótsze ścieżki
* co wie o topologii sieci router
* wiedzieć że używa multicastu do szukania sąsiadów
* wiedzieć po co są obszary, wiedzieć że obszar 0 ( jest głównym "szkieletem" sieci
* kojarzyć na czym polega konfiguracja - na dodaniu sieci o których informacje są rozgłaszanie i sieci w których protokół szuka sąsiadów
Co to jest trasowanie (routing).
Na każdym urządzeniu routingu wylicza tylko adres IP następnego skoku i interface którym pakiet zostanie wysłany.
Routing działa na warstwie sieci.

Tablica routingu - lista znanych sieci i tras no nich. (
Wpisy w tablicy definiują przynajmniej:
* cel - sieć docelową, <html><small> np.,</small></html>
* trasę - port wyjściowy lub/i adres następnego skoku, <html><small> np.,, slo1, tun2</small></html>
* metrykę - koszt wysłania daną trasą pakietu, używany do porównywania tras, <html><small> np. 0, 1, 10, 679842</small></html>
*<html><small> w routerach CISCO (na których będą kolejne zajęcia) dodatkowo parametr <i>administrative distance</i> (AD), który jest używany do rozstrzygania wyboru trasy jeśli więcej protokołów routingu poda trasę do tej samej sieci</small></html>
Wybór trasy:
* wybiera się trasy do sieci w których znajduje się docelowy adres o najdłuższej masce:
**{{{ via dev eth2}}}
**{{{ via dev eth2}}} 
**{{{ via dev eth2}}} 
* jeśli wybór nie jest jednoznaczny - trasa o najmniejszym koszcie
**{{{ dev wlan0  proto kernel  scope link  src  metric 2003}}}
**{{{ dev wlan1  proto kernel  scope link  src  metric 1002}}}
* jeśli wybór nie jest jednoznaczny - pierwsza w tablicy.
**{{{default via dev wlan0}}}
**{{{default via dev eth0}}}
Trasa domyślna - {{{default}}} a {{{}}}

Sposoby uzyskiwania informacji o trasach:
* ręczna konfiguracja
* użycie protokołów routingu

Protokoły trasowania można podzielić ze względu na obszar działania:
* wewnętrzne (IGP - Interior Gateway Protocol), np. RIP, EIGRP, OSPF, ~IS-IS
* zewnętrzna (EGP - Exterior Gateway Protocol) - obecnie (jedynym) używanym jest BGP
albo ze względu na sposób działania:
* wektora odległości (distance vector), np. RIP, IGRP – znają sąsiadów i koszt dotarcia do istniejących sieci
* stanu łącza (link state), np. OSPF, ~IS-IS – znają wszystkie połączenia w sieci
* wektora ścieżki (path-vector), np. BGP, używany tam gdzie sieć jest za duża by w/w działały – znają sąsiadów i ścieżki dotarcia do sieci sobie podległych

!!!Wyświetlanie tablic routingu w systemie Linux
Wypisanie trasy - {{{route}}} / {{{ip route [list/show]}}}
Sprawdzenie trasy do konkretnego adresu - {{{ip route get [addr]}}}
!!!Polityka systemu względem ruchu przechodzącego
Domyślnie Linux nie pozwala na przekazywanie (forward) pakietów. Aby zmienić to zachowanie, należy wykonać:
{{{sysctl net.ipv4.conf.all.forwarding=1}}} <html><div style="position:absolute; left:45em; display:inline;"><small>lista dostępnych zmiennych - <code>sysctl -a -r 'net\.ipv.\.conf\..*\.forwarding'</code><br />więcej informacji - <code>man 8 sysctl &nbsp; man 7 ip</code></small></div></html>
albo starsze &nbsp; {{{sysctl net.ipv4.ip_forward=1}}}

Można też skorzystać z katalogu /proc
{{{echo 1 > /proc/sys/net/ipv4/ip_forward}}}

<html><small>Dodatkowo na większości rodukcyjnych systemów firewall domyślnie zabrania na przepuszczanie ruchu – do zmiany tego zachodzania należy użyć komendy: <code>iptables -P FORWARD ACCEPT</code></small></html>
!!!Narzędzia związane z trasowaniem w systemie Linux
Usunięcie całej tablicy routinug - {{{ip route flush}}}
Dodanie trasy: <html><code>ip route add &lt;<i>addr</i>&gt;/&lt;<i>mask</i>&gt; [dev &lt;<i>ifname</i>&gt;] [via &lt;<i>addr</i>&gt;]</code></html>
Dodanie trasy przez następny skok - <html><code>ip route add &lt;<i>addr</i>&gt;/&lt;<i>mask</i>&gt; via &lt;<i>addr</i>&gt;</code></html>
Dodanie trasy przez urządzenie - <html><code>ip route add &lt;<i>addr</i>&gt;/&lt;<i>mask</i>&gt; dev &lt;<i>ifname</i>&gt;</code></html>
Dodanie trasy domyślnej - <html><code>ip route add default &lt;<i>urządzenie i/lub hop</i>&gt;</code></html>
Trasa może definiować zarówno urządzenie jak i adres następnego skoku.
Podanie samego urządzenia starczy tylko w specjalnych przypadkach, takich jak np.:
* sieć bezpośrednio połączona
* urządzenia punkt-punkt
Przy definiowaniu trasy można podać też inne opcje mające wpływ na wybór trasy ({{{metric, src, mtu}}}) jak i też na sposób wysyłania nią pakietów (np. opcje TCP).
Usunięcie trasy - <html><code>ip route del &lt;<i>specyfkacja trasy</i>&gt;</code></html>

{{{man route }}} / {{{ man ip-route}}}

Narzędzia do sprawdzania trasy pakietu (przypomnienie):
{{{tracepath   traceroute   mtr}}}

Pętle routingu (przypomnienie).

<html><small>Specjalne trasy odrzucające pakiety - <code>throw  unreachable  prohibit  blackhole</code>, np:<br />
<code>ip r a blackhole<br />
ip r a unreachable</code><br />
(zamiast takich tras zaleca się stosowanie firewalla)</small></html>

!!! Appendix: Komendy dla Windowsa
* Obsługa tablicy routingu – polecenie {{{route}}}
** Wyświetlenie tablicy tras {{{route print}}}
** Dodanie trasy: {{{route add <SIEĆ> mask <MASKA> <NEXT_HOP>}}} (np. {{{route add mask}}})
** Usunięcie trasy {{{route delete <SIEĆ>}}} (uwaga! jeśli jest wiele tras do tego samego adresu sieci z różnymi maskami – wszystkie będą usunięte!)
* Sprawdzenie trasy {{{tracert}}}
* Włączenie ruchu przechodzącego:
** Wpisanie wartości {{{1}}} typu DWORD do {{{HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter}}}
** Podobne działanie daje udostępnienie połączenia internetowego (ppm na połączeniu sieciowym / "Właściwości" / karta "Udostępnianie" / "Zezwalaj innym użytkownikom sieci na łączenie się poprzez połączenie internetowe tego komputera")
* wiedzieć że trasowanie (routing):
** ma na celu wyznaczenie adresu następnego skoku – numeru IP i/lub urządzenia
** jest wykonywany samodzielnie przez każde urządzenie (pracujące na warstwie sieci)
** jest wykonywany na podstawie tablicy tras
* wiedzieć jak zbudowana jest tablica tras
** rozumieć co ma być celem (siecią docelową)
** wiedzieć jak zdefiniowany jest następny skok
** kojarzyć że każdy wpis ma swój koszt (metrykę)
* znać reguły wyboru tras
* podać która trasa zostanie wybrana na podstawie tablicy – umieć czytać tablice tras
* wiedzieć po co jest trasa domyślna (brama domyślna)
* podać dla danego urządzenia wpis do tablicy routingu który umożliwi dotarcie do wskazanej sieci znając topologię
* skonstruować kompletną tablicę tras znając topologię
* kojarzyć że tablicę tras można stworzyć ręcznie (konfiguracja statyczna) lub do jej tworzenia można wykorzystać protokoły trasowania (konfiguracja dynamiczna)
* kojarzyć że z przyczyn bezpieczeństwa większość systemów operacyjnych domyślnie odrzuca ruch przechodzący i umieć szybko znaleźć polecenie zmieniające to zachowanie
* podać polecenie wyświetlić tablicę routingu
* umieć dodać prawidłową trasę do tablicy
** ustawić trasę domyślną
** ustawić trasę do sieci bezpośrednio podłączonej
** ustawić trasę przez podany adres IP następnego skoku
* umieć usunąć trasę
* podać polecenie śledzące trasę [przypomnienie]
!Sieci Komputerowe - pierwszy semestr (laboratoria)
<html><div style="position:relative"><div style="position:absolute; right:0; text-align:right;"><small><a rel="license" href=""><img alt="Creative Commons License" src="" /></a>&nbsp;&nbsp;Materiały dydaktyczne na tej stronie objęte są licencją<br /><a rel="license" href="">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</small></div></html>Część materiałów znajduje się na stronie [[Michała Kalewskiego|]]

//Plan zajęć i materiały będą aktualizowane na bieżąco.//
//Numery tematów nie odzwierciedlają numeru zajęć//
# [[Wstęp i adresacja IPv4]]
# [[Podstawowe narzędzia sieciowe w Linuksie]]
# [[Model warstwowy sieci]]
# [[Warstwa fizyczna]]
# [[Warstwa łącza danych i protokół ARP]] &nbsp; [[[zagadnienia]|Warstwa łącza danych i protokół ARP - zagadnienia]]
# [[Protokoły warstwy sieci]] &nbsp; [[[zagadnienia]|Protokoły warstwy sieci - zagadnienia]]
# [[Protokoły warstwy transportu]] &nbsp; [[[zagadnienia]|Protokoły warstwy transportu - zagadnienia]]
# [[Kabelki [+zagadnienia] ]]
# [[Routing statyczny w Linuksie]] &nbsp; [[[zagadnienia]|Routing statyczny w Linuksie - zagadnienia]]
# [[Podstawy konfiguracji urządzeń CISCO - adresacja IP i statyczny routing]] &nbsp; [[[zagadnienia]|Podstawy konfiguracji urządzeń CISCO - adresacja IP i statyczny routing - zagadnienia]]
# [[OSPF na routerach CISCO]] &nbsp; [[[zagadnienia]|Routery i protokołu routingu - zagadnienia]]
# [[Filtracja pakietów w systemie Linux]] &nbsp; [zagadnienia: [[filtrowanie|Filtracja pakietów w systemie Linux - zagadnienia]] ]
# [[Krótki wstęp do BGP]]
# [[Konfiguracja urządzeń MikroTik]] &nbsp; [[[zagadnienia]|Routery i protokołu routingu - zagadnienia]]  <html><br /> Treści dodatkowe:</html>
# [[TUN/TAP, mostki i agregacja łącz]]  <html></div></html>

<html><small>mgr inż.</small></html> Jan Kończak
Na początku zajęć proszę zaktualizować pakiet iproute2 (
* ~OpenSUSE 13.2 [[1-click install]|]]
* ~OpenSUSE 13.1 [[1-click install]|]]
Interface sieciowy mający z jednego końca system operacyjny, z drugiego - program. Porównaj z:
Interface sieciowy mający z jednego końca system operacyjny, z drugiego - kabel / fale radiowe.

* tunele
* maszyny wirtualne
TAP działa na warstwie łącza danych, TUN działa bezpośrednio na warstwie sieci.

*{{{ip tuntap add dev <ifname> [mode {tun|tap}] [user <username>]}}}
*{{{tunctl [-n|-t] [-u <user>] [-t <ifname>]}}}
System Linux może emulować zwykły przełącznik sieciowy (switch).
W tym celu należy stworzyć wirtualne urządzenie - mostek (bridge). Przypominam: mostek to switch na 2 porty. Wirtualne mostki pozwalają na podpięcie dowolnej liczby urządzeń.
W efekcie kilka kart w systemie Linux zostanie zastąpione jedną - tzn, karty podpięte do wirtualnego mostka nie mogą mieć adresu IP. Adres IP można przypisać do mostka.   
Dodanie adresu IP do mostka jest równoznaczne z podłączeniem komputera do przełącznika. 

Konfiguracja używając iproute2:
* stworzenie mostka: <html><br/></html>{{{ip link add <nazwa> type bridge}}} <html><br/></html>{{{ip link add br0 type bridge}}}
* usunięcie mostka - {{{ip link del dev br0}}}
* włączenie mostka - {{{ip link set dev br0 up}}}
* dodanie adresu do mostka - {{{ip addr add <adres>/<maska> br0}}}
* dodanie urządzenia do mostka:  <html><br/></html>{{{ip link set dev <urzadzenie> master <mostek>}}}  <html><br/></html>{{{ip link set dev eth0 master br0}}}
* usunięcie urządzenia z mostka:  <html><br/></html>{{{ip link set dev <urzadzenie> nomaster}}} <html><br/></html>{{{ip link set dev eth0 nomaster}}}
Konfiguracja używając starszego bridge-utils:
* stworzenie mostka - {{{brctl addbr br0}}}
* włączenie mostka - {{{ifconfig br0 up}}}
* dodanie interface'u do mostka - {{{brctl addif br0 eth0}}}
* dodanie adresu do mostka - {{{ifconfig br0 <adres> [netmask <maska>] }}}
* usunięcie interface'u z mostka - {{{brctl delif br0 eth0}}}
* usunięcie mostka - {{{brctl delbr br0}}}
!Agregacja łączy
Jeśli mamy więcej kart w 1 komputerze i więcej kabli w ścianach, to może by je użyć do:
* zwiększenia wydajności, lub
* uodpornienia na awarie
Podstawowy cel - użyć (połączyć, zagregować, ang. //aggregate//) wielu połączeń (łącz, ang. //link//) tak, by reszta konfiguracji pozostała bez zmian – w szczególności nie dodaje się kolejnych adresów IP.

Dużo pomysłów jak to zrobić, część własnościowych:

Czym jest a czym nie jest agregacja łączy:
* agregacja łączy nie stwarza jednego o większej przepustowości
* w wielu rozwiązaniach ruch przychodzący wchodzi tylko jednym łączem
* sprawdza się przy połączeniach z wieloma komputerami
!!!Linux bonding driver
Kilka trybów pracy ( balance-rr, active-backup, balance-alb

Jak zbalansować ruch wychodzący? Łatwo. Wiadomości z __różnych__ połączeń mogą iść innym łączem.
Jak zbalansować ruch przychodzący? Trudno. Dlaczego? Patrz: protokół ARP.

Adaptive load balancing - oszukuje urządzenia w sieci podając każdemu inny (jeden z kilku) MAC jako swój.

Kroku do ustawienia agregacji pod Linuksem:
# stwórz urządzenie typu bond
# dodaj do niego łącza
# skonfiguruj urządzenie typu bond (włącz, nadaj adres etc.)
Tworzenie wirtualnego interface'u:
* Używając {{{ip link}}}
** wyświetlenie pomocy: {{{ip link add dev <nazwa> type bond help}}}
** dodanie (gorszy przykład): {{{ip link add dev bond0 type bond}}}
** dodanie (lepszy przykład): {{{ip link add dev bond0 type bond mode balance-alb xmit_hash_policy layer3+4 miimon 100}}}
** usunięcie (przykład): {{{ip link del bond0}}}
** wyświetlanie szczegółów w ip link: {{{ip -d link}}}  /  {{{ip --details link}}}
* Używając tradycyjnych mechanizmów:
** załadowanie modułu jądra systemu operacyjnego, w momencie załadowania dodawane jest urządzenie: {{{modprobe bonding mode=balance-alb xmit_hash_policy=layer3+4  miimon=100}}}
** usunięcie modułu: {{{modprobe -r bonding}}}
Wyświetlanie ustawień i stanu:
* {{{cat /proc/net/bonding/bond0}}}
* katalog {{{/sys/class/net/bond0/bonding}}}
Dodawanie/usuwanie łącz:
* używając {{{ip link}}}
** dodanie: {{{ip l set dev eth0 master bond0}}}
** usunięcie: {{{ip l set dev eth0 nomaster}}}
* używając {{{ifenslave}}}
** dodanie: {{{ifenslave bond0 eth0 eth1}}}
** usuniięcie:  {{{ifenslave -d bond0 eth0 eth1}}}

Przypomnienie - netperf. Serwer - {{{netserver}}}, Klient (2 działające równocześnie) - {{{netperf -H & netperf -H}}}
!!!LACP / 802.3ad / ~EtherChannel
~EtherChannel - pierwszy pomysł agregacji portów, przejęty i rozwijany przez CISCO
802.3ad - przestarzały standard powstały w dużej mierze na ~EtherChannel, zastąpiony przez IEEE 802.1AX-2008
LACP - protokół realizujący ~EtherChannel/802.3ad - automatycznie "dogadujący" agregację

Do zadziałania obie strony muszą być skonfigurowane

Ze strony Linuksa - tryb 802.3ad, np:
*{{{ip link add dev bond0 type bond mode 802.3ad}}}
*{{{modprobe bonding mode=802.3ad}}}

Ze strony switcha CISCO, przykładowa konfiguracja:
Switch> enable <br />
Switch# conf t <br />
Switch(config)# interface Port-channel 1 </code>       <small>pozwala ustawiać parametry całego kanału</small><code><br />
Switch(config-if)# exit <br />
Switch(config)# interface range GigabitEthernet 0/1-2 </code>       <small>zmienia ustawienia wszystkich interfejsów z zakresu</small><code><br />        
Switch(config-if-range)# channel-group 1 mode active </code>       <small>dodaje łącze do grupy; mode active wymusi wysyłanie wiadomości protokołu LACP</small><code><br />
Switch(config-if-range)# exit <br />
Switch(config-if-range)# interface range GigabitEthernet 0/3-4 <br />      
Switch(config-if-range)# channel-group 2 mode active <br />
Switch(config-if-range)# exit <br />
Switch(config)# interface range GigabitEthernet 0/1-4 <br />
Switch(config-if-range)# no channel-group</code>     <small>usunie interfejsy z kanału</small>

Uwaga! Tutaj nie uda się uzyskać lepszej prędkości między dwoma stacjami, potrzeba trzech do testów. {{{netperf -H & netperf -H}}}

!!!Wastwa fizyczna (z naciskiem na Ethernet)
Zwykle w całości realizowana przez sprzęt.
Główne zadanie - pozwala wysyłać i odbierać ''bity''
Protokoły opisują wszystko potrzebne do przesłania bitów (m. in. medium, synchronizację, kodowanie, detecję błędów, korekcję)
Całkowity brak interpretacji przesyłanych danych
Udostępnia informacje o stanie i pozwala zmieniać część ustawienia (np. prędkość, dupleks, kanał radiowy)

* Standardy: 802.3, .*BASE.* (np. 10BASE-T, 40GBASE-LR4) - - znaczenie nazw
** Prędkość
** Medium - rodzje kabli (koncentryczny, skrętka, światłowód)
** Odległość
** Dupleks
* Modulacje i kodowania - ~PAM-3, [[PAM-5|]], THP ~PAM-16, [[MLT-3|]], [[Manchester|]], [[8B/10B|]], [[64b/66b|]]
* Wielodostęp - [[CSMA/CD|]], [[CSMA/CA|]], kolizje, ''domena kolizyjna''
* Autonegocjacja (, wykrywanie łącza, auto-MDIX (
* MTU dla Ethernetu
Urządzenia Ethernetowe działające na tej warstwie to regenerator / wzmacniak (repeater) i koncentrator (hub)

Znaczenie diod LED przy porcie ethernetowym

Narzędzia do zarządzania warstwą fizyczną Ethernetu w Linuksie: {{{mii-tool}}} &nbsp; / &nbsp; {{{ethtool}}}
Informacje o warstwie fizycznej w {{{ip link}}} &nbsp; / &nbsp; {{{ip address}}}

!!!Warstwa łącza danych
Pozwala wysłać ''ramki'' do konkretnego urządzenia (lub urządzeń), do których nadawca jest połączony na warstwie fizycznej.

Dla typowych rozwiązań w siecach komputerowych podzielona na:
* MAC ("dolna" część warstwy 2)
** wprowadza adresację
** obsługuje wielodostęp - rozwiązywanie konfliktów
** eliminuje zniekształcone ramki (liczy [[CRC|]])
** <html><small>implementacja zależna od warstwy fizycznej</small></html>
* LLC ("górna" część warstwy 2)
** przekazuje informacje o protokole warstwy wyższej
** <html><small> jeśli trzeba, dba o multileksację ramek</small></html>
** <html><small>może korygować błędy i kontrolować przepływ</small></html>
** <html><small>zdefiniowane w <a href="">IEEE 802.2</a></small></html>
** <html><small>jednolita dla wielu rzwiązań na warstwie fizycznej</small></html>

Adres MAC - zapis, budowa adresu, OUI
Założenie unikalności adresów &nbsp; [["przydział" adresów|]] &nbsp; [[zajęte adresy|]]
Adresy multicastowe (pierwszy oktet nieparzysty) i rozgłoszeniowe (broadcast, ff:ff:ff:ff:ff:ff) <html><small>IPv4 multicast: <code>01:00:5e:…</code> &nbsp; IPv6 multicast: <code>33:33:…</code></small></html>

W Linuksie do zarządzania warstwą łącza danych (data //link// layer) służy komenda {{{ifconfig (i inne)}}} &nbsp; / &nbsp; {{{ip link}}}
* odczyt adresu MAC:  {{{ifconfig eth0}}} &nbsp; / &nbsp; {{{ ip link}}}
* zmiana adresu MAC:  {{{ifconfig eth0 hw ether 12:34:56:78:90:ab}}} &nbsp; / &nbsp; {{{ ip link set dev eth0 address 12:34:56:78:90:ab}}}

Domena rozgłoszeniowa [[[1]|]] [[[2]|]]

Urządzenia warstwy łącza danych to mostki (bridge) i przełączniki (switch)
* IEEE 802.3
* Ethernet obejmuje zarówno warstwę fizyczną jak i łącza danych
* Budowa ramki Ramki Ethernet II / IEEE 802.2 LLC
* Pole długość ramki / typ ramki,
!!!Przełącznik (switch)
Wybór portu, tablica adresów MAC, pamięć CAM

Protokoły drzewa rozpinającego: (STP, RSTP, PVSTP (cisco), MSTP)

Cut-through / fragment-free / store-and-forward

Przełączniki zarządzalne / wielowarstwowe
!!!Mierzenie prędkości
{{{netperf}}} &nbsp; / &nbsp; {{{iperf}}}
Instalacja w/w programów w """OpenSUSE""": [[netperf|]] ([[link bezpośredni|]]) / iperf: {{{zypper install iperf}}}

Przepustwość: bandwidth ≥ throughput ≥ goodput
Jednostki bps i pps
!!!Pomiędzy warstwą łącza danych a warstwą sieci
* wyświetlanie znanych odwzorowań {{{arp}}} &nbsp; / &nbsp; {{{ip neigh}}}
* czyszczenie wszystkich odwzorowań {{{ip n flush all}}}
* {{{arping}}}
''[[Urządzenia sieciowe technologii Ethernet|]]'' 
''[[Protokół ARP|]]''
Po zajęciach student ma:
* umieć napisać jednozdaniową definicję warstwy łącza danych
* wiedzieć że dzięki adresom można wysłać dane do wybranej stacji / grupy stacji / wszystkich
* wiedzieć jak wygląda poprawny adres MAC (sposób zapisu, długość)
* znać rozgłoszeniowy adres MAC
* znać polecenie wyświetlające adres MAC
* wiedzieć że wiadomości na tej warstwie nazywa się ramkami
* znać strunkturę najpopularniejszej ramki Ethernet II – tj. wiedzieć jakie ma pola i czemu one służą
* wiedzieć skąd komputer wie jak dalej interpretować zawartość pola danych
* wiedzieć że na tej warstwie jest liczona suma kontrolna całej ramki, kojarzyć z tym skrót CRC
* rozumieć czym różni się działanie switcha od huba
* wiedzieć co to jest mostek, przełącznik, bridge, switch
* wiedzieć jak switch buduje tablicę adresów MAC
* wiedzieć jak switch wybiera port(y) docelowe jeśli ma / nie ma wpisu dla docelowego MAC
* podać definicję i zaznaczyć na schemacie sieci domenę kolizyjną
* podać definicję i zaznaczyć na schemacie sieci domenę rozgłoszeniową
* wiedzieć jak powstają pętle na warstwie łącza danych
* wiedzieć po co są protokoły STP

* wiedzieć jak komputer uczy się adresu MAC stacji ze znanym adresem IP
* znać główne pola ramki ARP
* znać polecenie wypisujące tablicę znanych odwzorowań MAC – IP
* znać polecenie {{{arping}}}
!!!Krótka historia sieci i Internetu
* Arpanet (1969), ~ALOHAnet (1971), Ethernet (1976), BITNET (1981), FIDONET (1984)
* FTP (1971), UUCP (1978), BBS (1978), Usenet (1980), DNS (1982), WWW / HTML (1990, 1991), Gopher (1991),
!!!Sieci - wstęp
* PAN, SAN, LAN, sieć kampusowa, MAN, WAN, internet
* sieć szkieletowa
* intranet, ekstranet

Fizyczna / logiczna topologia sieci:
* magistrali,
* pierścienia,
* podwójnego pierścienia,
* gwiazdy,
* rozszerzonej gwiazdy,
* hierarchiczna,
* siatki.
Pojęcia: unicast, anycast, multicast, broadcast [[[1]|]]

Adresy - skąd się biorą?
Standardy - skąd się biorą?

!!Adresacja IP
''[[Slajdy - część pierwsza (pdf)|]]''
Rodzaje adresów - adres sieci, adres stacji roboczej, rozgłoszeniowy, maska

Klasy adresów ~IPv4, bloki prywatne
* Klasy ~A-E
* Bloki prywatne w klasach ~A-C
* Loopback i inne
!!!VLSM (1987)
''[[Slajdy - część druga (pdf)|]]''
!!!CIDR (1993)
!!!Podział sieci
!!!Agregacja adresów
[[Przykład agregacji (z zajęć)]]