================================================================================================================================================== NETWORKING ================================================================================================================================================== Bármikor küldhetünk üzenetet bármilyen gépnek, ha van címünk -> hogy fogadja e a gép, az más kérdés. Üzenetet hogy küldjük el? -------------------------------------------------------------------------------------------------------------------------------------------------- Internet Protocol! -------------------------------------------------------------------------------------------------------------------------------------------------- Maga az adat: Csomagokva (Packet)-be van összerakva, és az internet protocol ezt tudja átvinni, a megfelelő gépre. /************************************************************/ /*** IP Packet definition ***/ /************************************************************/ #typedef unsigned int uint; #typedef unsigned char uchar; struct ip_packet { uint version:4; /* 4-bit version [note] */ uint header_len:4; /* header length in words [note] */ uint serve_type:8; /* how to service packet [note] */ uint packet_len:16; /* total size of packet in bytes */ uint ID:16; /* packet ID [note] */ uint __reserved:1; /* always zero */ uint dont_frag:1; /* flag to permit fragmentation */ uint more_frags:1; /* flag for "more frags to follow"*/ uint frag_offset:13; /* to help reassembly */ uint time_to_live:8; /* permitted router hop cnt [note] */ uint protocol:8; /* ICMP, UDP, TCP [note] */ uint hdr_chksum:16; /* ones-comp. checksum of header */ uint IPv4_source:32; /* IP address of originator */ uint IPv4_dest:32; /* IP address of destination */ uchar options[ ]; /* up to 40 bytes [note] */ uchar data[ ]; /* message data up to 64KB [note] */ }; Egy memóriablokként kell felfogni, és ez megy át az interneten. Közbe módosulhat a tartalma -> pl NAT. (Network Address Translation) Ethernet: A csomagok plusszban egy Frame-be vannak belerakva, hogy át lehessen küldeni őket magán a hálózaton: Több féle frame létezik, pl: https://www.ionos.com/digitalguide/server/know-how/ethernet-frame/ Building block Size Function PreambleStart frame delimiter (SFD) 8 bytes Synchronization of the receiversBit sequence that initiates the frame Destination address (MAC) 6 bytes Hardware address of the destination network adapter Source address (MAC) 6 bytes Hardware address of the source network adapter Tag 4 bytes Optional VLAN tag for integration in VLAN networks (IEEE 802.1q) Type 2 bytes Ethernet II: labeling of layer 3 protocols Length 2 bytes Length information about the record Destination service access point (DSAP) 1 byte Individual address of the addressed service access point Source service access point (SSAP) 1 byte Source address of the sending device Control 1 byte Defines the LLC frame (logical link) SNAP 5 bytes Field for the definition of the organizationally unique identifier (OUI) of the manufacturer and the protocol number (like "Type") Data 44-1,500 bytes The data to be transmitted Frame check sequence (FCS) 4 bytes Checksum that computes the entire frame Inter frame gap (IFS) - Transmission break of 9.6 μs Itt a MAC cím a lényeg. Fontos tudni, hogy gyárilag két gépnek nem szabad, hogy azonos legyen a MAC címe. Azaz: Amikor programozunk, két gép között a kapcsolat csak virtuális. (Timerek.) (Nyilván van, hogy a hardwerbe van bele építve, illetve van erre optimalizáció.) Bármikor amikor csomagot küldünk valakinek, ha megkaphatja, meg fogja kapni. DOS/DDOS Amplification! Amikor a programunkba kapcsolatot létesítünk valakivel, az gyakorlatilag azt jelenti, hogy a kernel át fogja adni a csomagokat a programunknak. Ha ezeket a csomagokat tudjuk manipulálni, mások nevében tudunk üzenetet küldeni, amire a választ már ők fogják megkapni! Csomagok érkezhetnek rossz sorrendben, illetve el is veszhetnek! Defending from DDoS Attacks - Cloudflare: https://www.youtube.com/watch?v=kjs3KZtFeTM -------------------------------------------------------------------------------------------------------------------------------------------------- Internet Protocol Rétegek: -------------------------------------------------------------------------------------------------------------------------------------------------- 1. Physical layer ------ IEEE 802.3 IEEE 802.11 IEEE 802.15 IEEE 802.16 IEEE 1394 ITU-T G.hn PHY USB Bluetooth RS-232 RS-449 ------ Bitek egyik gépről a másikra átvitele, valahogy. 2. Data Link layer ------ ARP NDP OSPF Tunnels (L2TP) PPP MAC (Ethernet Wi-Fi DSL ISDN FDDI) ------ Magának az adatnak két node közötti átvitele, csinálhat hibajavítást is. ---- Address Resolution Protocol (ARP) (IPv4), Neighbor Discovery Protocol (NDP, ND) (IPv6) Címek felderítése (pl MAC cím), ---- Tunneling protocol Hálózatok közti kommunikációt teszi lehetővé. 3. Internet layer ------ IP IPv4 IPv6 ICMP ICMPv6 ECN IGMP IPsec more... ------ 4. Transport layer ------ TCP UDP DCCP SCTP RSVP more... ------ ---- TCP -Minden csomagra figyel, hogy megérkezzen. -Minden csomagra figyel, hogy a megfelelő sorrendben érkezzen meg. (Az app szemszögéből) -Ha egy csomag kimarad / elveszik újra lekéri a szervertől. -TCP Three-way handshake -> SYN, SYN/ACK, ACK -Néhány TCP specifikus támadás -> SYN flood, ACK flood, TCP Reset -> más nevében küldenek TCP reset csomagot ---- UDP -Gyors -Csomag elveszhet -> QoS, hibák etc -Csomagok más sorrendben érkezhetnek meg -> routing változás pl -Egy gép csak megnyithat UDP csatornát, és küldhet adatot 5. Session layer ------ Named pipe NetBIOS SAP PPTP RTP SOCKS SPDY ------ Szessziókat lehet vele létrehozni két gép között. Nyilván erre már akkor is szükség van, ha az adat amit küldeni akarunk, nem fér el egy packet-ben. pl letöltések, vagy appoknál nyitva hagyjuk a kapcoslatot. Ugyanúgy packet-eket küldözgetünk! Egy idő után timeout. -> pl egy gép netje elmegy. -> Van ilyen ping packet is. 6. Presentation layer ------ MIME XDR ASN.1 ASCII PGP ------ Formázza az adatot az applikációs rétegnek. Pl megcsinálhat bit konverziót (Big endian, little endian). 7. Application layer ------ BGP DHCP DNS FTP HTTP HTTPS IMAP LDAP MGCP MQTT NNTP NTP POP PTP ONC/RPC RTP RTSP RIP SIP SMTP SNMP SSH Telnet TLS/SSL XMPP more... ------ ---- HTTP - Hypertext Transfer Protocol browser: GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1 Host: net.tutsplus.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120 Pragma: no-cache Cache-Control: no-cache Response: HTTP/1.x 200 OK Transfer-Encoding: chunked Date: Sat, 28 Nov 2009 04:36:25 GMT Server: LiteSpeed Connection: close X-Powered-By: W3 Total Cache/0.8 Pragma: public Expires: Sat, 28 Nov 2009 05:36:25 GMT Etag: "pub1259380237;gz" Cache-Control: max-age=3600, public Content-Type: text/html; charset=UTF-8 Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT X-Pingback: https://net.tutsplus.com/xmlrpc.php Content-Encoding: gzip Vary: Accept-Encoding, Cookie, User-Agent