FAQ - Hjemmeeksamen 1

Q: Skal flytkontrollsmekanismen utføres på hver link i nettet, eller kun på endepunktene i nettet tilvarende TCP?

A: En SKAL utføre flytkontroll på hver eneste link man besøker i nettet. Har man to mellomnoder mellom avsender og mottaker, så skal alle linkene i dette nettet som trafikkeren går gjennom ha flytkontrollsmekanismer på hver link. Dette vil tilsvare:

A->B->C->D

 

A vil gjerne sende til Node D. For at dette skal skje, så må A sende til B pga A ikke er fysisk koblet til D. Deretter B ACKe data til A fordi nå skal B "love" A at den skal håndtere pakkene som har kommet og floode videre til C dersom B ikke er fysisk koblet til D.

Q: Hvis jeg ønsker å implementere "backwards learning", da kan jeg vel ikke bruke l2_send?

A: Nei, dette er korrekt. Ved å bruke l2_send på videresending så vil en måtte strippe headeren og legge på ny header i l2_send på  linken en skal sende ut på. Dette vil hindre at man lærer noen andre noder enn sine naboer, siden en erstatter src_mac for hvert steg.

Q:  Bør jeg gjøre om obligen min til å passe prekoden?

A: Dette gjør du som du ønsker, det viktigste er å ha full kontroll over din egen kode, vite hvordan koden fungerer og implementere utfra spesifikasjonen i oppgaveteksten i forhold til antall MAC-adresser etc.

Q: Jeg forstår ikke helt dette med at programmet skal startes opp med flere MAC-adresser, skal nodene vite om andre noder sine adresser ved oppstart?

A: Du skal starte opp hver node med de MAC-adressene den noden har, dvs antall interfaces de har. Oppkoblingsmekanismen i prekoden sørger for å koble opp til en av MAC-adressene hos mottaker, og den vil svare med hvilken MAC-adresse den har blitt koblet til på. Dette kan dere endre om dere ønsker, men det bør i såfall dokumenteres. Det er f.eks ikke lagt til feilhåndtering om man prøver å koble opp mot flere interfaces enn noden har. Så dette må vites på forhånd, med mindre man implementerer ARP.

Det er et annet alternativ hvor du faktisk bare setter opp alle tilgjengelig interface opp til 1023 når du starter programmet ditt. Dvs du har 2 alternativer, enten bare skriv :

main 1111 1 2 3...n antall noder

ELLER

main 1111 1 og sett opp plass fra 0 (utenom 1) til 1023

slik at du ikke trenger å måtte skrive n antall interfaces

Q: Skal en videresende ACK fra node til node?

A: Nei, dette vil være ende-til-ende kommunikasjon som en har i transportlaget. En skal ha flytkontrollen på linklaget, dvs link til link.

Q: Hvorfor får jeg segmentation fault på l4_recv? 

A: Dette har mest sannsynligvis noe med at du har satt portnummeret for høyt i forhold til definisjonen av MAX_PORTS. Denne definisjonen kan du sette til en høyere verdi, f.eks 65536 om du ønsker. Noen vil kanskje stusse på at verdien på en slik port bør være høyere enn 1024, men dette skal simulere en TSAP port, altså ikke en socket port som normalt bør settes til over 1024 på brukernes applikasjoner.