Re: Three-Way-Handshake in FreeBSD

From: Dominik Brettnacher <dominik(at)brettnacher.org>
Date: Thu, 26 Mar 2009 11:29:22 +0100 (CET)

On Thu, 26 Mar 2009, Christian Blome wrote:

> Sehr geehrte Damen und Herren,
> ich schreibe momentan an einer Arbeit über die Implementierung des
> Transmission Control Protocol innerhalb von drei BSD Ablegern.
> Ich betrachte hauptsächlich die Implementierung des TCP-Headers und des
> Three-Way-Handshakes. Die TCP-Headerstruktur ist in der Datei
> "/src/sys/netinet/tcp.h" definiert. Mein Problem ist die Implementierung des
> Three-Way-Handshakes die ich in der Datei "/src/sys/netinet/tcp_output.c"
> vermute, allerdings konnte ich die genaue Stelle des Handshakes nicht finden.
> Es wäre nett wenn Sie mir sagen könnten wo genau der Handshake stattfindet.

Hallo Christian,

der Three-Way-Handshake wird über die TCP-Finite-State-Machine
implementiert. Die Zustandsänderungen werden durch eingehende und
ausgehende Pakete ausgelöst, entsprechend ist tcp_output.c schonmal nicht
schlecht. Die "andere Seite" findet man in tcp_input.c.

Wenn man bedenkt, dass hier auf einem vergleichsweise niedrigen
Abstraktionslevel gearbeitet wird und sehr viele "Randfälle" abgedeckt
werden müssen, ist der Code überraschend gut verständlich.

Im Allgemeinen findet man alle interessanten Stellen, indem man den
Quellcode nach den verschiedenen TCP-Zuständen durchsucht. Die
entsprechenden Konstanten sind in tcp_fsm.h zu finden. Ein Blick in
tcp_usrreq.c ist auch lohnenswert.

-- 
Gruß,
Dominik
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 26 Mar 2009 - 11:29:27 CET

search this site