2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
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
अधः उपरि यावत् अधः एव मूलभूततमः भवति
TCP/IP मॉडल् ==》अन्तर्जालप्रतिरूपम् ==》4 स्तरेषु विभक्तम् अस्ति:
व्यावहारिक प्रतिरूप ===》औद्योगिक मानक
tcp/ip प्रोटोकॉल ढेर
अनुप्रयोग स्तर ====》अनुप्रयोग
परिवहनस्तर ====》पोर्टसङ्ख्या tcp udp (या संचरणविधिः प्रयुक्ता,tcp विश्वसनीयः,UDP इत्यस्य वास्तविकसमयस्य उच्चप्रदर्शनं भवति)
संजालस्तर ====》IP पता (परपक्षं गृहं च कथं अन्वेष्टव्यम्)
अन्तरफलकस्तर ====》जालकार्ड चालक 1GB
pcap ,,, २.
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
संजाल मूलभूत ===》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 (सङ्गणकस्य जालस्थितिं द्रष्टुं शक्नोति)
1. सॉकेट सॉकेट (सञ्चिकावर्णकः - सम्बद्धः संजालयन्त्रः) ==》BSD सॉकेट ==》संजालसञ्चारार्थं अन्तरफलककार्यस्य समुच्चयः。सॉकेट अपि अनुप्रयोग अन्तरफलककार्य अन्तरफलक
2. ip+पोताश्रय पत्रसङ्केतः+पोताश्रय===》सम्बोधनं प्रयुक्तम्यजमानं चिनोतु
पोर्ट प्रयुक्तअनुप्रयोगानाम् अभिज्ञानं कुर्वन्तु
पोर्ट् TCP पोर्ट् / UDP पोर्ट् इत्यत्र विभक्तः अस्ति, परिधिः अस्ति: 1-65535
१००० अन्तः पोर्ट्-स्थानानि प्रणाल्याः उपयुज्यन्ते इति सहमतिः अस्ति ।
http ८० www.baidu.com इति
3306
telnet 21
श्श् २२
बृहत् एण्डियन भण्डारणम् (उच्चस्मृतौ न्यूनबिट् - संजालयन्त्राणि)
Little endian 0x12345678 (कमस्मृतौ न्यूनबिट् - होस्ट्)
12 00
00 12
१९२.१६८.०.१२ (big-endian) "प्रथमं सर्वाधिकं महत्त्वपूर्णं बिट् संगृहीतम्" ।
१२.०.१६८.१९२ (लघु एण्डियन) २.
1. विशेषताः: कोऽपि लिङ्कः नास्ति, अविश्वसनीयः, बृहत् आँकडा
2. रूपरेखा : C/S मोड
सर्वर:सॉकेट () ===> बाइंड () ===> recvfrom () ===> बंद ()
क्लाइंट:सॉकेट () ===> बाइंड ()===> प्रेषण () ===> बंद ()
नोट्: 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 उपयोक्ता डाटाग्राम सॉकेट ===>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;
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;
पिधानं करोतु() ===>निर्दिष्टं सॉकेट id बन्दं कुर्वन्तु;
1. दत्तांशस्य दत्तांशस्य च सीमाः सन्ति
2. प्रेषणप्राप्तिसङ्ख्या सङ्गता भवेत्
3.recvfrom अवरुद्धं करिष्यति
4.sento अवरुद्धं न करिष्यति (recvfrom न प्राप्नोति, sento प्रेषणं न प्रभावितं करोति)
ग 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; // 程序正常结束
- }
client.c
- #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; // 程序正常结束
- }