Technologieaustausch

Python-Netzwerkprogrammierung – TCP/IP

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Verbindungsschicht

Rahmenzusammensetzung (in der Reihenfolge):

Ziel-MAC: 6B

Quell-MAC: 6B

Typ: 2B

Daten: 46B-1500B

CRC: 4B

Unter diesen ist der Quell-MAC die Adresse der Host-Netzwerkkarte, der Typ der Datentyp der Quellnetzwerkschicht, IPv4 ist 0800, ARP ist 0806, PPPOE ist 8864, 1qtag ist 8100, IPv6 ist 86DD

Python kann die native Mac-Adresse über das UUID-Modul erhalten

Netzwerkschicht

Datagrammstruktur

Header: 20-60B, davon sind die ersten 20B erforderlich und die letzten 40B optional.

Daten: 0-65516B

Header-Struktur

Version: 4 Ziffern, Angabe von IPv4 oder IPv6

ihl: 4 Bit, was die Header-Länge angibt, die Einheit ist 4B, also beträgt das Maximum 4x15 = 60B, was genau der maximalen Länge des Headers entspricht

ds: Differenzierte Dienste, 8 Bits, die ersten drei Bits geben Priorität an, die nächsten vier Bits geben minimale Verzögerung, maximalen Durchsatz, höchste Zuverlässigkeit und minimale Kosten an, das letzte Bit ist unbenutzt

Gesamtlänge: 16 Bit, was die Gesamtlänge des Headers und der Daten in B angibt.Beachten Sie, dass die Datenlänge der Verbindungsschicht 46-1500 beträgt. Wenn das Datagramm der Netzwerkschicht weniger als 46 B beträgt, werden die Daten gefüllt.

Identifikation: 16 Bits, die die eindeutige ID der fragmentierten Daten angeben

Flag: 3 Bits, das höchste Bit ist ein reserviertes Bit, das zweite Bit gibt an, ob es fragmentiert werden kann, 0 bedeutet, dass es fragmentiert werden kann, 1 bedeutet, dass es nicht fragmentiert werden kann, das letzte Bit gibt an, ob das Datagramm fragmentiert ist, 0 bedeutet nicht fragmentiert, und es ist das letzte Fragment, 1 bedeutet Fragment, und es gibt Fragmente danach

Fragmentverschiebung: 13 Bit, 8B

Lebensdauer, 8 Bit, maximal 255, gibt die maximale Anzahl von Hops in der Route an

Protokoll: 8 Bit, gibt den IP-Datagrammtyp an, z. B. ICMP, IGMP, TCP, UDP usw.

Header-Prüfsumme: 16 Bit

Quell-IP-Adresse und Ziel-IP-Adresse, jeweils 32 Bit

Python kann Netzwerkinformationen über die beiden Module psutil und netifaces abrufen. Die Netifaces-Version ist veraltet. Sie können netifacce2 installieren.

Transportschicht

UDP

Die Erreichbarkeit der Daten ist nicht garantiert

Header 8B: Quellport 2B, Zielport 2B, Länge 2B, Prüfsumme 2B

Daten 0-65527B

TCP

3-Wege-Handshake zum Herstellen einer Verbindung, 4-Wege-Handshake zum Schließen der Verbindung

Datagrammstruktur

Erster Teil 20-60B

Daten 0-65535B

Header-Struktur

Quellport 16 Bit

Zielport 16 Bit

Seriennummer: 32 Bit: Jedes Datenbyte hat eine Sequenznummer,Nach Erreichen von pow(2,32) beginnt es bei 0

Bestätigungsnummer: 32 Bit. Der Empfänger sendet die Sequenznummer des ersten Bytes der nächsten Datennachricht an den Absender. Wenn der Absender beispielsweise 0-999 Bytes sendet, ist die vom Empfänger gesendete Bestätigungsnummer.

Datenoffset: 4 Bit, Einheitsbit 4B, ähnlich dem IHL des IPv4-Headers

Reserviert: 6 Bits, normalerweise 0

URG: 1 Bit, 1 zeigt dringende Daten an, der dringende Zeiger ist gültig

ACK: 1 Bit, 1 bedeutet, dass das Bestätigungsnummernfeld gültig ist

PSH: 1 Bit, 1 bedeutet, dass die Nachricht sofort erstellt und gesendet wird, nachdem sie empfangen wurde, anstatt sie in den Cache zu legen und zu warten, bis der Cache voll ist, bevor sie gesendet wird.

RST: 1. Wenn es 1 ist, bedeutet dies, dass ein ernstes Problem mit der aktuellen Verbindung vorliegt und die Verbindung neu erstellt werden kann. RST von 1 kann auch verwendet werden, um die Annahme illegaler Nachrichten zu verweigern weigern Sie sich, illegale Verbindungen zu öffnen.

SYN: 1 Bit, 1 zeigt an, dass es sich bei der Nachricht um eine Verbindungsanforderungs- oder Verbindungsannahmenachricht handelt

FIN: 1 Bit, 1 zeigt an, dass die Daten gesendet wurden und die Verbindung freigegeben werden muss.

Fenster: 16 Bit, wird vom Empfänger an den Absender gesendet und gibt die Länge der nächsten Nachricht an, die voraussichtlich akzeptiert wird

Prüfsumme: 16 Bit

Dringender Zeiger: 16 Bit. Wenn URG 1 ist, gibt es die Endposition dringender Daten an.

Python ruft Netzwerkinformationen ab

psutil kann einige Netzwerkstatistiken abrufen. Standardmäßig erfasst die Methode „net_io_counters“ die Netzwerkstatistiken der gesamten Maschine. Durch Eingabe des Parameters „pernic=True“ werden Statistiken für jede Netzwerkkarte separat erfasst.

Anwendungsschicht

http

HTTP ist standardmäßig eine zustandslose Kommunikation und zustandsbehaftete Dienste können über Cookies ausgeführt werden.

Der http-Port ist im Allgemeinen 80

Nachrichtenstruktur

Anforderungsnachricht: Methode, URL, Version, andere Header-Felder, Nachrichtenentität (optional)

Antwortnachricht: Version, Statuscode, Phrase, andere Header-Felder, Nachrichtenentität (optional)

Methoden: Es gibt 8 Typen: get, post, head, put, delete, option, connect, Trace

Version: http-Versionsnummer

Andere Header-Felder: wie Cache-Control, Accept-Encoding usw.

Nachrichtenentität: Keine Längenbeschränkung, kann 0 sein

Statuscode: 404, dreistellig.1xx zeigt an, dass der Server die Anfrage empfangen hat, 2xx zeigt an, dass der Server die Client-Anfrage akzeptiert, 3xx zeigt an, dass der Server die Client-Anfrage umleitet, 4xx zeigt an, dass die Client-Anfrage falsch ist und 5xx zeigt an, dass ein Problem mit dem Server vorliegt .

Phrase: Kommentieren Sie den Statuscode. Beispielsweise lautet die Phrase, die dem 202-Rückgabecode entspricht, „Accept“, und die entsprechende Phrase zum 404-Rückgabecode ist „Not Fount“.

https

HTTP hat keine Sicherheitsgarantie und kann Datenpakete mithilfe von SSL oder TLS verschlüsseln und dann über TCP übertragen443

Im Allgemeinen werden symmetrische Verschlüsselung und asymmetrische Verschlüsselung für die Nachrichtenverschlüsselung verwendet, und asymmetrische Verschlüsselung wird im Allgemeinen für die Passwortverschlüsselung verwendet.

Anfrageprozess

Wenn der Client eine Anfrage stellt, sendet er eine Reihe von Verschlüsselungsregeln, die er unterstützt, an den Server.

Der Server kombiniert eine Reihe von Verschlüsselungs- und Hash-Algorithmen basierend auf den Verschlüsselungsregeln des Clients und sendet diese zusammen mit seinen eigenen Identitätsinformationen in Form eines digitalen Zertifikats an den Client zurück.

Der Client überprüft die Gültigkeit des Serverzertifikats, generiert nach Übergabe des Zertifikats eine Folge von Zufallszahlenkennwörtern und verschlüsselt das Zufallszahlenkennwort mit dem öffentlichen Schlüssel des Servers.Der Client berechnet den Hash der zu sendenden Nachricht, verschlüsselt die zu sendende Nachricht und den Hash-Wert der Nachricht mit einem Zufallszahlenkennwort und verschlüsselt schließlich den öffentlichen Schlüssel des Servers mit einem Zufallszahlenkennwort und verschlüsselt die Nachricht und die Nachricht mit dem Zufallszahlenpasswort werden zusammen gehasht und an den Server zurückgegeben

Nach dem Empfang der Client-Daten verwendet der Server seinen eigenen privaten Schlüssel, um das Zufallszahlenkennwort zu entschlüsseln, verwendet dann das Zufallszahlenkennwort, um die Nachricht und den Nachrichten-Hash-Wert zu entschlüsseln und vergleicht den entschlüsselten Hash-Wert mit dem Hash-Wert der empfangenen Nachricht Sehen Sie, ob es konsistent ist. Wenn sie konsistent sind, wird die Verbindung zwischen dem Client und dem Server erfolgreich hergestellt. Anschließend verwenden beide Parteien Zufallszahlen-Passwörter, um die Daten zu verschlüsseln und zu entschlüsseln.Tritt bei der nachfolgenden Datenübertragung ein Fehler auf oder ist der Hash inkonsistent, wird die Verbindung automatisch beendet.

ftp

DNS

SNMP

SNMP Simple Mail Transfer Protocol wird verwendet, um E-Mails von der Quelladresse zur Zieladresse zu übertragen. Der Port ist im Allgemeinen 25.

Es handelt sich um ein häufig verwendetes E-Mail-Versandprotokoll. Nach dem Senden einer E-Mail wird die E-Mail an den SNMP-Server gesendet.

pop3

Der Empfänger wird verwendet, um E-Mails anzunehmen, die von anderen Benutzern von seinem eigenen Server gesendet werden. Der Port ist normalerweise 110.

pop3 ist ein Offline-Protokoll. Wenn sich der Benutzer anmeldet, werden die E-Mails vom Pop3-Server gleichzeitig in den lokalen Bereich heruntergeladen und gleichzeitig werden die E-Mails vom Server automatisch gelöscht.

imap ist ein Online-E-Mail-Empfangsprotokoll, das das Offline-Problem von Pop3 ausgleicht. Es ist derzeit das am häufigsten verwendete E-Mail-Empfangsprotokoll.

DHCP

Wenn ein Client mit DHCP eine Verbindung zum Netzwerk herstellt, sendet er eine DHCP-Erkennungsnachricht. Wenn nach einer begrenzten Anzahl von Broadcasts gemäß bestimmten Regeln keine Antwort empfangen wird, schlägt DHCP fehl.

Nach Erhalt der Nachricht wählt der Server eine IP aus dem verfügbaren Adresspool aus, sendet eine DHCP-Angebotsnachricht in Broadcast-Form und gibt die IP an den Client zurück.

Nachdem der Client die vom DHCP-Server zugewiesene IP erhalten hat, sendet er eine ARP-Anfrage, um festzustellen, ob die IP belegt ist. Wenn sie nicht belegt ist, sendet der Client einen DHCP-Ablehnungsbericht. Es sendet eine DHCP-Anfrage an den Server. Nach dem Empfang sendet der Server eine DHCP-Bestätigungsantwort an den Client. An diesem Punkt endet der DHCP-Dienstprozess.

Der DHCP-Server-Port ist im Allgemeinen 67 und der DHCP-Client-Port ist im Allgemeinen 68. DHCP verwendet UDP-Kommunikation.