This commit is contained in:
parent
8bb6f13d3c
commit
1d0689f177
2 changed files with 269 additions and 0 deletions
59
src/articles/computer_networking.md
Normal file
59
src/articles/computer_networking.md
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
This is a work in progress article I'm using to build up my understanding of computer networking.
|
||||||
|
|
||||||
|
|
||||||
|
# Standards #
|
||||||
|
|
||||||
|
## [OSI model](https://en.wikipedia.org/wiki/OSI_model) ##
|
||||||
|
|
||||||
|
The Open Systems Interconnection model is a basis for standards development in systems interconnection.
|
||||||
|
|
||||||
|
### Physical Layer ###
|
||||||
|
|
||||||
|
Converts digital bits into electrical, radio or optical signals
|
||||||
|
|
||||||
|
* NIC: Network Interface Controller
|
||||||
|
* Ethernet hub
|
||||||
|
* Network switch
|
||||||
|
* Physical transmission media
|
||||||
|
|
||||||
|
Standards at this layer include Bluetooth, Ethernet, USB
|
||||||
|
|
||||||
|
### Data link layer ###
|
||||||
|
|
||||||
|
* Medium Access Control Address (MAC) https://en.wikipedia.org/wiki/MAC_address
|
||||||
|
* Logical link control (LLC)
|
||||||
|
|
||||||
|
### Others ###
|
||||||
|
|
||||||
|
* network
|
||||||
|
* transport
|
||||||
|
* session
|
||||||
|
* presentation
|
||||||
|
* application
|
||||||
|
|
||||||
|
|
||||||
|
## [IEEE 802](https://en.wikipedia.org/wiki/IEEE_802) ##
|
||||||
|
|
||||||
|
Family of standards for local area networks (LANs) and other types.
|
||||||
|
|
||||||
|
# Terms #
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Internet Protocol Suite #
|
||||||
|
|
||||||
|
* RFC 1122
|
||||||
|
* RFC 1123
|
||||||
|
|
||||||
|
|
||||||
|
## Link Layer ##
|
||||||
|
|
||||||
|
* Address Resolution Procotol (ARP) https://en.wikipedia.org/wiki/Address_Resolution_Protocol
|
||||||
|
|
||||||
|
|
||||||
|
## Transport Layer ##
|
||||||
|
|
||||||
|
* TCP
|
||||||
|
* UDP
|
||||||
|
* QUIC
|
||||||
|
|
210
src/articles/linux_internals.md
Normal file
210
src/articles/linux_internals.md
Normal file
|
@ -0,0 +1,210 @@
|
||||||
|
This article is my attempt to explain Linux internals to myself and act as a structured way of keeping notes.
|
||||||
|
|
||||||
|
Linux is an operating system kernel - which is distinct from the user-space where user applications will run. The kernel directly interfaces with hardware via its firmware and associated drivers. It also manages resources for sharing by user applications. Other open-source kernels that may be of interest are those based on BSD and the GNU Hurd microkernel.
|
||||||
|
|
||||||
|
The [Linux kernel](https://www.kernel.org/doc/html/v4.13/index.html) can be interacted with or controlled from user space by means of a File based API or a C API which aim to be POSIX compatible.
|
||||||
|
|
||||||
|
The types of hardware interfaced in the kernel include:
|
||||||
|
|
||||||
|
* graphics
|
||||||
|
* audio
|
||||||
|
* memory
|
||||||
|
* cpu
|
||||||
|
* gpu
|
||||||
|
* network
|
||||||
|
* keyboard and mouse
|
||||||
|
* storage and i/o peripherals
|
||||||
|
|
||||||
|
with the kernel handling control messages including power messages for associated devices.
|
||||||
|
|
||||||
|
As part of its resource management the kernel includes:
|
||||||
|
|
||||||
|
* filesystems and virtual file management
|
||||||
|
* memory management functionality
|
||||||
|
* process scheduling and interprocess communication
|
||||||
|
* networking
|
||||||
|
* security
|
||||||
|
* media support
|
||||||
|
|
||||||
|
In the user-space of operating systems that use the Linux kernel (will controversially refer to as Linux distros for brevity) some foundational elements and applications are:
|
||||||
|
|
||||||
|
* an init system - often `systemd` and previously collections of 'sysvinit scripts' or niche alternatives like `shepherd`.
|
||||||
|
* system daemons for administrative services
|
||||||
|
* a graphics system - oten `wayland` now replacing `x org`
|
||||||
|
* an audo or multimedia system - `pipewire` is becoming a common replacement for `pulseaudio` and others
|
||||||
|
* a terminal emulator and shell
|
||||||
|
* network interface management, such as ethernet or wifi
|
||||||
|
* a package manager
|
||||||
|
* a bootloader
|
||||||
|
|
||||||
|
|
||||||
|
# APIs #
|
||||||
|
|
||||||
|
https://en.wikipedia.org/wiki/Linux_kernel_interfaces#Linux_API
|
||||||
|
|
||||||
|
The kernel tries to follow the [Portable Operating System Interface (POSIX)](https://en.wikipedia.org/wiki/POSIX) and [Single Unix Specification](https://en.wikipedia.org/wiki/Single_UNIX_Specification) where applicable.
|
||||||
|
|
||||||
|
## File Based ##
|
||||||
|
|
||||||
|
Device drivers are interacted with in directories:
|
||||||
|
|
||||||
|
* `/dev` https://en.wikipedia.org/wiki/Device_file#DEVFS
|
||||||
|
* `/sys`
|
||||||
|
|
||||||
|
Processes are interacted with in:
|
||||||
|
|
||||||
|
* `/proc`
|
||||||
|
* `/proc/sys`
|
||||||
|
|
||||||
|
## System calls and similar ##
|
||||||
|
|
||||||
|
https://en.wikipedia.org/wiki/System_call
|
||||||
|
|
||||||
|
`ioctl` (input/output control) is a system call for device specific io operations.
|
||||||
|
|
||||||
|
* `sysctl` (system control)
|
||||||
|
* `ioctl` (io control)
|
||||||
|
* `fcntl` (file control)
|
||||||
|
|
||||||
|
Other communication mechanisms include [netlink](https://en.wikipedia.org/wiki/Netlink) sockets which allow IPC between both kernel and userspace programs. It is designed to be a more flexible successor to `ioctl`.
|
||||||
|
|
||||||
|
# User Space #
|
||||||
|
|
||||||
|
## Init Systems ##
|
||||||
|
|
||||||
|
### Systemd ###
|
||||||
|
|
||||||
|
Important utilities:
|
||||||
|
|
||||||
|
* `systemctl`
|
||||||
|
* `journalctl`
|
||||||
|
* `notify`
|
||||||
|
* `loginctl`
|
||||||
|
* `systemd-boot`
|
||||||
|
|
||||||
|
Important daemons:
|
||||||
|
|
||||||
|
* `systemd`
|
||||||
|
* `journald`
|
||||||
|
* `resolved`
|
||||||
|
* `networkd`
|
||||||
|
* `logind`
|
||||||
|
* `user-session`
|
||||||
|
* `udevd`
|
||||||
|
|
||||||
|
Important libraries:
|
||||||
|
|
||||||
|
* `libnotify`
|
||||||
|
* `libudev`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Devices ##
|
||||||
|
|
||||||
|
Devices are managed in user space with the `udev` utility - which has the following parts:
|
||||||
|
|
||||||
|
* libudev which can be used as a library for device info
|
||||||
|
* udevd daemon for managing the `/dev` virtual file hierarchy
|
||||||
|
* the `udevadm` command line utility for admin and diagnostics
|
||||||
|
|
||||||
|
|
||||||
|
## Window management and device input events ##
|
||||||
|
|
||||||
|
Wayland and X are the two most common display servers on Linux systems. They both follow a client-server approach, where the latter in Wayland can be part of the compositor.
|
||||||
|
|
||||||
|
Display servers can react to device input events via the `libinput` library, which in turn uses `libevdev` to handle evdev `ioctls` from the kernel.
|
||||||
|
|
||||||
|
## Network ##
|
||||||
|
|
||||||
|
`iptables` allows configuration of IP packet filter ruls in the Linux kernel firewal, which are implemented as netfiler modules.
|
||||||
|
|
||||||
|
[avahi](https://en.wikipedia.org/wiki/Avahi_(software)) is a zero-configuration networking implementation (allows network service use by freshly networked computers or peripherals) including multicast DNS and DNS service discovery. Apples' Bonjour and Systemd's `systemd-resolved` are other implementations.
|
||||||
|
|
||||||
|
The Desktop-Bus (DBus) is a user space middleware allowing communication between multiple processes (e.g. IPC).
|
||||||
|
|
||||||
|
## Other ##
|
||||||
|
|
||||||
|
* avahi
|
||||||
|
* dbus
|
||||||
|
* udisks
|
||||||
|
* cgroups
|
||||||
|
* autofs
|
||||||
|
* kdbus
|
||||||
|
* Plokit (Policy Kit) https://en.wikipedia.org/wiki/Polkit
|
||||||
|
* Pluggable Authentication Module (PAM) https://en.wikipedia.org/wiki/Pluggable_Authentication_Module
|
||||||
|
* Name Service Switch (NSS) https://en.wikipedia.org/wiki/Name_Service_Switch
|
||||||
|
* procfs https://en.wikipedia.org/wiki/Procfs
|
||||||
|
* sysfs https://en.wikipedia.org/wiki/Sysfs
|
||||||
|
|
||||||
|
# Kernel Space #
|
||||||
|
|
||||||
|
|
||||||
|
## Input events ##
|
||||||
|
|
||||||
|
* evdev
|
||||||
|
* `/dev/input`
|
||||||
|
|
||||||
|
## Filesystems ##
|
||||||
|
|
||||||
|
* ext4
|
||||||
|
* btrfs
|
||||||
|
* xfs
|
||||||
|
* jfs
|
||||||
|
* fat32
|
||||||
|
|
||||||
|
* FUSE
|
||||||
|
|
||||||
|
## Storage ##
|
||||||
|
|
||||||
|
* SCSI
|
||||||
|
* libATA
|
||||||
|
|
||||||
|
## Virtualization ##
|
||||||
|
|
||||||
|
* KVM
|
||||||
|
* Xen
|
||||||
|
|
||||||
|
## Process Management ##
|
||||||
|
|
||||||
|
* `clone(2)` and `clone3(2)`
|
||||||
|
* `futex(7)` and `futex(2)`
|
||||||
|
* Completely Fair Scheduler
|
||||||
|
* https://en.wikipedia.org/wiki/Earliest_eligible_virtual_deadline_first_scheduling
|
||||||
|
* Native Posix Thread Library (NPTL) is kernel side of pthreads
|
||||||
|
|
||||||
|
## Security ##
|
||||||
|
|
||||||
|
* Linux Security Modules
|
||||||
|
* SELinux
|
||||||
|
* AppArmor
|
||||||
|
* POSIX ACLs
|
||||||
|
|
||||||
|
## Memory ##
|
||||||
|
|
||||||
|
* DMA buffers
|
||||||
|
|
||||||
|
## Audio ##
|
||||||
|
|
||||||
|
* Advanced Linux Sound Architecture (ALSA)
|
||||||
|
|
||||||
|
|
||||||
|
## Graphics ##
|
||||||
|
|
||||||
|
* Direct Rendering Manager (DRM)
|
||||||
|
* Kernel Mode Setting (KMS)
|
||||||
|
|
||||||
|
|
||||||
|
## Network ##
|
||||||
|
|
||||||
|
* New API
|
||||||
|
* mac80211
|
||||||
|
* [Netfiler](https://en.wikipedia.org/wiki/Netfilter)
|
||||||
|
|
||||||
|
|
||||||
|
## Power and Control ##
|
||||||
|
|
||||||
|
* ACPI https://en.wikipedia.org/wiki/ACPI
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue