目录
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 防火墙
代码:

结果:




