网络编程,网络协议,UDP协议

网络:

1.协议:通信双方约定的一套标准

2.国际网络通信协议标准:

1.OSI协议:

应用层 发送的数据内容

表示层 数据是否加密

会话层 是否建立会话连接

传输层 数据传输的方式

网络层 数据的路由

数据链路层 局域网内部通信

物理层 物理介质的连接

2.TCP/IP协议模型:

应用层 发送的数据内容

传输层 数据传输的方式

网络层 数据由一台主机到达另一台主机

网络接口层 物理介质连接

应用层:

FTP 文件传输协议

TFTP 简单文件传输协议

HTTP 超文本传输协议

HTTPS 安全超文本传输协议

SMTP 简单邮件传输协议

TELNET 网络终端登录协议

DNS 域名系统

..

传输层:

TCP 传输控制协议

UDP 用户数据报协议

UDP:不安全、不可靠的传输方式

UDP机制简单

UDP占用的资源开销比较小

TCP:安全、可靠的传输方式

TCP机制复杂

TCP占用的资源开销比较大

三次握手建立连接(客户端与服务器端) ,确认双方能够通信

通信过程中保障数据传输的完整性

四次挥手断开连接,确保数据传输的完整

网络层:

IPV4协议

IP地址

管理员IP地址形式:192.168.0.167

内存IP地址形式: 11000000.10101000.00000000.10100111

IP地址 = 网络位 + 主机位

网络位:IP地址所属的网段(局域网的编号)

主机位:局域网中的第几台主机

网段号:网络位不变,主机位全为0

广播号:网络位不变, 主机位全为1

子网掩码:每个IP地址都会搭配一个子网掩码,用来区分IP地址的网络位及主机位子网掩码展开成二进制,1对应的部分就是IP地址的网络位,0对应的部分就是IP地址的主机位

192.168.0.167

255.255.255.0

11000000.10101000.00000000.10100111

11111111.11111111.11111111.00000000

192.168.0.0

192.168.0.255

IP地址的划分:

公有地址

私有地址

A类:1.0.0.0 ~ 126.255.255.255

子网掩码:255.0.0.0

管理超大规模型网络 私有IP 10.0.0.0------10.255.255.255

B类:128.0.0.0 ~ 191.255.255.255

子网掩码:255.255.0.0

管理大中规模型网络

私有地址:172.16.0.0 - 172.31.255.255

C类:192.0.0.0 ~ 223.255.255.255

子网掩码:255.255.255.0

管理中小规模型网络

私有地址:192.168.0.0 ~ 192.168.255.255

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

MAC地址:设备自带网卡的地址(该地址是唯一的)

端口号:找到同一台主机不同的应用程序

网络接口层通信方式:

网络接口层的主要功能包括:

1.将网络层的数据包封装成帧,准备发送到物理层。

2.通过物理媒介发送和接收数据帧。

3.实现数据链路层协议,如以太网协议等。

4.处理对传输介质的访问控制。

5.以及实现网络接口的配置和管理,如使用ifconfig命令查看和配置IP地址

3.命令:

1.ifconfig

2.将虚拟机IP地址设置为桥接模式:

1.点击"虚拟机"

2.点击"设置"

3.选择"网络适配器"

4.点击"桥接模式"

5.点击"确定"

3.将虚拟机桥接到无线网卡上去

1.点击"编辑"

2.点击"虚拟网络编辑器"

3.点击"更改设置"

4.已桥接至选择无线网卡

5.点击"确定"

4.修改网卡配置文件

1.sudo vim /etc/network/interfaces

2.修改文件内容为:

auto lo

iface lo inet loopback

auto ens33

iface ens33 inet dhcp

3.保存退出

:wq

4.重启网络服务

sudo /etc/init.d/networking restart

5.测试与局域网内其余IP地址是否能够连通

ping 192.168.0.167

ping www.baidu.com

4.UDP编程:

1.套接字:

实现Linux系统下的网络通信

套接字:一次通信对象的抽象

2.socket

int socket(int domain, int type, int protocol);
功能:
创建套接字

参数:

domain: AF_INET 表示IPV4协议

type:套接字类型

SOCK_STREAM:流式套接字

SOCK_DGRAM:数据报套接字

SOCK_RAW:原始套接字

protocol:

TCP和UDP协议:0

返回值:

成功返回用来通信的文件描述符

失败返回-1

3.sendto
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
++const struct sockaddr *dest_addr++ , socklen_t addrlen);
功能:
发送信息

参数:

sockfd:套接字文件描述符

buf:发送数据空间首地址

len:发送数据长度

flags:发送属性 默认为0

dest_addr:目标地址存放空间首地址

addrlen:目的地址的长度

返回值:

成功返回发送字节数

失败返回-1

struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};

/* Internet address. */

struct in_addr {

uint32_t s_addr; /* address in network byte order */

};

如果sendto对应的套接字没有绑定端口,则sendto绑定一个随机端口完成发送功能

4.inet_addr
in_addr_t inet_addr(const char *cp);
功能:
将字符串的IP地址转换为32位的地址类型

5.htons
uint16_t htons(uint16_t hostshort);

功能:

将本地字节序(小端)转换成网络大端字节序

6.bind
int bind(int sockfd, ++const struct sockaddr *addr++ , socklen_t addrlen);
功能:
将套接字与IP地址和端口进行绑定

参数:

addr:绑定地址结构体空间首地址

addrlen:绑定地址空间大小

返回值:

成功返回0

失败返回-1

注意:

只能绑定自己的IP地址

发送端流程: 1.创建套接字

2.发送信息

3.关闭套接字

接收端流程: 1.创建套接字

2.绑定IP和Port

3.接收信息

4.关闭套接字

7.recvfrom
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
功能:
接收信息
参数:

sockfd:套接字文件描述符

buf:接收数据空间首地址

len:接收数据长度

flags:接收的属性 默认为0

src_addr:存放发送方地址空间的地址

addrlen: 要接收的发送方地址的长度

返回值:

成功返回实际接收字节数

失败返回-1

NAT: NAT是一种网络技术,用于将私有IP地址转换为公共IP地址,以便在互联网上进行通信。在NAT网络中,内部网络中的设备使用私有IP地址,这些地址通常是从RFC 1918中定义的地址块中分配的,以避免与公共IP地址冲突。NAT转换器(NAT router)是一种网络设备,它包含NAT功能,可以接收来自内部网络的数据包,并将其源IP地址和端口号转换为公共IP地址和端口号。这样,内部网络中的设备就可以通过NAT转换器与互联网上的其他设备进行通信。当外部网络中的设备尝试与内部网络中的设备通信时,NAT转换器会记录下原始的源IP地址和端口号,以便在返回的数据包中进行相应的转换。这种机制可以保护内部网络免受来自互联网的直接访问,提高网络安全性

作业:

1.自己实现发送端,从终端接收一个字符串发送给接收端

自己实现接收端,从网络中接收到一个字符串并打印

2.编写两个程序,一个发送端,一个接收端,实现一个文件跨主机的传输

相关推荐
gywl32 分钟前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
WTT00111 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
_oP_i2 小时前
HTTP 请求Media typetext/plain application/json text/json区别
网络协议·http·json
杨德杰2 小时前
QT网络(一):主机信息查询
网络·qt
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
yang_shengy2 小时前
【JavaEE】网络(6)
服务器·网络·http·https
OkeyProxy3 小时前
HTTP、HTTPS和SOCKS5代理協議
网络协议·https·云计算·代理服务器·海外ip代理
zquwei3 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
Aimin20224 小时前
路由器做WPAD、VPN、透明代理中之间一个
网络
群联云防护小杜4 小时前
如何给负载均衡平台做好安全防御
运维·服务器·网络·网络协议·安全·负载均衡