das heißt ich flashe dann quasi via rx/tx?
Richtig, der Bootloader "horcht" nach einem Reset auf der RX Leitung und wartet dann darauf, dass Daten gesendet werden, wenn dann innerhalb eines bestimmten Zeitraumes nichts kommt, springt der Controller zum Hauptprogramm.
Avrdude (das Programm welches die Arduino IDE benutzt, um zu flashen) sendet dem Bootloader die Daten über die Serielle Schnittstelle in dem Format wie es der Bootloader erwartet und verarbeiten kann.

Auch sendet der Bootloader Informationen an avrdude, nämlich auf welchem Chip er läuft, welches Protokoll er für den Datenaustausch erwartet (im Fall von Arduino das STK500v2 Protokoll, STK500 ist ein Entwicklungsboard von Atmel) etc.