Computer-to-Computer Communication
This is an ongoing brain-dump/exploration of communication between/among computers. It’s motivated in part by wanting to setup control systems for household and industrial system. For instance, what if we would like to:
- Gather moisture data from a moisture sensor?
- Control the location of a solar panel?
- Titrate down the concentration of an aquarium nutrient?
- Link together several single board computers for extra processing power?
- Send an SMS message when a moisture detector gets wet?
What bus or network connection should we use? What protocol should we use over that connection? What serialization of commands/data/objects should we use?
https://en.wikipedia.org/wiki/Category:Computer buses
https://en.wikipedia.org/wiki/Telecommunicationsnetwork
https://en.wikipedia.org/wiki/List of device bit rates#Computer_buses List of device bit rates.
Brainstorm: Hierarchies
- Peer-to-peer
- Client-Server
Brainstorm: Connection related terminology
- Bus, moves data between components,
- Network, moves data between components,
- Differences between bus and network.
- power is provided by a bus to the connected component
- e.g. the USB port powers the mouse whereas the Wireless card does not power the Internet
- System bus, connects CPU to RAM (the computer to the memory)
- More Internal
- <---System Bus---
- Front-Side Bus---
- Expansion Bus---
- Peripheral Bus---> More External
Brainstorm: lines (in the sand) of distinction among communication methods
- serial vs parallel
- computer-to-computer vs computer-to-device
- internal vs external
- internal connects all the parts inside a computer, CPU to RAM to Motherboard. Quick, independent
- extenal connects parts outside, printer, mouse, keyboard… (hard drive? internet?)
- system vs front-side vs expansion vs peripheral
Brainstorm: What are the levels of CPU-to-CPU communication?
- Application
- System
- Physical
- Human Understanding
- English
- Binary
- Electronic
Brainstorm: How can we physically communicate from one computer to another?
- USB – connect peripherals, lower performances than SATA, use where SATA isn’t necessary, e.g. in a mouse
- Ethernet.
- WiFi.
- Cable (Coaxial Cable)
- HDMi
- DisplayPort
- Light
- Electricity
- BlueTooth
- Radio
- FireWire
- SATA – connect hard drives to the system bus
- Expansion Cards – connect directly to the system bus
- PCI
- SCSI
- Serial ATA
Brainstorm: Use cases
- CPU to Hard drives, tape, DVD, i.e. persistence, I/O
- CPU to RAM
- CPU to CPU
Brainstorm: What can use to communicate over those physical mediums?
- HTTP
- FTP
- Plain old binary pulses.
Brainstorm: What languages can we use to store more complex stuff?
- HTML/CSS/JavaScript – the representations of the web.
- XML – the representations of hierarchical data.
- JSON – more hierarchical data.
- Binary
- ASCII
- Unicode
Audio/Visual
- DVI
- VGA
- HTMi
- DisplayPort
Emerging Questions
- What differentiates network communication vs bus communication? When should we use each?
- What differentiates internal vs external buses? When should we use each?
- How does a GPOI pin differ from a bus?
- What bus/network choices are optimal (and/or practical) for use cases:
- timing sensitive communication?
- client-server?
- peer-to-peer?
- control systems?
- high throughput?
Some broad, sweeping generalizations that are emerging from my reading, though without citations:
- USB is for connecting peripheral devices to a computer (e.g. mouse, external HDD, keyboard)
- The practical differentiators among internal bus, external bus, and network communication are blurring.
- A pin is a lower level then a bus; a pin is a single on/off that communicates with a CPU; we connect to pins with raw wire.
- A port has a different meaning in hardware than is does in software. For instance, USB is the overarching communication strategy, and it involves both a USB port and a USB cable.
If you expected to find answer, you came to the wrong blog.