Last active
April 14, 2022 10:59
-
-
Save arntzy/425b893e0284803fe140 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "", | |
"signature": "sha256:d071dab08129712015ba4fc1fdc1e6b3d325a52a9ceb1f66bde3bc136493d1f5" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"#Prerequisites for learning about ```ifconfig```... " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####If you don't know what I mean when I say \"run ```ifconfig``` from the command line\", this guide might not be for you...\n", | |
"\n", | |
"####However, to learn a little bit about command line basics, check out this great introductory tutorial:\n", | |
"\n", | |
"[Introduction to the Mac OS X Command Line](http://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line)\n", | |
"\n", | |
"####This information below is presented in an ipython notebook so you can run some of this code on your own computer. To find out what an ipython notebook is and how to install it, check out these links:\n", | |
"\n", | |
"[What is an ipython notebook?](http://ipython.org/notebook.html)\n", | |
"\n", | |
"[How do I install it?](http://www.masnun.com/2014/07/22/installing-ipython-notebook-on-os-x.html)\n", | |
"\n", | |
"####If you have ipython notebook installed, you can now download this notebook and run the examples on your computer." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####...and now that you are an expert from the command line..." | |
] | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 1, | |
"metadata": {}, | |
"source": [ | |
"What does the ```ifconfig``` tool tell me about my network interfaces?" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####**`ifconfig`** is a program used by unix-like operating systems (including Mac OSX) to configure network interfaces on a system. \n", | |
"\n", | |
"####This ipython notebook is an exploration of **`ifconfig`**'s output with executable examples. \n", | |
"\n", | |
"####When I run **`ifconfig`** from the terminal using Mac OS X (Yosemite) I get this output:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"```\n", | |
"lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384\n", | |
"\toptions=3<RXCSUM,TXCSUM>\n", | |
"\tinet6 ::1 prefixlen 128 \n", | |
"\tinet 127.0.0.1 netmask 0xff000000 \n", | |
"\tinet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 \n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280\n", | |
"stf0: flags=0<> mtu 1280\n", | |
"en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\toptions=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>\n", | |
"\tether 3c:07:54:4e:0f:f8 \n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect (none)\n", | |
"\tstatus: inactive\n", | |
"en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\tether 68:a8:6d:24:58:cc \n", | |
"\tinet6 fe80::6aa8:6dff:fe24:58cc%en1 prefixlen 64 scopeid 0x5 \n", | |
"\tinet 10.0.1.3 netmask 0xffffff00 broadcast 10.0.1.255\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect\n", | |
"\tstatus: active\n", | |
"fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078\n", | |
"\tlladdr a4:b1:97:ff:fe:8c:ac:5a \n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect <full-duplex>\n", | |
"\tstatus: inactive\n", | |
"en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\toptions=60<TSO4,TSO6>\n", | |
"\tether d2:00:18:ca:c5:a0 \n", | |
"\tmedia: autoselect <full-duplex>\n", | |
"\tstatus: inactive\n", | |
"p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304\n", | |
"\tether 0a:a8:6d:24:58:cc \n", | |
"\tmedia: autoselect\n", | |
"\tstatus: inactive\n", | |
"bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\toptions=63<RXCSUM,TXCSUM,TSO4,TSO6>\n", | |
"\tether 3e:07:54:e4:08:00 \n", | |
"\tConfiguration:\n", | |
"\t\tid 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0\n", | |
"\t\tmaxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200\n", | |
"\t\troot id 0:0:0:0:0:0 priority 0 ifcost 0 port 0\n", | |
"\t\tipfilter disabled flags 0x2\n", | |
"\tmember: en2 flags=3<LEARNING,DISCOVER>\n", | |
"\t ifmaxaddr 0 port 7 priority 0 path cost 0\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: <unknown type>\n", | |
"\tstatus: inactive\n", | |
" ```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####What does all that output mean? What are the'lo0' and 'gif0'devices? What...Huh?" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####*If* you have downloaded this ipython notebook locally, run the next cell to see your own system's network interface configuration. \n", | |
"\n", | |
"####The ```%%bash``` header in an ipython notebook tells the notebook to run code using a bash shell. \n", | |
"\n", | |
"####Anytime in this report that you see the ```%%bash``` header in a cell, run that baby!\n", | |
"\n", | |
"####To run a cell in an ipython notebook, press [CTRL+return]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"%%bash\n", | |
"ifconfig" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384\n", | |
"\toptions=3<RXCSUM,TXCSUM>\n", | |
"\tinet6 ::1 prefixlen 128 \n", | |
"\tinet 127.0.0.1 netmask 0xff000000 \n", | |
"\tinet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 \n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280\n", | |
"stf0: flags=0<> mtu 1280\n", | |
"en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\toptions=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>\n", | |
"\tether 3c:07:54:4e:0f:f8 \n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect (none)\n", | |
"\tstatus: inactive\n", | |
"fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078\n", | |
"\tlladdr a4:b1:97:ff:fe:8c:ac:5a \n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect <full-duplex>\n", | |
"\tstatus: inactive\n", | |
"en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\tether 68:a8:6d:24:58:cc \n", | |
"\tinet6 fe80::6aa8:6dff:fe24:58cc%en1 prefixlen 64 scopeid 0x6 \n", | |
"\tinet 10.0.1.3 netmask 0xffffff00 broadcast 10.0.1.255\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect\n", | |
"\tstatus: active\n", | |
"en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\toptions=60<TSO4,TSO6>\n", | |
"\tether d2:00:18:ca:c5:a0 \n", | |
"\tmedia: autoselect <full-duplex>\n", | |
"\tstatus: inactive\n", | |
"p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304\n", | |
"\tether 0a:a8:6d:24:58:cc \n", | |
"\tmedia: autoselect\n", | |
"\tstatus: inactive\n", | |
"bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\toptions=63<RXCSUM,TXCSUM,TSO4,TSO6>\n", | |
"\tether 3e:07:54:e4:08:00 \n", | |
"\tConfiguration:\n", | |
"\t\tid 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0\n", | |
"\t\tmaxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200\n", | |
"\t\troot id 0:0:0:0:0:0 priority 0 ifcost 0 port 0\n", | |
"\t\tipfilter disabled flags 0x2\n", | |
"\tmember: en2 flags=3<LEARNING,DISCOVER>\n", | |
"\t ifmaxaddr 0 port 7 priority 0 path cost 0\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: <unknown type>\n", | |
"\tstatus: inactive\n" | |
] | |
} | |
], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"from IPython.display import Image\n", | |
"Image('http://itwebtrap.com/wp-content/uploads/2014/09/hardware1-300x285.jpeg')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg\nSlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK\nDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU\nFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgBHQEs\nAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF\nBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq\nNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi\no6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E\nAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR\nBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG\nR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz\ntLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A\n/VOiiigAooooAKKKKACiiigAooooAKKKKACiik3UALRTc0ZNADqKbk0ZNADqKTdRnNAC0UUUAFFF\nFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTd1BPNJQA\nUE4FNLEH2pjPigCTdxSbvpUJl/Oo/O96ALQal3Cqhnx3FOWYAjkCh6B1sWc5pahEnrTw+aAJAead\nTAc0AkUAPopAc0tABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF\n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\n", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 8, | |
"text": [ | |
"<IPython.core.display.Image at 0x109e09c10>" | |
] | |
} | |
], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####In order to see which of these devices are hardware and which are software, I took a look at networksetup...\n", | |
"\n", | |
"####(networksetup is a command line tool for configuring network settings in system preferences on a Mac.)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": true, | |
"input": [ | |
"%%bash\n", | |
"networksetup -listallhardwareports" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\n", | |
"Hardware Port: Bluetooth DUN\n", | |
"Device: Bluetooth-Modem\n", | |
"Ethernet Address: N/A\n", | |
"\n", | |
"Hardware Port: Ethernet\n", | |
"Device: en0\n", | |
"Ethernet Address: 3c:07:54:4e:0f:f8\n", | |
"\n", | |
"Hardware Port: FireWire\n", | |
"Device: fw0\n", | |
"Ethernet Address: a4:b1:97:ff:fe:8c:ac:5a\n", | |
"\n", | |
"Hardware Port: Wi-Fi\n", | |
"Device: en1\n", | |
"Ethernet Address: 68:a8:6d:24:58:cc\n", | |
"\n", | |
"Hardware Port: Bluetooth PAN\n", | |
"Device: en3\n", | |
"Ethernet Address: 68:a8:6d:24:58:cd\n", | |
"\n", | |
"Hardware Port: Thunderbolt 1\n", | |
"Device: en2\n", | |
"Ethernet Address: d2:00:18:ca:c5:a0\n", | |
"\n", | |
"Hardware Port: Thunderbolt Bridge\n", | |
"Device: bridge0\n", | |
"Ethernet Address: N/A\n", | |
"\n", | |
"VLAN Configurations\n", | |
"===================\n" | |
] | |
} | |
], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Here is the output that I get when I run `networksetup -listallhardwareports`." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"```\n", | |
"Hardware Port: Bluetooth DUN\n", | |
"Device: Bluetooth-Modem\n", | |
"Ethernet Address: N/A\n", | |
"\n", | |
"Hardware Port: Ethernet\n", | |
"Device: en0\n", | |
"Ethernet Address: 3c:07:54:4e:0f:f8\n", | |
"\n", | |
"Hardware Port: FireWire\n", | |
"Device: fw0\n", | |
"Ethernet Address: a4:b1:97:ff:fe:8c:ac:5a\n", | |
"\n", | |
"Hardware Port: Wi-Fi\n", | |
"Device: en1\n", | |
"Ethernet Address: 68:a8:6d:24:58:cc\n", | |
"\n", | |
"Hardware Port: Bluetooth PAN\n", | |
"Device: en3\n", | |
"Ethernet Address: 68:a8:6d:24:58:cd\n", | |
"\n", | |
"Hardware Port: Thunderbolt 1\n", | |
"Device: en2\n", | |
"Ethernet Address: d2:00:18:ca:c5:a0\n", | |
"\n", | |
"Hardware Port: Thunderbolt Bridge\n", | |
"Device: bridge0\n", | |
"Ethernet Address: N/A\n", | |
"\n", | |
"VLAN Configurations\n", | |
"===================\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####So my hardware devices from `ifconfig` are the following:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"```\n", | |
"en0: Ethernet Network Interface Controller\n", | |
"fw0: Firewire\n", | |
"en1: Wi-Fi Network Interface Controller (Airport)\n", | |
"en2: Thunderbolt 1\n", | |
"bridge0: Thunderbolt Bridge\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Which means that the software devices from `ifconfig` are:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"```\n", | |
"lo0: loopback interface\n", | |
"gif0: generic tunnel interface\n", | |
"stf0: six-to-four interface \n", | |
"p2p0: point-to-point interface (Airdrop)\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Let's look at each of the software interfaces in a little more detail:\n", | |
"\n", | |
"* **lo0**: The loopback interface is used to route packets back to itself without ever interacting with a NIC (network interface controller). In this way, the loopback interface can test both transmission and receiving capabilities of the network setup, and act as a \"virtual network interface through which network applications can communicate when executing on the same machine. Any traffic that a computer program sends to a loopback IP address is simply and immediately passed back up the network software stack as if it had been received from another device.\" [[1]](http://en.wikipedia.org/wiki/Loopback) Notice that the `inet 127.0.0.1 netmask 0xff000000` line from the loopback device shows the IPv4 address usually associated with the 'localhost'. \n", | |
"\n", | |
"* **gif0**: The generic tunneling interface (pseudo-device) is used to tunnel traffic in four different configurations. (IP[46] over IP[46]) \n", | |
" \n", | |
"* **stf0**: This is a six-to-four tunneling interface (pseudo-device), which means that it can tunnel IPv6 packets in IPv4 encapsulation. \n", | |
"\n", | |
"* **p2p0**: This is a point-to-point (or peer-to-peer) interface. It creates one connection between two devices, as opposed to a protocol like a broadcast, where one device might communicate a message to several other devices. The Airdrop service allows two Mac users to exchange files over bluetooth when in close proximity to each other. \n", | |
"\n", | |
"* **bridge0**: The Thunderbolt Bridge allows you to connect Macs together to transfer files and data back and forth directly using a Thunderbolt cable, without the need for using traditional file sharing methods like AFP, AirDrop, or wi-fi and ethernet networking.[[4]](http://osxdaily.com/2014/05/02/new-interface-detected-thunderbolt-bridge-mac/) " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####A couple of definitions:\n", | |
"\n", | |
"* **IPv4** or **IPv6**: These are Internet Protocol Version 4 and 6. The new IPv6 uses 128-bit addresses compared with the 32-bit addresses of IPv4. From Wikipedia \"On the Internet, data is transmitted in the form of network packets. IPv6 specifies a new packet format, designed to minimize packet header processing by routers.[1][9] Because the headers of IPv4 packets and IPv6 packets are significantly different, the two protocols are not interoperable. However, in most respects, IPv6 is an extension of IPv4.\" [[1]](http://en.wikipedia.org/wiki/IPv6) \n", | |
"\n", | |
"* **Generic Tunneling Interface**: Firstly, \"Tunnels are a mechanism used to send unsupported protocols across diverse networks.\" [[2]](http://www.enterprisenetworkingplanet.com/netsp/article.php/3624566/Networking-101-Understanding-Tunneling.htm) In general, a tunnel can package up protocols and send or receive them, even if the protocols are not natively supported by the network. The generic tunneling interface mentioned above allows you to send IPv6 packets over IPv4, or vice-versa. It is considered generic because it can be configured in four different ways. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"Image(\"http://www.nzmarine.com/media/directorylogos/MTU-logo.png\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"png": "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\n", | |
"prompt_number": 15, | |
"text": [ | |
"<IPython.core.display.Image at 0x109e09ed0>" | |
] | |
} | |
], | |
"prompt_number": 15 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####I noticed that the letters 'mtu' appear in every first line of `ifconfig`'s output, so let's grep the output for 'mtu' and compare the devices.\n", | |
"\n", | |
"####```grep``` is a command line utility which helps you search through text and match results. In our case, we are interested in the lines which contain the word 'mtu', so we use ```grep``` to filter the results." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": true, | |
"input": [ | |
"%%bash\n", | |
"ifconfig | grep mtu" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384\n", | |
"gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280\n", | |
"stf0: flags=0<> mtu 1280\n", | |
"en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078\n", | |
"en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500\n", | |
"p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304\n", | |
"bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n" | |
] | |
} | |
], | |
"prompt_number": 10 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"```\n", | |
"lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384\n", | |
"gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280\n", | |
"stf0: flags=0<> mtu 1280\n", | |
"en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078\n", | |
"en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500\n", | |
"p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304\n", | |
"bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####'MTU' stands for maximum transmission units, which is the largest size packet (in bytes) that can be sent (or passed onwards by a layer) in a packet or frame-based network. The Internet's Transmission Control Protocol (TCP) uses the MTU to determine themaximum size of each packet in any transmission. (Definition from [here](http://searchnetworking.techtarget.com/definition/maximum-transmission-unit))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Maybe a definition?\n", | |
"\n", | |
"* **Frame-based Network**: Frames are basically a way of organizing the data and packets that are being sent in a network. A frame is \"the unit of transmission in a link layer protocol, and consists of a link layer header followed by a packet. [[1]](http://en.wikipedia.org/wiki/Frame_(networking) Essentially, frames organize the information being sent and received into manageable chunks for the network to handle. " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Examining all of our different settings for mtu's gives us some clues as to the nature of the interfaces: \n", | |
"\n", | |
"* Several of the devices have mtu set at 1500. The standard mtu for ethernet is 1500 bytes.\n", | |
"* The loopback can transmit big packets because it doesn't interact with any NIC (network interface controller) or have any interaction with ethernet. \n", | |
"* The two tunneling interfaces are set to the same number, 1280... why?\n", | |
"* Firewire and the Airdrop can both accomodate slightly larger packets. " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Taking a closer look at each line...\n", | |
"`en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500`\n", | |
"####...reveals some flags set for the device which tell you how the device is configured and the services it supports.\n", | |
"\n", | |
"####Let's look at the flags themselves:\n", | |
"\n", | |
"\n", | |
"* **`UP`** - The interface is activated, ready to send or receive packets, and is accessible to the IP layer. \n", | |
"* **`LOOPBACK`** - The device is a loopback device. See above for definition of loopback. \n", | |
"* **`RUNNING`** - Resources have been allocated to the interface to allow it to send/receive packets. Drivers have been loaded. \n", | |
"* **`MULTICAST`** - \"A valid multicast address has been assigned to this interface. Listening on a multicast address is analogous to listening to a particular band of the radio dial. The packet is not addressed to a particular interface, instead, it is addressed to all interfaces listening on that multicast address.\" [[2]](http://docstore.mik.ua/orelly/networking_2ndEd/nfs/ch13_02.htm)\n", | |
"* **`POINTOPOINT`** - The device is a point-to-point device. \n", | |
"* **`SMART`** - This flag has now been deprecated and should be avoided. \n", | |
"* **`SIMPLEX`** - The interface is configured for simplex operation. \"In simplex operation, a network cable or communications channel can only send information in one direction; it's a \u201cone-way street\u201d. This may seem counter-intuitive: what's the point of communications that only travel in one direction? In fact, there are at least two different places where simplex operation is encountered in modern networking. The first is when two distinct channels are used for communication: one transmits from A to B and the other from B to A. This is surprisingly common, even though not always obvious. For example, most if not all fiber optic communication is simplex, using one strand to send data in each direction. But this may not be obvious if the pair of fiber strands are combined into one cable.\" [[3]](http://www.tcpipguide.com/free/t_SimplexFullDuplexandHalfDuplexOperation.htm)\n", | |
"* **`BROADCAST`** - This interface has a vaild broadcast address set up. This is useful for a subnet where all nodes can see all traffic.\n", | |
"* **`PROMISC`** - This stands for Promiscuous mode which receives and passes all packets through regardless of MAC address. In my case, the thunderbolt interface is set to promiscuous mode. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"Image('http://mnmortgageman.com/wp-content/uploads/2014/02/Options.jpg')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"jpeg": "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\nr3L3k6rQhxCm1pJSFkaVpPkZGNsa4xMvHoT6CXabzzFsKteY7kyfozioyUmfeTKfm/2RrZsIpZdb\nLdGgz4sTqI9Tu3SQ/SPwcGlcWuN1av3HX7uhQi/1XQqilsozSs5NThN46w/eWPIzFikwKnp356aV\n4l6pxeadmaujoIgvbSRGgmqzCqAwcex9R8xp8NBYajVZlBrjvpLuJ9BKQrHtbc8xz72oYGktOlYx\nNLdfR69aSYZB4rmSrTO1Lq6S58kODnWbFx2pWEUOvU6oOtoeiodJMxlZZJTSuCuHlzEiyUxpcJxG\nOe/JvZ/2F19nO6UNJlBhiYhRvi+lrb9pNXbq6FNidIiUhEZuXTIMGMmUklmthtCDVw7zSXEfV58+\nFYFQAAAGPXSC0GsHWq0pcG8J8i3fRE9c1csU20OxccDVl1Kk8S4GR/fga/FI6d0CrOqNY3TddFjN\noJJmSokKXcui281e0zor6PWhc7dVpsq5L1RTF5gPV5bRsKcLk8UZppsjx7O/PjjOMfP+U2V7JlWC\ngu2Pa9ec7o+FvevDUdgwPJ58aJLV2V/w7G9O9e7p1k98hz0mBEGqusdE00hpjIjP3Fd9QTtoVpQs\nrkPOK9Q17SM0JM/LJ9xc8SDAMnajFpUazQ3a7y3qajFsYiw+NXO17vPcUPSLW2NeNuOpvsqdZF80\nFZRrpoUxxMZCXD4odZ65fFCy48zx5lgzzcpMlZ8Mq1ija57F1La69C29KYuCY9FXU6SPVGu27Oy5\nM9s9ICz7ArbFYiXbS3Or7E2I0pTyH2T9Zs+qSv4H3HxFzJz964VVNqIYnfWRdCObtRb925dJ5xpt\nBiFOsMr04Kmmy7/WtDZ/alzUq87aod10N1b1IuCEzOp7i0mhRtPoJadyVYMjwY+mqab38TZLWzkR\nbLrS5wqeL3Ujma7LYuEXy0AAAAAAAAAAAAAAAAAAAAABj70lbBreoemkuk2+SHKlCkNz2Y5njrep\nyez4jHqoVljVqGLWQLNErU1n5ztaKRqBDrC4MmNNo8inOpcNhRG26SknlCiPw4ZSZe8hDJ2vY+zk\nOf1TXsks9DKTo7fhGdRdMShWtq2zKvi2Gl7fldWPlRglKLepS1GXX8j4qMjyZqPeY2NJjTmaJOUn\n4v19aTa0OUL4+TLym7/pJ5+PE2n17UPTHpP6K1tywripdZmLik8iB1pokRJaCU4lLjSySrKer3YN\n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\nTTPFEq4MYWrxKOR8i/PPj4eI4xlZ7R1denw5emT8n5uzedTycyGtaatToZ+b8vbuMXluLdWtxxan\nHHDNTjijyozPmZmOPOcrluq6TpqNRqWQ6jyVAAAUAAADkjAHbJClgBSwORQAAUyq1mlUOKqbV6hF\np0VP8q+sk5PwSXMz8iF+CmkndmxtVV4FqWZkSXetkIWqGtS6lL+StP7aqVy1BXBt5TS9nvSy3lwy\n9+0TDDcip6hf4i9TdK9upO8jddlPFCnJ7V0J67C6qJol0odTDQ5LeOz6Y/8Aye70dRJPwSxlZ+5S\nx0PDvZ7GzSrET7XKXs1eBC67LRXanKvRyU7dZNVtfg8ojqkyrzvSpzn1cXkRyS0R+OTV1ivtEwgy\nWp405SqvRoQjU2UMz9SIneTzQuhBoZSCQcihPVZxPrLlvOuZP3KVj7Bso8FpGfQ7dJgPxWpf9P5E\nr0vo66MUgk+haf24g08leitZ/wAIzG0kLNTGp1IYrqmV2ty9pesXTexISSTFtWiskXIksJL9wvo1\nE1FlVVSqJtC10cE0Gll/6KRUodjtK2T50Kl/+ykAeN6w7NkEaXrbpDhHzI2UgC1KlofpVVULTLsa\n3HTV3qitH96RbWFi60Q9pK9NSqaudc7aiaJ6sPVlnS6hM2BMajtRaxEp8cpEZ4i+cUl4kEpOT9lR\n4PuMjyOY5c5PzVXLiVWpbZzF+0ieJPsksYig5MiI5b7ed1L8i64l3WzNpLVbZrlMTS3i7Mt11LSS\nPvSreZbVF3kfEcOkw+oZJ7pWLnbrXOrMq4XMz0clixqxrZYdK3pYnSay8j+TgtGac/1jmxH1GY2d\nPkzWS60RqcfJLqYM2N00epb9BbUTULVO9Vkxp/pxOdbdPa1OdbceTx79/wA00n4mYlmH+z90ulc5\n3Qmanav6EerMr2R6s1vTpXsQkmh9F3pI6g7XLruT8Wae968ZC+O0+42mOqbP4qMTjD8gIotKta38\na9/mRSsyye/Url/Cnd5GXWhvQ8tnSK5IN5u1up1i5IDbiGFrMkMo65BtrwhBFzIz5mYmdBgkFI7P\nbdXethFqzFpaluatkQzOG5NWAAAAAAAAAAAAAAAW1eTaHbVuBt1BLbVAeJafLaeQCH5vNUoaoiX4\ni/XiqWwv3tmaT+4QipbbQc7rG20GcP4LNOwtTU4x/DGD/wBwQ3GT/Mf0p4Kb3Jf+XJ0p4KeDpW2/\n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\nAAAAAAAAAAB//9k=\n", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 16, | |
"text": [ | |
"<IPython.core.display.Image at 0x1085b8bd0>" | |
] | |
} | |
], | |
"prompt_number": 16 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Now let's take a look at the options available for each interface:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": true, | |
"input": [ | |
"%%bash\n", | |
"ifconfig | grep options" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"\toptions=3<RXCSUM,TXCSUM>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\toptions=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\toptions=60<TSO4,TSO6>\n", | |
"\toptions=63<RXCSUM,TXCSUM,TSO4,TSO6>\n", | |
"\tnd6 options=1<PERFORMNUD>\n" | |
] | |
} | |
], | |
"prompt_number": 11 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"```\n", | |
" options=3<RXCSUM,TXCSUM>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\toptions=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\toptions=60<TSO4,TSO6>\n", | |
"\toptions=63<RXCSUM,TXCSUM,TSO4,TSO6>\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####We see two different types of options: \"options\" and \"nd6 options\":\n", | |
"\n", | |
"####Options:\n", | |
"* `RXCSUM` - A checksum is used to verify data and detect errors that may have been introduced into data from transmission or storage. Some drivers and interfaces can assume the checksum duties. RXCKSUM is an offloading of checksum duties on the receiving end \n", | |
"* `TXCSUM` - The same as above, but for transmitting instead or recieving. \n", | |
"* `VLAN_HWTAGGING` - (from the man pages) If the driver offers user-configurable VLAN support, enable reception of extended frames or tag processing in hardware, respectively. Note that this must be issued on a physical interface associated with vlan(4), not on a vlan(4) interface itself.\n", | |
"* `AV` - If supported by the driver, enable 802.1 AVB on the interface. AVB stands for Audio Video Bridging and is a standard to allow for precise synchronization of audio and video. \n", | |
"* `TSO4` - TSO stands for TCP Segmentation Offloading, which basically allows the NIC to unburden the host computer's CPU by performing some of the segmentation necessary to push packets through the TCP/IP protocol. TSO4 here simply refers to the segmentation of IPv4 packets. \n", | |
"* `TSO6` - This is the same as TSO4, but used for IPv6 packets. \n", | |
"\n", | |
"####nd6 Options:\n", | |
"\n", | |
"* `PERFORMNUD` - nd6 is the neighbor discovery protocol used to find nodes, auto configure link layer addresses, and perform tests such as NUD, which stands for Network Unreachability Detection. It is a part of neighbor detection which determines that a neighbor is no longer reachable on the link." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Whew....Let's examine the remainder of the configuration on my Wi-Fi (en1) interface:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": true, | |
"input": [ | |
"%%bash\n", | |
"ifconfig en1" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\tether 68:a8:6d:24:58:cc \n", | |
"\tinet6 fe80::6aa8:6dff:fe24:58cc%en1 prefixlen 64 scopeid 0x5 \n", | |
"\tinet 172.16.231.115 netmask 0xfffff800 broadcast 172.16.231.255\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect\n", | |
"\tstatus: active\n" | |
] | |
} | |
], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"```\n", | |
"en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n", | |
"\tether 68:a8:6d:24:58:cc \n", | |
"\tinet6 fe80::6aa8:6dff:fe24:58cc%en1 prefixlen 64 scopeid 0x5 \n", | |
"\tinet 10.0.1.3 netmask 0xffffff00 broadcast 10.0.1.255\n", | |
"\tnd6 options=1<PERFORMNUD>\n", | |
"\tmedia: autoselect\n", | |
"\tstatus: active\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"####Here's what's left:\n", | |
"\n", | |
"* `ether 68:a8:6d:24:58:cc` - This is the MAC address for the Wi-Fi interface. The `ether` parameter is another name for `lladdr` or 'link local address'.\n", | |
"* `inet6 fe80::6aa8:6dff:fe24:58cc%en1 prefixlen 64 scopeid 0x5` - This is the IPv6 address configured for this interface. `prefixlen 64` means 64 bits are reserved for subdividing networks into sub-networks. The `scopeid 0x5` part of this (from [Wikipedia](http://en.wikipedia.org/wiki/IPv6_address#IPv6_address_scopes)) means \"Link-local and site-local multicast scopes span the same topological regions as the corresponding unicast scopes.\" Yeah, I am gonna need to investigate that one further.\n", | |
"* `inet 10.0.1.3 netmask 0xffffff00 broadcast 10.0.1.255` - This is the IPv4 address including a netmask and a broadcast address. \n", | |
"* `media: autoselect` - Some interfaces allow a manual configuration of a media type such as a 10baseT/UTP setting, which would indicate a twisted pair. Autoselect chooses the best fit automatically for the media used. \n", | |
"* `status: active` - This interface is currently up, running and activated. " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"###References:\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<http://en.wikipedia.org/wiki/IPv6_address#IPv6_address_scopes>\n", | |
"\n", | |
"<http://www.tcpipguide.com/free/t_SimplexFullDuplexandHalfDuplexOperation.htm>\n", | |
"\n", | |
"<http://docstore.mik.ua/orelly/networking_2ndEd/nfs/ch13_02.htm>\n", | |
"\n", | |
"<http://searchnetworking.techtarget.com/definition/maximum-transmission-unit>\n", | |
"\n", | |
"<http://osxdaily.com/2014/05/02/new-interface-detected-thunderbolt-bridge-mac/>\n", | |
"\n", | |
"And of course the man pages for ifconfig(8), networksetup(8). \n" | |
] | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment