欢迎光临
我们一直在努力

Linux:网络编程

目录

1.基础知识

1.1网络干的事

1.2协议

1.3国际通用协议模型

        1.OSI模型:理想模型(7层——物数网传会表应,最全,每一层功能不一样)

        2.TCP/IP模型(实用模型-OSI 模型的简化版):

1.3国际通用模型协议

        1.3.1.应用层:

        1.3.2.传输层(网络编程主要处理的就是它)

        1.3.3 网络层

        1.3.4 网络接口层

2.网络的配置及相关命令

2.1虚拟机网络的两种工作模式:

2.2相关命令

3.UDP通信

3.1套接字

3.2函数接口


1.基础知识

1.1网络干的事

        传递信息。(IT:Information Technology)

1.2协议

        通信双方约定的一套通信标准(只有有协议才能破译对方发的是啥)。接下来我将学习的协议是国际通用标准,在国际上通用。(私有协议使用范围更小。)

1.3国际通用协议模型

        1.OSI模型:理想模型(7层——物数网传会表应,最全,每一层功能不一样)

应用层:要传递的数据和信息

表示层:是否对数据加密、以何种形式表示(只要通过设备,就会有信息安全问题)

会话层:是否需要建立会话链接(如看直播,进行连续收发,避免发一次收一次)

传输层:传递数据的方式【①数据包传输:一包一包地法  ②流式传输:先建立一个通道,传输是连续的】(类似快递:空运,陆运…)

网络层:数据的路由(数据从A到达B)(跨局域网的通信)

数据连接层:局域网内部的通信

物理层:物理介质的连接

搞懂理想模型推荐书目:

        2.TCP/IP模型(实用模型-OSI 模型的简化版):

应用层:(由应用层,表示层,会话层合并)传输的数据——为用户提供所需要的各种服务

传输层:传输的方式

网络(际)层:如何发送数据——主要解决主机到主机的通信问题。

网络接口层:(由数据链路层,物理层合并)物理接口

注意:每一层完成的功能和OSI模型是一样的

1.3国际通用模型协议

        1.3.1.应用层:

                HTTP协议:超文本传输协议(超文本:一个文本里既包含字又包含图,视频等等,如网页)(网页-存于服务器->性能很强大的电脑->作用:为网络中的主机提供服务。  每次查看网页,本质上是从服务器下载网页到本地,每次下载网页这种功能就具象成了一种HPTTP这种协议)

                HTTPS协议:加密后的HTTP协议。加密传输,收到后解密,更安全(传输超文本携带密码,防止钓鱼网站)【所以 HTTPS协议用得比 HTTP协议更多】

                DNS协议:域名解析协议(将域名转换成IP地址)【∵①域名更容易记忆②不同地域的服务器可以设置相同的域名,输入域名可以方便访问最近的那个服务器】

                TELNET协议:远程登陆协议

                SMTP协议:邮件传输协议

                MQTT协议:物联网传输协议——本质上是向服务器发送链接,可以向服务器发消息或者订阅服务器的消息,广泛用于物联网,∵通信量特别小

                RTSP协议:流媒体协议,用于视频

                …

        1.3.2.传输层(网络编程主要处理的就是它

                UDP协议:用户数据报协议(数据报:一包一包地传递        问题易丢包,对方有没有收到,这个地址对不对,都无反馈

特点:①UDP资源开销比较小

           ②UDP传输机制简单

           ③UDP传输不安全、不可靠

                TCP协议:传输控制协议 

特点:①TCP资源开销比较大(因为包头长)

           ②TCP机制复杂

                ——通信前: 通过 “三次握手” 机制建立通信(SYN:请求应答信号“听到请回答”)(ACK:应答信号)

                ——通信过程中:确认机制(以对方收到多少字节为准而不是我发了多少字节)

                ——流量控制、拥塞控制【可以调节发送窗口和接收窗口进行流量控制】(如百度网盘下载的很慢-通过调节流量控制)

                ——通信结束后: ”四次挥手“ 结束连接(FIN:结束连接)

           ③TCP传输安全、可靠

        1.3.3 网络层

                IPv4协议(IP地第4个版本version4)

1.192.168.0.107

        IP地址 == 网络位(192.168.0) + 主机位(107号主机)

2.网络位:指在哪个网段之内,网段都有编号,一个网段就是一个局域网编号(192.168.0

   网段号:网络位不变 ,主机位全为0。如(192.168.0.0

3.子网掩码:用来区分IP地址的网络位和主机位,子网掩码是1的部分表示网络位,子网掩码是0的部分表示主机位【∵有可能前三部分是网络位,第四部分是主机位;也可能前两部分是网络位,后两部分是主机位】

IP地址
192.168.0.107: 11000000.10101000.00000000.01101011
子网掩码
255.255.255.0 11111111.11111111..11111111.00000000

        应用:网络位相同的IP地址可以直接通信,网络位不同(则局域网不同)不能直接通信,不同局域网通信需要借助路由器完成数据的转发

                

4.一个局域网内能容纳主机的个数 :2^主机位-2 (减去网段号和广播地址) 网段号:(网络位不变,主机位全为0)   【用于标识局域网】       不能使用

广播地址:(网络位不变,主机位全为1)  【只要发一条信息,局域网内都所有主机能收到】                           不能使用

5.IP地址的分类

A类 1.0.0.0 -126.255.255.255 默认子网掩码:255.0.0.0  管理超大规模型网络(可容纳1677多万台主机)
B类 128.0.0.0-191.255.255.255    默认子网掩码:255.255.0.0        管理中大规模型网络
C类 192.0.0.0-223.255.255.255    默认子网掩码:255.255.255.0    管理中小规模型网络
D类 224.0.0.0-239.255.255.255    默认子网掩码:255.255.255.0    用于组播通信
E类 240.0.0.0-255.255.255.255    默认子网掩码:255.255.255.0    用于实验

     

6.公有地址和私有地址

        公有地址:能够直接上互联网的地址,如服务器IP地址(需向移动电信连通运营商申请)         私有地址:只有局域网内能直接访问,不能直接上互联网的地址,需通过地址转换协议转换成公有IP地址上网。谁都先还要公有IP地址,但是因为IP地址有限,所以需私有IP地址来节省共有IP地址。局域网内大家的私有IP地址通过路由器后会转换成一个公有IP地址实现上网(可能一个小区,一个省份就那么几个公有IP地址)

        

        A类私有IP地址:10.0.0.0-10.255.255.255

        B类私有IP地址:172.16.0.0-172.31.255.255

        C类私有IP地址:192.168.0.0-192.168.255.255

        

应用:

①同一网段内的IP地址能够直接通信——插上网线直接通信(不同网段也能通信,但是是间接,且必须是公有网段)

②  交换机不能跨局域网通信,只有路由器可以跨局域网通信,现在把交换机和路由器做一起了

                IPv6协议(IP地第6个版本version6)(不过多讲解)

                ARP协议:根据IP地址(IP地址不唯一)获取MAC地址(网卡地址,唯一

                RARP协议:根据MAC地址获取IP地址

应用:跨局域网通信使用IP地址,局域网内部通信使用MAC地址

        1.3.4 网络接口层

                硬件设计会用到

2.网络的配置及相关命令

2.1虚拟机网络的两种工作模式:

2.1.1桥接模式:

Ubuntu与Windows网络相互独立,每个系统会单独分配一个IP地址

可以作为局域网的服务器(因为IP地址独立)

作为服务器端使用必须使用桥接模式,因为Ubuntu必须有一个真实的独立的IP地址

2.1.2NAT模式

1.Ubuntu与Windows网络关联,Ubuntu相当于Windows一个软件,Ubuntu lP地址是虚拟出来的,无法作为服务器

2.无法作为局域网服务器

作为客户端所用优先选择NAT模式,因为Windows有网,Ubuntu就有网

2.2相关命令

ifconfig命令:

功能:查看网卡的IP地址

ifconfig ifconfig 网卡名 IP地址/24 up

#将ens33网卡设置为192.168.0.108,子网掩码设置为255.255.255.0启动网卡

ifconfig ens33 192.168.0.108/24 up

#关闭/开启网卡

ifconfig 网卡名 down/up

示例:

ping命令

发送连接请求,测试与某个IP地址是否能够连通 ping www.baidu.com

只要能ping通,就能通信

3.UDP通信

3.1套接字

3.2函数接口

socket

原型:int socket(int domain,int type,int protocol);

头文件:#include <sys/types.h>    /* See NOTES */               #include <sys/socket.h>

功能:创建一个用来进行套接字通信的终端节点

参数:

        domain:AF_INET   IPv4协议族

        type:SOCK_DGRAM   数据报套接字

        protocol:0      UDP通信

返回值:

        成功返回新的文件描述符

        失败返回-1

示例:

sendto

原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,                                         const struct sockaddr *dest_addr,socklen_t addrlen);

头文件:#include <sys/types.h>    /* See NOTES */               #include <sys/socket.h>

功能:向另一个套接字发送信息

参数:

        sockfd:使用socket创建获得套接字

        buf:发送内容的空间的首地址

        len:发数据的长度

        flags:发送的属性,默认为0

        dest_addr:目的IP的空间的首地址

        addrlen:目的IP的大小

返回值:

        成功返回发送的字节数

        失败返回-1

示例:

        

htons

原型:         uint32_t htonl(uint32_t hostlong);

        uint16_t htons(uint16_t hostshort);

        uint32_t ntohl(uint32_t netlong);

        uint16_t ntohs(uint16_t netshort);

功能:

        本地字节序与网络字节序的转换

        h:host 本地         n:net网络         l:long 长整型  IPV4         s:short 短整型  IPV4

        htons:将本地字节序转换为网络字节序

inet_addr

原型:in_addr_t inet_addr(const char *cp);

功能:         将字符串IP地址转换为32位的IP地址 参数:         cp:字符串IP地址

返回值:         32位结构体IP地址

测试——编写程序实现UDP发端,从终端接收字符串发送给接收端

接收软件:

        wltszs4.3.29.exe

前提:

        1.关闭防火墙/杀毒软件

        2.关闭windows Defencer

        3.关闭windows 防火墙

代码:

结果:

赞(0)
未经允许不得转载:171主机测评 » Linux:网络编程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址