τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Μοντέλο OSI ===》Μοντέλο διασύνδεσης ανοιχτού συστήματος ==》 χωρίζεται σε 7 επίπεδα:
Ιδανικό μοντέλο ==》Δεν έχει γίνει ακόμα
tftp
b /etc/passwd
a /etc/123
Επίπεδο εφαρμογής
Κρυπτογράφηση και αποκρυπτογράφηση επιπέδου παρουσίασης gzip
Αποσύνδεση δικτύου επιπέδου περιόδου σύνδεσης, κατάσταση σύνδεσης, διατήρηση-κλείσιμο διατήρησης ζωντανής λειτουργίας
Στρώμα μεταφοράς αρχείου πρωτοκόλλου tcp udp βίντεο, ήχος
IP επιπέδου δικτύου NAT
Έλεγχος μορφοποίησης πλαισίου δεδομένων διακόπτη επιπέδου σύνδεσης
Φυσικό επίπεδο 100Mb/8 Gbits 100MB Ομοαξονικό καλώδιο 10Gb 2.4G 5G
Από κάτω προς τα πάνω, το κάτω είναι το πιο βασικό
Μοντέλο TCP/IP ==》Μοντέλο Διαδικτύου ==》 χωρίζεται σε 4 επίπεδα:
Πρακτικό μοντέλο ===》Βιομηχανικό Πρότυπο
Στοίβα πρωτοκόλλου tcp/ip
Επίπεδο εφαρμογής ====》Εφαρμογή
Επίπεδο μεταφοράς ====》Αριθμός θύρας tcp udp (ποια μέθοδος μετάδοσης χρησιμοποιείται,tcp αξιόπιστο,Το UDP έχει υψηλή απόδοση σε πραγματικό χρόνο)
Επίπεδο δικτύου ====》Διεύθυνση IP (Πώς να βρείτε το άλλο μέρος και τον οικοδεσπότη)
Επίπεδο διεπαφής ====》Πρόγραμμα οδήγησης κάρτας δικτύου 1 GB
pcap,,,
www.taobao.com ---> 192.168.0.19
www.voa.com vpn
Ανάλυση ονόματος τομέα DNS (γενικά με βάση την επαρχία)
DHCP (Dynamic Host Configuration Protocol)
Επίπεδο εφαρμογής:HTTP (ιστοσελίδα) TFTP (τετριμμένη μεταφορά αρχείων μικρής εμβέλειας)FTP (Μεταφορά μέσω Διαδικτύου σε μεγάλες αποστάσεις)
SNMP (Διαχείριση και παρακολούθηση συσκευών, συστημάτων και εφαρμογών δικτύου)DNS...
Επίπεδο μεταφοράς: TCP UDP 56k κατ
Επίπεδο δικτύου: IP ICMP (ping) RIP OSPF IGMP...
Επίπεδο διεπαφής: ARP (Address Resolution Protocol) RARP... ip--->mac
αρπ,,,,
192.160.0.112
Βασικά Δικτύου ===》Κλάση ABCDE
010 3333344444
Διεύθυνση IP == bits δικτύου + bit κεντρικού υπολογιστή
Ταξινόμηση διεύθυνσης IP: διακεκομμένη δεκαδική ipv4 712934
Κατηγορία Α: Δίκτυο πολύ μεγάλης κλίμακας
8 8 8 8
1.0.0.0 - 126.255.255.255 126.1.1.1
Αριθμός δικτύου 126.1.1.2
255.0.0.0 (μάσκα υποδικτύου)
ιδιωτικός:
10.0.0.0 - 10.255.255.255
127.0.0.1
Κατηγορία Β: Μεγάλα και μεσαία δίκτυα
128.0.0.0 - 191.255.255.255
128.2.1.2 128.2.7.2
255.255.0.0
ιδιωτικός:
172.16.0.0 - 172.31.255.255
Κατηγορία Γ: Μικρά και μεσαία δίκτυα
192.0.0.0 - 223.255.255.255
255.255.255.0
ιδιωτικός:
192.168.0.0 - 192.168.255.255
Στατική δρομολόγηση
192.168.0.0
192.168.0.1 πύλη
192.168.0.255 (Μετάδοση, όλοι στο LAN μπορούν να τη λάβουν)
Κατηγορία Δ: multicast καιαναμετάδοση
224.0.0.0 - 239.255.255.255 (Ομαδική συνομιλία, δεν είναι ανοιχτή σε όλους, δεν περιορίζεται σε LAN)
192.168.0.255 == 255.255.255.255 (μόνο LAN, ένα άτομο στέλνει, όλοι λαμβάνουν)
235.1.2.3
192.168.1.0
192.168.0.1 Πύλη
192.168.1.255 Εκπομπή
Κατηγορία Ε: Πειραματικό
240.0.0.0 - 255.255.255.255
Δίκτυο κατηγορίας Γ:
Οι τρεις πρώτες ομάδες της διεύθυνσης IP είναι η διεύθυνση δικτύου και η τέταρτη ομάδα είναι η διεύθυνση κεντρικού υπολογιστή.
Το υψηλότερο bit του δυαδικού αρχείου πρέπει να είναι: ξεκινώντας από 110xxxxx
Εύρος δεκαδικής αναπαράστασης: 192.0.0.0 -223.255.255.255
Προεπιλεγμένη μάσκα δικτύου: 255.255.255.0
Αριθμός δικτύων: 2^24, περίπου 2,09 εκατομμύρια
Αριθμός κεντρικών υπολογιστών: 2^8 254 + 2 ===》1 είναι η πύλη 1 μεταδίδεται
Ιδιωτική διεύθυνση: 192.168.xx Διεύθυνση LAN.
sudo vim/etc/network/interfaces "Διαμόρφωση δικτύου"
sudo /etc/init.d/networking restart
επανεκκίνηση sudo
192.168.0.0
Διαδρομή 192.168.0.1
192.168.0.255 boardcast
801.ng
Διαμόρφωση για πρόσβαση στο Διαδίκτυο ενός μηχανήματος:
1. Έχετε μια διεπαφή δικτύου και συνδέστε το καλώδιο δικτύου.
2. Έχετε μια διεύθυνση IP
3. Διαμορφώστε τις ρυθμίσεις δικτύου
ip (τροποποίηση προσωρινής διεύθυνσης IP): ifconfig ethX XXXX/24 up ifconfig ens33 192.168.0.13/24 (μάσκα υποδικτύου) μέχρι 255.255.255.0
Πύλη: διαδρομή προσθήκη προεπιλεγμένου gw xxxx
DNS: vi /etc/resolv.conf ==>nameserver 8.8.8.8
Δοκιμή: ping www.baidu.com
καθαράstat -anp (μπορεί να δει την κατάσταση δικτύου του υπολογιστή)
1. πρίζα (Περιγραφέας αρχείου - συσχετισμένη συσκευή δικτύου) ==》 Υποδοχή BSD ==》Ένα σύνολο λειτουργιών διεπαφής για επικοινωνία δικτύου.πρίζα api διεπαφή λειτουργίας διεπαφής εφαρμογής
2. ip+Λιμάνι διεύθυνση+Λιμάνι===》Η διεύθυνση χρησιμοποιείται για ναΠροσδιορίστε τον κεντρικό υπολογιστή
Λιμάνι που χρησιμοποιείταιΠροσδιορίστε τις εφαρμογές
Η θύρα χωρίζεται σε θύρα TCP / θύρα UDP, η περιοχή είναι: 1-65535
Συμφωνείται ότι θύρες εντός 1000 χρησιμοποιούνται από το σύστημα.
http 80 www.baidu.com
3306
telnet 21
ssh 22
Μεγάλη αποθήκευση endian (χαμηλά bit σε υψηλή μνήμη - συσκευές δικτύου)
Little endian 0x12345678 (χαμηλό bit σε χαμηλή μνήμη - κεντρικός υπολογιστής)
12 00
00 12
192.168.0.12 (big-endian) "το πιο σημαντικό bit αποθηκεύτηκε πρώτα"
12.0.168.192 (μικρό ενδιανό)
1. Χαρακτηριστικά: Χωρίς σύνδεσμο, αναξιόπιστο, μεγάλα δεδομένα
2. Πλαίσιο: Λειτουργία C/S
διακομιστής:socket() ===>bind()===>recvfrom()===>close()
client:socket() ===>bind()===>sendto() ===>close()
Σημείωση: Οι παράμετροι του socket() πρέπει να προσαρμοστούν.
υποδοχή(PF_INET,SOCK_DGRAM,0);
bind() client(c) είναι προαιρετικό,Απαιτούνται πλευρές διακομιστή。
υποδοχή int (τομέας int, τύπου int, πρωτόκολλο int);
Λειτουργία: Το πρόγραμμα προτείνει στον πυρήναΔημιουργήστε ένα περιγραφικό υποδοχής που βασίζεται στη μνήμη
παράμετρος:οικογένεια διευθύνσεων τομέα, PF_INET == AF_INET ==>Πρόγραμμα Διαδικτύου
PF_UNIX == AF_UNIX ==>αυτόνομο πρόγραμμα
τύπος τύπου υποδοχής:
Υποδοχή ροής SOCK_STREAM ===》TCP
SOCK_DGRAM User Datagram Socket ===>UDP
SOCK_RAW ακατέργαστη υποδοχή ===》IP
πρωτόκολλο πρωτοκόλλου ==》0 σημαίνει αυτόματη προσαρμογή στο πρωτόκολλο του επιπέδου εφαρμογής.
Επιστρεφόμενη τιμή: Επιστροφή με επιτυχίαΤο αναγνωριστικό υποδοχής που ζητήθηκε
Αποτυχία -1;
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
Λειτουργία: Εάν η συνάρτηση είναι εντόςService-TerminalΟνομάζεται, σημαίνει ότι το αρχείο περιγραφής αρχείου που σχετίζεται με την παράμετρο 1 σχετίζεται με τη διεύθυνση διεπαφής που καθορίζεται από την παράμετρο 2 γιαΑποδεχτείτε δεδομένα από αυτήν τη διεπαφή。
Εάν η λειτουργία είναι μέσαΣυντονισμός πελάτηΕάν χρησιμοποιείται, σημαίνει ότι τα δεδομένα πρέπει να αφαιρεθούν από τον περιγραφέα όπου βρίσκεται η παράμετρος 1 και από τη συσκευή διασύνδεσης όπου βρίσκεται η παράμετρος 2. εκπέμπω。
Σημείωση: Εάν πρόκειται για πελάτη, αυτή η λειτουργία μπορεί να παραλειφθεί και τα δεδομένα θα σταλούν από την προεπιλεγμένη διεπαφή.
παράμετρος:Περιγραφέας αρχείου sockfd και αναγνωριστικό υποδοχής που δημιουργήθηκαν προηγουμένως μέσω της συνάρτησης υποδοχής
Το my_addr είναι ο δείκτης δομής της φυσικής διεπαφής.Αντιπροσωπεύει πληροφορίες σχετικά με τη διεπαφή
struct sockaddr καθολική δομή διευθύνσεων
{
u_short sa_family?
char sa_data[14];
};
Η δομή διεύθυνσης δικτύου που έχει μετατραπεί είναι η εξής:
struct _sockaddr_in ///Δομή διεύθυνσης δικτύου
{
u_short sin_family?
u_short sin_port; ///Θύρα διεύθυνσης
struct in_addr sin_addr ///Διεύθυνση IP
char sin_zero[8];
};
struct in_addr
{
in_addr_t s_addr;
}
socklen_t addrlen: το μήκος της παραμέτρου 2.
Αξία επιστροφής: επιτυχία 0
Αποτυχία -1;
ssize_t sendto(int sockfd, const void *buf, size_t len,σημαίες int,
const struct sockaddr *dest_addr, socklen_t addrlen);
Λειτουργία: Χρησιμοποιείται για την αποστολή μηνυμάτων στο άλλο μέρος στο πρωτόκολλο UDPαποστολή δεδομένων。
παράμετρος:Αναγνωριστικό τοπικής υποδοχής sockfd
buff τοπική αποθήκευση δεδομένων, συνήθως τα δεδομένα που θα σταλούν
μήκος των δεδομένων προς αποστολή
σημαίες Πώς να στείλετε δεδομένα,Το 0 σημαίνει αποκλεισμός αποστολής
dest_addr: απαιτείται, υποδεικνύοντας τη δομή πληροφοριών κεντρικού υπολογιστή-στόχου προς αποστολή
addrlen: μήκος διεύθυνσης στόχου
Επιστρεφόμενη τιμή: Επιτυχία Το μήκος δεδομένων στάλθηκε
Αποτυχία -1;
ssize_t recvfrom(int sockfd, κενός *buf, size_t len, σημαίες int,
struct sockaddr *src_addr, socklen_t *addrlen);
Λειτουργία: χρησιμοποιείται στο πρωτόκολλο UDPΑποκτώΤα δεδομένα που αποστέλλονται από το άλλο μέρος.
παράμετρος:Αναγνωριστικό τοπικής υποδοχής sockfd
buff Η περιοχή μνήμης όπου πρόκειται να αποθηκευτούν δεδομένα, συνήθως ένας πίνακας ή μια δυναμική μνήμη
len είναι το μήκος των δεδομένων που πρέπει να ληφθούν, συνήθως το μέγεθος του buff.
μέθοδος απόκτησης σημαιών,0 αποκλεισμός
Το src_addr είναι προαιρετικό και αντιπροσωπεύει τη δομή πληροφοριών διεύθυνσης του άλλου μέρους IfΜΗΔΕΝΙΚΟ,εξπρέςΜη σε νοιάζει η διεύθυνση του άλλου
adrlen Το μέγεθος της δομής πληροφοριών διεύθυνσης του άλλου μέρους, εάνΔιεύθυνση του άλλου μέρουςΝαίNULΛ, λοιπόνΑυτή η τιμή είναι επίσης NULL
Επιστρεφόμενη τιμή: μήκος δεδομένων που ελήφθη με επιτυχία
Αποτυχία -1;
Κλείσε() ===>Κλείστε το καθορισμένο αναγνωριστικό υποδοχής.
1. Τα δεδομένα και τα δεδομένα έχουν όρια
2. Ο αριθμός αποστολής και λήψης πρέπει να αντιστοιχεί
3.recvfrom θα μπλοκάρει
Το 4.sento δεν θα μπλοκάρει (το recvfrom δεν λαμβάνει, δεν επηρεάζει την αποστολή αποστολής)
γ ψάχνει για s
διακομιστής.γ
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <time.h>
-
- typedef struct sockaddr *SA;
-
- int main(int argc, char *argv[])
- {
- int sockfd = socket(AF_INET, SOCK_DGRAM, 0); // 创建一个UDP套接字
- if(-1 == sockfd) // 检查socket调用是否失败
- {
- perror("socket"); // 打印错误信息
- exit(1); // 退出程序
- }
-
- // 定义服务器地址和客户端地址结构体(尽管客户端地址通常在recvfrom中填充)
- struct sockaddr_in ser, cli;
- bzero(&ser, sizeof(ser)); // 初始化服务器地址结构体
- bzero(&cli, sizeof(cli)); // 初始化客户端地址结构体(但这里实际上不需要提前初始化)
-
- // 设置服务器地址结构体
- ser.sin_family = AF_INET;
- ser.sin_port = htons(50000); // 端口号转换为网络字节序
- ser.sin_addr.s_addr = inet_addr("192.168.203.128"); // 服务器IP地址
-
- // 将套接字绑定到服务器地址和端口
- int ret = bind(sockfd, (SA)&ser, sizeof(ser));
- if(-1 == ret)
- {
- perror("bind"); // 绑定失败时打印错误信息
- exit(1); // 退出程序
- }
-
- socklen_t len = sizeof(cli); // 用于recvfrom的客户端地址长度
-
- // 无限循环接收数据并发送响应
- while(1)
- {
- char buf[512] = {0}; // 准备接收数据的缓冲区
- // 接收数据,注意这里&len是必需的,因为recvfrom会修改它以反映实际接收到的客户端地址长度
- recvfrom(sockfd, buf, sizeof(buf), 0, (SA)&cli, &len);
-
- time_t tm;
- time(&tm); // 获取当前时间
-
- // 这里有一个问题:buf被用于接收数据,然后又被用于存储新的字符串(包括原始数据和时间戳)
- // 这会导致原始数据被覆盖。应该使用另一个缓冲区来存储最终的发送数据
- sprintf(buf, "%s %s", buf, ctime(&tm)); // 将时间戳附加到接收到的数据上
-
- // 发送数据回客户端,但注意len在这里已经被recvfrom修改,表示客户端地址的长度
- // 对于sendto,我们应该使用sizeof(cli)或重新初始化len
- sendto(sockfd, buf, strlen(buf), 0, (SA)&cli, len); // 这里使用len可能不是最佳实践
- }
-
- // 注意:由于程序进入了一个无限循环,下面的close和return语句实际上永远不会被执行
- close(sockfd); // 正常情况下应该关闭套接字
- return 0; // 程序正常结束
- }
πελάτης.γ
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/types.h> /* See NOTES */
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netinet/ip.h>
- #include <arpa/inet.h>
- #include <time.h>
-
- // 定义一个类型别名SA,指向sockaddr结构体
- typedef struct sockaddr *SA;
- // 注意:它尝试定义一个函数指针类型而不是简单的结构体指针。
-
-
- int main(int argc, char *argv[])
- {
- // 创建一个UDP套接字
- int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if(-1 == sockfd)
- {
- perror("socket"); // 如果创建套接字失败,打印错误信息
- exit(1); // 退出程序
- }
-
- // 初始化sockaddr_in结构体,用于指定服务器地址和端口
- struct sockaddr_in ser;
- bzero(&ser, sizeof(ser)); // 将结构体内存清零
- ser.sin_family = AF_INET; // 使用IPv4地址
- // 将端口号从主机字节序转换为网络字节序
- ser.sin_port = htons(50000);
- // 将点分十进制的IP地址字符串转换为网络字节序的整数
- ser.sin_addr.s_addr = inet_addr("192.168.203.128");
-
- // 无限循环,发送数据并尝试接收响应
- while(1)
- {
- char buf[512] = "hello,this is udp test"; // 准备发送的数据
- // 发送数据到指定的服务器地址和端口
- sendto(sockfd, buf, strlen(buf), 0, (SA)&ser, sizeof(ser));
-
- // 清空缓冲区,准备接收数据
- bzero(buf, sizeof(buf));
- // 尝试接收数据,但源地址和端口被设置为NULL,这通常是不正确的
- // 在实际应用中,应该提供一个sockaddr_in结构体来接收源地址和端口信息
- recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);
-
- // 打印接收到的数据(但在这个例子中,由于recvfrom的源地址和端口被设置为NULL,它可能不会按预期工作)
- printf("buf is %sn", buf);
-
- // 等待1秒后再发送下一个数据包
- sleep(1);
- }
-
- // 注意:由于程序进入了一个无限循环,下面的close和return语句实际上永远不会被执行
- close(sockfd); // 关闭套接字
- return 0; // 程序正常结束
- }