1.a
I Mac OS X:
Under systeminställningar -> nätverk -> Airport
Terminalen:
→ echo "puts %x{ifconfig}.match(/en0:.+?inet ([^\s+]+)/m).to_a.last" | ruby
# => 46.239.242.31
→ hostname
anooa.olf.sgsnet.se
1.b
→ traceroute kth.se
traceroute to kth.se (130.237.32.143), 64 hops max, 52 byte packets
1 olf3-gw.sgsnet.se (193.11.220.1) 0.878 ms 0.270 ms 0.216 ms
2 * 193.11.225.65 (193.11.225.65) 3.687 ms 3.053 ms
3 bb1.bb-rot.sgsnet.se (193.11.230.11) 2.821 ms 1.002 ms 0.912 ms
4 p001.br-rot-1.gsix.se (46.239.64.9) 0.695 ms 0.683 ms 0.744 ms
5 i001.br-kas-1.gsix.se (46.239.64.6) 0.914 ms 0.873 ms 0.824 ms
6 t1tug-ge-7-2-0.sunet.se (130.242.82.233) 8.965 ms 8.965 ms 8.949 ms
7 m1tug-ae0-v1.sunet.se (130.242.83.42) 9.028 ms 9.007 ms 8.890 ms
8 m1fre-ae0-v1.sunet.se (130.242.83.50) 9.467 ms 9.235 ms 9.257 ms
9 m1fre-ae0-2001.sunet.se (193.11.0.194) 9.346 ms 9.434 ms 9.452 ms
10 cn6-br1g-p2p.gw.kth.se (130.237.0.2) 12.864 ms 12.627 ms 12.946 ms
11 vss1-cn6-p2p.gw.kth.se (130.237.211.117) 36.401 ms 31.949 ms 40.428 ms
12 lvs-vip-6.sys.kth.se (130.237.32.143) 9.533 ms 9.501 ms 9.655 ms
1.c
Själva tekniken är uppbyggd runt lagermodellen, så det gör det naturligt att studera den på samma sätt. Lagermodellen låter oss isolera olika delar av funktionaliteten och studera den separat, utan att behöva bry oss om över- eller underliggande tekniker. Modulariteten gör det enkelt att byta ut olika delar av stacken enligt behov.
Jag tolkar det som att Internet model är det samma som OSI-modellen.
- Applikationslagret Närmast användaren, interagerar med användarens applikation Exempel på protokoll: HTTP, SMTP
- Presentation Bearbetning av information, sköter t.ex. kryptering och dylikt
- Session Sköter om etablering av en logisk kommunikationssession, t.ex. genom sockets
- Transport Differentierar mellan olika sorters kommunikation till samma host m.hj.a. portar flödeskontroll, undvika stockning, ibland ta hand om kvaliteten på hela länken från host till host (t.ex. TCP som skickar tappade paket på nytt) Exempel på protokoll: TCP, UDP
- Nätverk Transporterar data från en host till en annan, potentiellt genom olika nätverk, här sker routing, t.ex. IP
- Datalänk Arbitrerar tillgång till det fysiska mediet, kommunikation mellan fysiska noder, transport inom det lokala nätverket, fysiska MAC-adresser, felkorrigering
- Fysiskt Hårdvara, elektriska och fysiska standarder, bitströmmar
A protocol operates between peer layers in two entities
Syftar på att varje protokoll "pratar" med motsvarande protokoll på den andra hosten, utan att bry sig om över- eller underliggande lager. Exempelvis: en applikation på en host beter sig som om den skulle kommunicera direkt med applikationen på den andra hosten.
2.a
Telnet är främst ett protokoll som används vid fjärrinlogging.
→ telnet [host] [port]
2.b
Telnet använder telnet-protokollet, men använder TCP för att skicka paket. Port 23 är default.
2.c
→ telnet kth.se 80
Trying 130.237.32.143...
Connected to kth.se.
Escape character is '^]'.
HEAD / HTTP/1.0
Host: kth.se
Connection: close
User-agent: Lynx
Accept-language: sv
HTTP/1.1 301 Moved Permanently
Date: Sun, 08 May 2011 14:50:54 GMT
Server: Apache/2.2.3 (Red Hat)
Location: http://www.kth.se/
Connection: close
Content-Type: text/html; charset=iso-8859-1
- KTH använder Apache/2.2.3.
- SAS använder Microsoft-IIS/6.0.
Båda siterna ger 301, vilket beror på att jag utelämnade subdomänen www.
2.d
Host-prefixet måste skickas med. För att göra de möjligt att använda virtuella hostar.
2.e
→ curl -c cookies.txt www.sas.se >> /dev/null && cat cookies.txt
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
www.sas.se FALSE / FALSE 0 ARPT KRLLLLSxg1H3L3u3VCKOYW
Kakan ARPT innehållande värdet KRLLLLSxg1H3L3u3VCKOYW ör satt för domänen www.sas.se.
3.a
Den används för att lista ut vilka DNS-servrar som namnupplösningen sker genom vid en request.
→ nslookup google.com
Server: 46.239.89.22
Address: 46.239.89.22#53
Non-authoritative answer:
Name: google.com
Address: 209.85.148.103
Name: google.com
Address: 209.85.148.104
Name: google.com
Address: 209.85.148.105
Name: google.com
Address: 209.85.148.106
Name: google.com
Address: 209.85.148.147
Name: google.com
Address: 209.85.148.99
Används vid lastbalansering och för att öka tillgängligheten.
3.b
- HTTP: 80
- Telnet: 23
- IMAP: 143
- DNS: 53
IANA ansvarar bl.a för världens root-serverar, fördelningen av IP-nummer och standardfördelning av portar.
Java
import java.io.*;
import java.net.*;
class Webber {
public Webber() {
}
public static String get(String url) {
Socket s = null;
String response = "";
// Input url can contain page URI, need to split to get host name
String[] splitUrl = url.split("/", 2);
String host = splitUrl[0];
String page = "/";
// By default, we fetch root (/), but if a page address is present we use it instead
if (splitUrl.length > 1) page = "/" + splitUrl[1];
// Establish a socket
try {
s = new Socket(host, 80);
} catch (Exception e) {
return "Failed to establish socket: " + e.getMessage();
}
try {
DataOutputStream output = new DataOutputStream(s.getOutputStream());
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String request = "GET " + page + " HTTP/1.0\r\n\r\n";
// Send the request and get the first line
output.writeBytes(request);
response = input.readLine();
String code = response.split(" ")[1];
// We treat response codes below 300 as successes and return errors for all others
if (Integer.valueOf(code) < 300) {
while(input.ready()) {
response += input.readLine();
}
return "Received " + response.length() + " characters.";
} else {
return "Error: " + response;
}
} catch (Exception e) {
// Sloppy code goes here
}
return response;
}
public static void main(String[] args) {
System.out.println(Webber.get(args[0]));
}
}
Ruby
require "socket"
Addrinfo.tcp("radiofy.se", 80).connect do |s|
s.print "GET / HTTP/1.0\r\nHost: radiofy.se\r\n\r\n"
data = s.read
puts $1 if data =~ /Content-Length: (\d+)/
puts $1 if data =~ /(\d{3})/
s.close
end
Timeouten beräknas på basis av tre faktorer: rtt på nuvarande sample, en estimerad rtt som bygger på ett viktat medelvärde av rtt på tidigare samples samt en koefficient vid namn DevRTT som uttrycker hur stor variationen är. Vi vill att timeouten ska vara stor nog för att tillåta att paket fördröjs lite, men liten nog så att vi märker när paket har gått förlorade. Vi vill dessutom ha längre timeout när rtt-tiderna fluktuerar, samt kortare när de är mer stabila. Detta får vi genom att uttrycka timeout som den estimerade rtt:n plus fyra gånger variansvärdet.