प्रौद्योगिकी साझेदारी

नेटवर्क प्रोग्रामिंग : मूलभूत अवधारणा

2024-07-12

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

1. ओएसआई मॉडल

OSI मॉडल ===》Open System Interconnection Model ==》7 स्तरेषु विभक्तम् अस्ति:
आदर्शप्रतिरूपम् ==》अद्यापि न साक्षात्कृतम्
tftp
ख /आदि/पासव्द्
a /आदि/123
अनुप्रयोग स्तर
प्रस्तुतिस्तरस्य एन्क्रिप्शनं विगुप्तीकरणं च gzip
सत्रस्तरजालविच्छेदः, संयोजनस्थितिः, keep-close keep-alive इति

परिवहनस्तर tcp udp प्रोटोकॉल सञ्चिका विडियो, श्रव्य
संजालस्तर ip NAT

लिङ्क लेयर स्विच डेटा स्वरूपण फ्रेम चेक
भौतिक परत 100Mb/8 Gbits 100MB समाक्षीय केबल 10Gb 2.4G 5G

अधः उपरि यावत् अधः एव मूलभूततमः भवति

2. TCP/IP मॉडल्

TCP/IP मॉडल् ==》अन्तर्जालप्रतिरूपम् ==》4 स्तरेषु विभक्तम् अस्ति:
व्यावहारिक प्रतिरूप ===》औद्योगिक मानक
tcp/ip प्रोटोकॉल ढेर
अनुप्रयोग स्तर ====》अनुप्रयोग
परिवहनस्तर ====》पोर्टसङ्ख्या tcp udp (या संचरणविधिः प्रयुक्ता,tcp विश्वसनीयःUDP इत्यस्य वास्तविकसमयस्य उच्चप्रदर्शनं भवति
संजालस्तर ====》IP पता (परपक्षं गृहं च कथं अन्वेष्टव्यम्
अन्तरफलकस्तर ====》जालकार्ड चालक 1GB
pcap ,,, २.

3. TCP/IP प्रोटोकॉल सूट्

www.taobao.com ---> 192.168.0.19
www.voa.com vpn
DNS डोमेननामसंकल्पः (सामान्यतया प्रान्तस्य आधारेण)


DHCP (Dynamic Host Configuration Protocol) 1.1.
अनुप्रयोगस्तरः : १.HTTP (जालपृष्ठम्) २. TFTP (तुच्छं लघुपरिधिसञ्चिकास्थापनम्) २.FTP (अन्तर्जालदीर्घदूरस्थापनम्) २.
                   SNMP (जालयन्त्राणां, प्रणालीनां, अनुप्रयोगानाञ्च प्रबन्धनं निरीक्षणं च)DNS ...
परिवहनस्तरः TCP UDP 56k cat
संजालस्तरः IP ICMP (ping) RIP OSPF IGMP...
अन्तरफलकस्तरः: ARP (पतेः समाधानप्रोटोकॉलः) RARP... ip--->mac
अर्प,,,,
    192.160.0.112 


1. संजालस्य मूलभूताः

संजाल मूलभूत ===》ABCDE वर्ग
010  3333344444
IP पता == संजालबिट् + होस्ट् बिट्

IP पता वर्गीकरण: बिन्दुयुक्त दशमलव ipv4 712934
    श्रेणी क: अतीव बृहत्-परिमाणस्य जालम्
                          8    8     8    8
        1.0.0.0 - 126.255.255.255  126.1.1.1 
        संजाल ID                                126.1.1.2
       २५५.०.०.० (उपजालमास्क) २.  
वैयक्तिक:
        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
        १९२.१६८.०.१ द्वारम्
        १९२.१६८.०.२५५ (प्रसारणम्, LAN मध्ये सर्वे तत् प्राप्तुं शक्नुवन्ति)

   श्रेणी D: बहुप्रसारणं चप्रसारण
        २२४.०.०.० - २३९.२५५.२५५.२५५ (समूहचर्चा, सर्वेषां कृते न उद्घाटितम्, न केवलं LAN मध्ये एव सीमितम्)
        १९२.१६८.०.२५५ == २५५.२५५.२५५.२५५ (केवलं LAN, एकः व्यक्तिः प्रेषयति, सर्वे प्राप्नुवन्ति)
        235.1.2.3
        192.168.1.0 
१९२.१६८.०.१ द्वारम्
१९२.१६८.१.२५५ प्रसारणम्

ङ श्रेणी : प्रयोगात्मक
        240.0.0.0 - 255.255.255.255
        
ग वर्गस्य जालम् : १.
IP-सङ्केतस्य प्रथमत्रयसमूहाः जालसङ्केतः, चतुर्थः समूहः च होस्ट्-सङ्केतः ।
द्विचक्रीयस्य उच्चतमः बिट् भवितुमर्हति: 110xxxxx इत्यस्मात् आरभ्य
दशमलव प्रतिनिधित्व सीमा : 192.0.0.0 -223.255.255.255
पूर्वनिर्धारितजालमास्कः २५५.२५५.२५५.०
जालसङ्ख्या : २^२४, प्रायः २.०९ मिलियन
होस्ट्-सङ्ख्या : २^८ २५४ + २ ===》१ इति द्वारम् १ प्रसारितं भवति
निजी पता : 192.168.xx LAN पता।
  
  सुदो विम्/etc/network/interfaces "जालं विन्यस्यताम्" इति ।
sudo /etc/init.d/जालस्य पुनः आरम्भः
sudo पुनः आरम्भः
    192.168.0.0
१९२.१६८.०.१ मार्गः
१९२.१६८.०.२५५ बोर्डकास्ट्
८०१.ङ
एकयन्त्रस्य अन्तर्जालप्रवेशस्य विन्यासः : १.
1. संजाल-अन्तरफलकं भवतु, संजाल-केबलं प्लग्-इन् कुर्वन्तु ।
2. IP-सङ्केतं भवतु
3. संजालसेटिंग्स् विन्यस्यताम्
           ip (अस्थायी ip परिवर्तन): ifconfig ethX XXXX/24 अप ifconfig ens33 192.168.0.13/२४ (उपजालमास्क) २. अप २५५.२५५.२५५.०
गेटवे: मार्गः पूर्वनिर्धारितं gw xxxx योजयतु
DNS: vi /etc/resolv.conf ==>नामसर्वरः 8.8.8.8
            परीक्षणम् : ping www.baidu.com
            जालंstat -anp (सङ्गणकस्य जालस्थितिं द्रष्टुं शक्नोति)

2. संजालस्य अन्तरफलकम्

1. सॉकेट सॉकेट (सञ्चिकावर्णकः - सम्बद्धः संजालयन्त्रः) ==》BSD सॉकेट ==》संजालसञ्चारार्थं अन्तरफलककार्यस्य समुच्चयः。सॉकेट अपि  अनुप्रयोग अन्तरफलककार्य अन्तरफलक
        2. ip+पोताश्रय पत्रसङ्केतः+पोताश्रय===》सम्बोधनं प्रयुक्तम्यजमानं चिनोतु
पोर्ट प्रयुक्तअनुप्रयोगानाम् अभिज्ञानं कुर्वन्तु

          पोर्ट् TCP पोर्ट् / UDP पोर्ट् इत्यत्र विभक्तः अस्ति, परिधिः अस्ति: 1-65535
१००० अन्तः पोर्ट्-स्थानानि प्रणाल्याः उपयुज्यन्ते इति सहमतिः अस्ति ।
http ८० www.baidu.com इति
                3306
telnet 21
श्श् २२

3. संजालबाइटक्रमः

        बृहत् एण्डियन भण्डारणम् (उच्चस्मृतौ न्यूनबिट् - संजालयन्त्राणि)
     Little endian 0x12345678 (कमस्मृतौ न्यूनबिट् - होस्ट्)
        12 00   
        00 12
        १९२.१६८.०.१२ (big-endian) "प्रथमं सर्वाधिकं महत्त्वपूर्णं बिट् संगृहीतम्" ।
       १२.०.१६८.१९२ (लघु एण्डियन) २.

4. UDP (उपयोक्तृदत्तांशचित्रम्) .

1. विशेषताः: कोऽपि लिङ्कः नास्ति, अविश्वसनीयः, बृहत् आँकडा

2. रूपरेखा : C/S मोड

सर्वर:सॉकेट () ===> बाइंड () ===> recvfrom () ===> बंद ()
क्लाइंट:सॉकेट () ===> बाइंड ()===> प्रेषण () ===> बंद ()

नोट्: socket() इत्यस्य पैरामीटर्स् समायोजितव्याः सन्ति ।

सॉकेट (PF_INET, SOCK_DGRAM, 0);

      bind() client(c) वैकल्पिकम् अस्तिसर्वर पक्षः (पक्षः) आवश्यकः अस्ति

1.सॉकेट्

int सॉकेट(int डोमेन्, int प्रकारः, int प्रोटोकॉल);
कार्यम् : कार्यक्रमः कर्नेल् प्रति प्रस्तावयतिस्मृति-आधारितं सॉकेट्-वर्णकं रचयन्तु

पैरामीटर् : १.डोमेन पता परिवारः, PF_INET == AF_INET ==>अन्तर्जालकार्यक्रमः
PF_UNIX == AF_UNIX ==>अकेला कार्यक्रमः

          प्रकार सॉकेट प्रकारः : १.
SOCK_STREAM स्ट्रीमिंग सॉकेट ===》TCP
SOCK_DGRAM उपयोक्ता डाटाग्राम सॉकेट ===>UDP
SOCK_RAW कच्चा सॉकेट ===》IP

          protocol protocol ==》0 इत्यस्य अर्थः स्वयमेव अनुप्रयोगस्तरप्रोटोकॉलस्य अनुकूलनं भवति ।

मूल्यं प्रतिगमनम् : सफलतया प्रत्यागच्छतुअनुरोधितं सॉकेट id
असफलता -1;

२.बन्धनम्

int बन्धन(int sockfd, struct sockaddr *मम_अद्द्रसोक्लेन्_त् अद्र्लेन्);
कार्यम् : यदि कार्यम् अन्तः अस्तिसेवा-टर्मिनलआह्वानं कृत्वा, अस्य अर्थः अस्ति यत् पैरामीटर् 1 इत्यनेन सह सम्बद्धां सञ्चिकावर्णकसञ्चिकां पैरामीटर् 2 इत्यनेन निर्दिष्टेन अन्तरफलकसङ्केतेन सह सम्बद्धं करणीयम्अस्मात् अन्तरफलकात् दत्तांशं स्वीकुरुत

यदि कार्यम् अस्तिग्राहक धुनयदि प्रयुक्तं भवति तर्हि तस्य अर्थः अस्ति यत् वर्णकात् यत्र पैरामीटर् १ स्थितः अस्ति तथा च अन्तरफलकयन्त्रात् यत्र पैरामीटर् २ स्थितः अस्ति तस्मात् दत्तांशः बहिः निष्कासितव्यः । बहिः प्रेषयतु

नोट्: यदि क्लायन्ट् अस्ति तर्हि एतत् कार्यं परित्यक्तुं शक्यते तथा च पूर्वनिर्धारित-अन्तरफलकेन दत्तांशः प्रेषितः भविष्यति ।
पैरामीटर् : १.sockfd file descriptor तथा socket id पूर्वं socket function इत्यस्य माध्यमेन निर्मितम्
          my_addr भौतिक-अन्तरफलकस्य संरचना-सूचकः अस्ति ।अन्तरफलकस्य विषये सूचनां प्रतिनिधियति

struct sockaddr सार्वभौमिक पता संरचना
      {
उ_लघु स_परिवार;
char sa_data [14] पते सूचना
      };

परिवर्तिता जालसङ्केतसंरचना निम्नलिखितरूपेण अस्ति ।
struct _sockaddr_in ///जाल पता संरचना
      {
u_short पाप_परिवार;
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;

3.प्रेषयतुअधिग्रहणं कुर्वन्तुनियोग:

ssize_t प्रेषणम्(int sockfd, const void *buf, आकार_त लेन, २.int ध्वजाः,
                       
const struct sockaddr *dest_addr, सोक्लेन्_त् अद्र्लेन्);

कार्यम् : UDP प्रोटोकॉल मध्ये अन्यपक्षं प्रति सन्देशान् प्रेषयितुं उपयुज्यतेदत्तांशं प्रेषयन्तु
पैरामीटर् : १.sockfd स्थानीय सॉकेट id
           buff स्थानीयदत्तांशभण्डारणं, प्रायः प्रेषणीयं दत्तांशः
          प्रेषितस्य दत्तांशस्य len दीर्घता
          flags दत्तांशं कथं प्रेषयितव्यम्, .० प्रेषणं अवरुद्ध्य इत्यर्थः

          dest_addr: आवश्यकम्, यत् लक्ष्यहोस्ट् सूचनासंरचनं प्रेषयितुं सूचयति
        addrlen: लक्ष्यसङ्केतदीर्घता

रिटर्न वैल्यू: सफलता Data length प्रेषिता
असफलता -1;


आकार_टी recvfrom (int sockfd, शून्य *बुफ, आकार_त लेन, २. int ध्वजाः,
                          
struct sockaddr *src_addr, सोक्लेन्_ट *अद्र्लेन्);

कार्यम् : UDP प्रोटोकॉल मध्ये उपयुज्यतेप्राप्नोतुपरपक्षेण प्रेषितः दत्तांशः ।
पैरामीटर् : १.sockfd स्थानीय सॉकेट id
          buff स्मृतिक्षेत्रं यत्र दत्तांशः संग्रहणीयः भवति, प्रायः सरणी अथवा गतिशीलस्मृतिः
        len इति प्राप्तव्यस्य दत्तांशस्य दीर्घता, प्रायः बफ् इत्यस्य आकारः ।
           ध्वजप्राप्तिविधिः, २.० अवरोधनम्

          src_addr वैकल्पिकं भवति तथा च अन्यपक्षस्य पतासूचनासंरचनां प्रतिनिधियति Ifलुप्तमूल्य,व्यक्तपरपक्षस्य सम्बोधनस्य चिन्ता मा कुरुत
          addrlen परपक्षस्य पतासूचनासंरचनायाः आकारः, यदिपरपक्षस्य सम्बोधनम्आम्‌NULल, तर्हिएतत् मूल्यम् अपि NULL अस्ति
रिटर्न् वैल्यू: सफलतया प्राप्तस्य दत्तांशस्य दीर्घता
असफलता -1;

4.निमील्यताम्

पिधानं करोतु() ===>निर्दिष्टं सॉकेट id बन्दं कुर्वन्तु;


सूचना

1. दत्तांशस्य दत्तांशस्य च सीमाः सन्ति
2. प्रेषणप्राप्तिसङ्ख्या सङ्गता भवेत्
3.recvfrom अवरुद्धं करिष्यति
4.sento अवरुद्धं न करिष्यति (recvfrom न प्राप्नोति, sento प्रेषणं न प्रभावितं करोति) 


   ग s अन्वेषयति

सर्वर.ग

  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. }