Technology sharing

Programmatio retis: Conceptus fundamentales

2024-07-12

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

1. OSI exemplum

OSI exemplar === Systema Open Connexionis Model ==》is dividitur in 7 strata:
Specimen exemplar ==》Non tamen intellexit
tftp
b /etc/passwd
a /etc/123
Applicationem accumsan
Donatio tabulatum encryption et decryption gzip
Sessio iacuit retis disiunctio, nexus status, arcta custodia-vivens

Vehicula iacuit tcp udp protocol file video, audio
IP NAT IP NAT

Link accumsan switch notitia formatting frame reprehendo
Corporalis tabula 100Mb/8 Gbits 100MB Coaxial funis 10Gb 2.4G 5G

Ab imo ad summum, imum est praecipue

2. TCP/IP exemplar

TCP/IP exemplar ==》Internet exemplar ==》is in 4 strata dividitur:
Model === Industrial Standard
tcp / IP protocol BIBLIOTHECA
Applicationem accumsan ==== "Applicationem"
Vehiculum iacuit ==== 》 Portus numero tcp udp (quae tradendi modum adhibetur,TCP reliableUDP est summus real-time perficientur
Network iacuit ==== 》IP oratio (Quomodo invenire alteram partem et exercitum
Interface accumsan ==== 》Network card exactoris 1GB
pcap ,,,

3. TCP/IP protocol suite

www.taobao.com ---> 192.168.0.19
www.voa.com vpn
DNS domain nomen senatus (vulgo ex provincia)


DHCP (Dynamic Hostia configurationis Protocollum)
Accumsan accumsan:HTTP (pagina interreti) TFTP (trivial fasciculus brevis translationis)FTP (Internet longum spatium translatio)
                   SNMP (Curo et monitor retiacula machinas, systemata et applicationes)DNS ...
Transporto iacuit: TCP UDP 56k cat
Iaculum retis: IP ICMP (ping) RIP OSPF IGMP...
Interfaciei tabula: ARP (Inscriptio Protocolli Resolutio) RARP... ip--->mac
arp,,,,
    192.160.0.112 


1. Network Basics

Retiacula Basics ===》ABCDE Classis
010  3333344444
IP oratio == retis frena + hospes frena

IP oratio partitio: punctum punctum ipv4 712934
    Genus A: Ipsum magna-scala network
                          8    8     8    8
        1.0.0.0 - 126.255.255.255  126.1.1.1 
        Numerus Network                                126.1.1.2
       255.0.0.0 (subnet persona)  
privatus:
        10.0.0.0 - 10.255.255.255
        127.0.0.1
    Genus B: magna et media retiacula
        128.0.0.0 - 191.255.255.255
        128.2.1.2  128.2.7.2
        255.255.0.0
privatus:
        172.16.0.0 - 172.31.255.255

   Categoria CParvus et mediocris retiacula
       192.0.0.0 - 223.255.255.255
        255.255.255.0
privatus:
       192.168.0.0 - 192.168.255.255
Static profectus
        192.168.0.0
        192.168.0.1 porta
        192.168.0.255 (Iaci omnes in LAN recipere possunt)

   Genus D: Multicast etpassim
        224.0.0.0 - 239.255.255.255 (Chorus coetus, non omnibus apertus, non ad LAN limitatus)
        192.168.0.255 == 255.255.255.255 (solus LAN, unus mittit, quisque accipit);
        235.1.2.3
        192.168.1.0 
192.168.0.1
192.168.1.255 Iaci

Categoria E: Experimental
        240.0.0.0 - 255.255.255.255
        
Classis C network:
Primae tres partes IP inscriptionis sunt inscriptionem retis, et quartus coetus est oratio exercitus.
Summum frenum binarii esse debet: incipiens a 110xxxx .
Decimal representation range: 192.0.0.0 -223.255.255.255
Default netmask: 255.255.255.0
Numerus retiorum: 2^24, circa 2.09 decies centena millia
Numerus exercituum: 2^8 254 + 2 ===》1 est porta 1 iaci
Oratio privata: 192.168.xx LAN inscriptio.
  
  sudo vim/etc/network/interfaces "Configure network"
sudo /etc/init.d/networking restart
sudo reboot
    192.168.0.0
192.168.0.1 iter
192.168.0.255 boardcast
801.ng
Configuratio unius machinae Internet accessum:
1. Habere interface retis et obturaculum in retis funem.
2. habere IP oratio
3. Configure network occasus
           ip (tempus ip modify): ifconfig ethX XXXX/24 up ifconfig ens33 192.168.0.13/24 (subnet persona) usque 255.255.255.0
Gateway: route add default gw xxxx
DNS: vi /etc/resolv.conf ==>nameserver 8.8.8.8
            Test: ping www.baidu.com
            retestat -anp (inspicere potes network statum computatrum)

2. Network interface

1. nervum tabernaculi (File descriptor - network consociata fabrica==》BSD nervum ==》A paro of interface functiones pro network communicationissocket api  applicationem interfacefunction interface
        2. ip+port oratio+port=== Oratio adhibetur adCOGNOSCO exercitum
Portus ususCOGNOSCO applications

          Portus dividitur in portum TCP / UDP portum, distributio est: 1-65535
Constat intra 1000 portus systemate adhibitos esse.
http 80 www.baidu.com
                3306
telnet 21
ssh 22

3. Network byte ordinem

        Magnus endian storage (low bits in high memory - network device)
     Parva endian 0x12345678 (humilis bit in memoria humilis - hospes)
        12 00   
        00 12
        192.168.0.12 (big-endian) "praecipuum frenum primum reconditum";
       12.0.168.192 (paulum endian)

4. UDP (User Datagram)

1. Features: Non nexus, leves, magnae notitiae

2. Framework: C/S modus

server_socket() liga ()===> recvfrom()===> close()
clientis nervus () ===> ligare () ===> sendto () ===> prope ()

Nota: parametri nervum () opus esse accommodari.

nervus(PF_INET,SOCK_DGRAM,0);

      ligare () clientis (c) est libitumServo parte (s) non requiritur

1.socket

int tabernaculi (int domain, int genus, int protocol);
Munus: Propositum nucleo proponitCreare memoriam, secundum ostium tabernaculi descriptor

modulus;electronica familia domain, PF_INET == AF_INET ==> programmata interretialis
PF_UNIX == AF_UNIX ==> programmata sola

          type nervum type:
SOCK_STREAM nervus exundans ===》TCP
SOCK_DGRAM User Datagram Pentium ===> UDP
SOCK_RAW nervum rudis ===》IP

          protocollum protocollum ==》0 significat statim accommodare ad protocollum applicationis.

Redi valorem: Redi feliciterRequisitum nervum id
Deficio, -1;

2.bind

int ligare (int sockfd, instruere sockaddr * my_addrsocklen_t addrlen);
Munus: si munus estService-TerminalAppellatus, significat tabellam descriptor limam ad parametri 1 pertinentem cum inscriptione interfaciendi modulo 2 specificatam proAccipere notitia ex hoc interface

Si munus estClientem tuneSi adhibita sit, notitias ex descriptoribus ubi parameter 1 sita est et ex instrumento instrumenti interfaciendi, ubi modulus 2 sita est, accipi debet. emittet

Nota: Si clientis est, hoc munus omitti potest et notitia interface mittetur per defaltam.
modulus;sockfd lima descriptor et nervus id prius creatum per nervum functionis
          my_addr structura monstratorem corporis interface est.Repraesentat informationem de interface

oratio universa structuram instruere sockaddr
      {
u_short sa_family;
char sa_data[14];
      };

Conversus network electronica structura talis est:
instrue _sockaddr_in ///Network inscriptionis structurae
      {
u_short sin_family;
u_short sin_port;
strue in_addr sin_addr;
char sin_zero[8];
      };

instruere in_addr
      {
in_addr_t s_addr;
      }

socklen_t addrlen: longitudinem parametri II.
Redi valorem: victoria 0
Deficio, -1;

3.Sendcapereofficium:

ssize_t sendto (int sockfd, const inanis * buf *, size_t len,int vexilla,
                       
const stru sockaddr *dest_addr, socklen_t addrlen);

Munus: Usus est mittere nuntios ad alteram partem in UDP protocollomitte data
modulus;sockfd locus tabernaculi id
           bubalinae loci notitia repono, fere data mittere
          len longitudo data mittere
          vexilla quomodo mittere data;0 modo obturans mittens

          dest_addr: requiritur, significans scopum exercitum informationes structuram ut ad
        addrlen: target oratio tandem

Redi valorem: Success data longitudo misit
Deficio, -1;


ssize_t recvfrom(int sockfd, inanis * buf *, size_t len, int vexilla,
                          
instruere sockaddr *src_addr, socklen_t *addrlen);

Munus: in UDP protocolobtineNotitia ab altera parte missa.
modulus;sockfd locus tabernaculi id
          buff area ubi notitia reponenda est, plerumque memoria ordinata vel dynamica
        len est longitudo notitiae obtinendae, quae fere magnitudo bubalinae est.
           eoo comparandi modum;0 interclusio

          src_addr libitum est et significat inscriptionis structuram alterius partisNULL, exprimereNoli curare de altera partium oratio
          addrlen Magnitudo informationis partium inscriptionis alterius structurae, siOratio altera parssicNULL, thenHoc valore etiam NULL
Redi valorem: feliciter accepit notitia tandem
Deficio, -1;

4.Close

claudere () ===> nervum id certa claude;


Notice

1. Data et data habent terminos
2. Numerus mittendi et recipiendi debet respondere
3.recvfrom te angustos
4.sento non impedit (recvfrom non accipit, non sento mittens); 


   c spectat ad s *

server.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <time.h>
  10. typedef struct sockaddr *SA;
  11. int main(int argc, char *argv[])
  12. {
  13. int sockfd = socket(AF_INET, SOCK_DGRAM, 0); // 创建一个UDP套接字
  14. if(-1 == sockfd) // 检查socket调用是否失败
  15. {
  16. perror("socket"); // 打印错误信息
  17. exit(1); // 退出程序
  18. }
  19. // 定义服务器地址和客户端地址结构体(尽管客户端地址通常在recvfrom中填充)
  20. struct sockaddr_in ser, cli;
  21. bzero(&ser, sizeof(ser)); // 初始化服务器地址结构体
  22. bzero(&cli, sizeof(cli)); // 初始化客户端地址结构体(但这里实际上不需要提前初始化)
  23. // 设置服务器地址结构体
  24. ser.sin_family = AF_INET;
  25. ser.sin_port = htons(50000); // 端口号转换为网络字节序
  26. ser.sin_addr.s_addr = inet_addr("192.168.203.128"); // 服务器IP地址
  27. // 将套接字绑定到服务器地址和端口
  28. int ret = bind(sockfd, (SA)&ser, sizeof(ser));
  29. if(-1 == ret)
  30. {
  31. perror("bind"); // 绑定失败时打印错误信息
  32. exit(1); // 退出程序
  33. }
  34. socklen_t len = sizeof(cli); // 用于recvfrom的客户端地址长度
  35. // 无限循环接收数据并发送响应
  36. while(1)
  37. {
  38. char buf[512] = {0}; // 准备接收数据的缓冲区
  39. // 接收数据,注意这里&len是必需的,因为recvfrom会修改它以反映实际接收到的客户端地址长度
  40. recvfrom(sockfd, buf, sizeof(buf), 0, (SA)&cli, &len);
  41. time_t tm;
  42. time(&tm); // 获取当前时间
  43. // 这里有一个问题:buf被用于接收数据,然后又被用于存储新的字符串(包括原始数据和时间戳)
  44. // 这会导致原始数据被覆盖。应该使用另一个缓冲区来存储最终的发送数据
  45. sprintf(buf, "%s %s", buf, ctime(&tm)); // 将时间戳附加到接收到的数据上
  46. // 发送数据回客户端,但注意len在这里已经被recvfrom修改,表示客户端地址的长度
  47. // 对于sendto,我们应该使用sizeof(cli)或重新初始化len
  48. sendto(sockfd, buf, strlen(buf), 0, (SA)&cli, len); // 这里使用len可能不是最佳实践
  49. }
  50. // 注意:由于程序进入了一个无限循环,下面的close和return语句实际上永远不会被执行
  51. close(sockfd); // 正常情况下应该关闭套接字
  52. return 0; // 程序正常结束
  53. }

client.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <sys/types.h> /* See NOTES */
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <netinet/ip.h>
  9. #include <arpa/inet.h>
  10. #include <time.h>
  11. // 定义一个类型别名SA,指向sockaddr结构体
  12. typedef struct sockaddr *SA;
  13. // 注意:它尝试定义一个函数指针类型而不是简单的结构体指针。
  14. int main(int argc, char *argv[])
  15. {
  16. // 创建一个UDP套接字
  17. int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
  18. if(-1 == sockfd)
  19. {
  20. perror("socket"); // 如果创建套接字失败,打印错误信息
  21. exit(1); // 退出程序
  22. }
  23. // 初始化sockaddr_in结构体,用于指定服务器地址和端口
  24. struct sockaddr_in ser;
  25. bzero(&ser, sizeof(ser)); // 将结构体内存清零
  26. ser.sin_family = AF_INET; // 使用IPv4地址
  27. // 将端口号从主机字节序转换为网络字节序
  28. ser.sin_port = htons(50000);
  29. // 将点分十进制的IP地址字符串转换为网络字节序的整数
  30. ser.sin_addr.s_addr = inet_addr("192.168.203.128");
  31. // 无限循环,发送数据并尝试接收响应
  32. while(1)
  33. {
  34. char buf[512] = "hello,this is udp test"; // 准备发送的数据
  35. // 发送数据到指定的服务器地址和端口
  36. sendto(sockfd, buf, strlen(buf), 0, (SA)&ser, sizeof(ser));
  37. // 清空缓冲区,准备接收数据
  38. bzero(buf, sizeof(buf));
  39. // 尝试接收数据,但源地址和端口被设置为NULL,这通常是不正确的
  40. // 在实际应用中,应该提供一个sockaddr_in结构体来接收源地址和端口信息
  41. recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);
  42. // 打印接收到的数据(但在这个例子中,由于recvfrom的源地址和端口被设置为NULL,它可能不会按预期工作)
  43. printf("buf is %sn", buf);
  44. // 等待1秒后再发送下一个数据包
  45. sleep(1);
  46. }
  47. // 注意:由于程序进入了一个无限循环,下面的close和return语句实际上永远不会被执行
  48. close(sockfd); // 关闭套接字
  49. return 0; // 程序正常结束
  50. }