TCP/IP netværk Henrik Størner SSLUG
TCP og IP og ... ”TCP/IP” er en kombinations-protokol Lagdelt protokol – TCP og IP Andre: ICMP, UDP, GRE, ESP m.fl. Relaterede: ARP, PPP
Lag i netværket – OSI model Fysisk lag: 10/100BaseT, telefon, fiber ... Datalink: Ethernet, PPP, ATM ... Netværks-lag: IPv4 eller IPv6 Transport/Sessionslag: TCP, UDP
IP er grundlaget IP = ”Internet Protocol” Bære-protokol for de øvrige protokoller på Internet – man sender ikke ”rå IP” Nuværende versioner: 4 og 6 Tidligere versioner fandtes, men er ikke længere i brug
Adressering IP-adresse – 32 bit tal (4 bytes) Skal være unik på et netværk ! Som regel er een IP-adresse knyttet til eet system (computer) Skrives ofte i ”dotted-quad”:130.228.2.150 Alternativt: 2195980950
Nogle adresser er specielle 127.*.*.* : Lokale system, localhost 255.255.255.255 : Broadcast 224.*.*.*: Multicast adresse ”Interne” IP adresser - 192.168.*.* - 172.16-31.*.* - 10.*.*.*
IP netværk En IP adresse hører til et IP netværk Netmasken afgør størrelsen af nettet Netmasken måles i bits: Det er det antal bit i IP adressen, som er fælles for alle systemer på netværket. Typisk 24, 16 eller 8 bit – men kan være alt fra 1-32
Netværks- og broadcast adresse Netværks-adressen er den ”mindste” adresse på IP-netværket Broadcast-adressen er den ”største” Beregnes ud fra en IP-adresse og netmasken
Eksempel: 130.228.2.150/24 IP-adressen 130.228.2.150, 24 bit netmaske Netværks-adressen er da 10000010 11100100 00000010 10010110 AND 11111111 11111111 11111111 00000000 10000010 11100100 00000010 00000000 (130.228.2.0) Broadcast-adressen er da 10000010 11100100 00000010 00000000 OR 00000000 00000000 00000000 11111111 10000010 11100100 00000010 11111111 (130.228.2.255)
Netmasken kan være ”skæv” Eksempel: Det reserverede netværk med 12-bit netmaske 172.17.10.1/12 Netværks-adresse er 172.16.12.0 Broadcast bliver 172.31.255.255 !
IP-adresser i Linux Tildeles med ”ifconfig” eller ”ip” programmet Netværks-IP og broadcast kan udregnes med ”ipcalc” Et netkort kan have flere adresser - aliaser
Routing Foregår på IP-laget Betyder blot at en maskine videresender pakker, som ikke er adresseret til den selv Afhænger kun af destinations-IP Routere kan være dedikerede systemer eller almindelige Linux/Unix systemer, med mere end een IP adresse.
Simpel routing Maskinen har een IP adresse, og eet netkort Al ikke-lokal trafik routes til ”default gateway” Hvad er lokalt? Afhænger af IP-netværket! Lokal trafik sendes direkte til modtageren via Ethernet (ARP) Alt andet sendes til default gateway
Routing med 2+ netværk Router fungerer ligesom det simple tilfælde Blot checkes flere IP-netværk Hvis pakken er adresseret til et af de lokale IP-netværk sendes den direkte Ellers sendes den videre til routerens default gateway Der kan være defineret lokale gateways for ikke-lokale netværk
Hvad sker der ved routing? Indholdet af pakken røres ikke ... Undtagen lige time-to-live feltet Ikke noget spor af, hvordan pakken er kommet frem Ingress filtering: Check af ankomne pakker Egress filtering: Check af udgående pakker
Routing i Linux Route-kommandoen definerer ”default gateway” og andre ruter Hvis 2 netkort bliver der ikke automatisk sendt trafik mellem dem Styres af ip_forward sysctl flaget, /proc/sys/net/ipv4/ip_forward Foregår automatisk når flaget er sat
IP protokollen Datagram baseret Ingen garanti for at pakker når frem Ingen garanti for rækkefølgen Pakker kan blive dubleret undervejs Ingen kontrol af integriteten Med andre ord: En helt upålidelig protokol
IP pakken Header (40 bytes) og data (op til 64 KB) Version (4 eller 6) Header længde (kun ”Options” feltet) Type of Service Total længde af pakken Datagram nummer DF / MF flag (Dont fragment / More fragments) Fragment offset (0-8191) Time-to-live Protokol (TCP, UDP ...) Source og Destination IP
Hvad indeholder felterne Protokol: Tal som angiver typen af data Type-of-Service: Påvirker routing Total længde: Op til 64 KB, større end noget fysisk lag kan håndtere Time-to-Live: Antal systemer pakken må passere igennem. Source/Destination: Kun IP-adressen!
Hvad bruges IP til ? I sig selv: Ingenting Blot et ”transport-medie” for andre protokoller, som gemmer sig nede i ”data” området Kan flytte noget data fra een IP-adresse til en anden
TCP protokollen Overbygning til IP Anvendes til kommunikation, når pålidelig data-overførsel er ønskelig F.eks: Web, Mail, ftp, news, Windows filesharing Relativt stort ”overhead” når kommunikationen starter
TCP er anderledes end IP Kommunikation mellem services, ikke systemer Bruger port-numre til at identificere brugere/services, oveni IP-adressen Garanterer at data kommer frem i rigtig rækkefølge og er komplet
TCP pakken Sendes som data i en IP-pakke IP pakken har Protokol = 6 Har sin egen header, som kommer efter IP-headeren
TCP headeren Source- og Destination portnummer Eget sekvensnummer samt ”acknowledge” sekvensnummer Header-længde Flag Vinduesstørrelse Checksum ”Urgent” data pointer Options
TCP portnumre Standard services bruger vel-definerede portnumre på server-siden (SMTP=25, HTTP=80, FTP=21 osv) Klienten bruger også et portnummer i sin ende – tildeles dynamisk Source-IP og port samt destination-IP og port identificerer een forbindelse
Sekvensnumre Holder rede på rækkefølgen af pakker, og at pakker ikke går tabt 32-bit tal som tælles een op for hver pakke, der sendes
TCP siger ”Pænt goddag” Sekvens-numrene skal initialiseres når forbindelsen etableres Sker med et ”three-way handshake” A: SYN=1, ACK=0, SEQ=12345, ACKSEQ=0 B: SYN=1, ACK=1, SEQ=67890, ACKSEQ=12346 A: SYN=0, ACK=1, SEQ=12346, ACKSEQ=67891
Sekvensnumre (2) SYN-flaget bruges til at SYNkronisere sekvens-numrene Start-nummeret skal vælges tilfældigt Ellers kan man lave ”spoofede” forbindelser SYN flood
TCP siger ”Pænt farvel” Lige som ved etablering af forbindelsen er der et 3-vejs handshake når den lukkes Bruger FIN-flaget i stedet for SYN FIN indikerer ”jeg har ikke mere at sende” Begge ender skal være enige om at lukke ned, ellers fortsætter data med at komme
Flag i TCP headeren SYN, FIN, ACK – styrer sekvensnumre RST – lukker en forbindelse uden afsluttende handshake PSH – ”Push” bruges til at ”skubbe” en pakke igennem nettet uden buffering URG – ”Urgent”, data som haster. F.eks. En ”ctrl-c” i en terminal-session
Nye flag ! I mange år har der kun været 6 flag – og 2 ubrugte bits Nu er de defineret i RFC 3168 (standard) ECN og CWR bruges til flow-control og adaptiv routing Volder problemer for en del firewalls!
UDP pakken UDP er datagram trafik ligesom IP Simplere end TCP – men bruger portnumre Bruger en IP-pakke med protokol=17 Intet overhead til at etablere en forbindelse Header: Blot source- og destination-port, længde og checksum
ICMP Bruges til ”kontrol”, ikke til data Kan f.eks. Bruges til at signalere at et system er off-line, eller en service er lukket Indeholdt i en IP-pakke med protokol=1 Header: Type, Kode, Checksum og evt. Data
ICMP pakke-typer Echo/Echo reply (0 / 8) Destination unreachable (3) Redirect (5) Time exceeded (11) Timestamp, info, address mask request/reply (13-18)
ICMP pakke-typer (2) Nogle ICMP-pakketyper har ekstra information i ”kode” feltet Destination unreachable : Kode angiver net/system/port – 16 forskellige Redirect – kan redirecte et helt netværk eller en enkelt host Time exceeded – TTL eller reassembly
ICMP bruges ofte! Ping, traceroute Kan I huske ”DF/MF” flagene i IP ? Nyttigt at kunne finde ud af hvor store pakker man kan sende til en modtager, uden at de skal fragmenteres ”Path MTU discovery” bruger ICMP type 3, kode 4 (fragmentation needed, DF set) svar
IP pakker i Linux Firewall-systemerne logger indholdet af pakker Ipchains: Oct 9 07:18:18 www kernel: Packet log: input - eth0 PROTO=6 61.113.5.106:3014 130.228.2.150:111 L=60 S=0x00 I=19082 F=0x4000 T=39 SYN (#47)
IP pakker i Linux (2) Iptables:Oct 8 16:11:51 fenris kernel: IN=eth1 OUT= +MAC=00:00:b4:c7:28:62:00:20:6f:0b:45:cb:08:00 SRC=217.230.143.200 +DST=192.168.1.2 LEN=52 TOS=0x00 PREC=0x00 TTL=119 ID=35562 DF PROTO=TCP +SPT=3259 DPT=21 WINDOW=32767 RES=0x00 SYN URGP=0