0


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

247a11e6632540cdbdd7dfa921f39393.png

网络:
1.协议:通信双方约定的一套标准
2.国际网络通信协议标准:
** 1.OSI协议:**
应用层 发送的数据内容
表示层 数据是否加密
会话层 是否建立会话连接
传输层 数据传输的方式
网络层 数据的路由
数据链路层 局域网内部通信
物理层 物理介质的连接

** 2.TCP/IP协议模型:**
应用层 发送的数据内容
传输层 数据传输的方式
网络层 数据由一台主机到达另一台主机
网络接口层 物理介质连接

    应用层:
         FTP     文件传输协议    
         TFTP    简单文件传输协议
         HTTP    超文本传输协议
         HTTPS   安全超文本传输协议
         SMTP    简单邮件传输协议
         TELNET  网络终端登录协议
         DNS     域名系统
         .. 
     
     传输层:
         TCP     传输控制协议
         UDP     用户数据报协议

        UDP:不安全、不可靠的传输方式
              UDP机制简单
              UDP占用的资源开销比较小
         TCP:安全、可靠的传输方式
              TCP机制复杂
              TCP占用的资源开销比较大 
                 **三次握手建立连接(客户端与服务器端)**,确认双方能够通信
                 通信过程中保障数据传输的完整性
                 **四次挥手断开连接**,确保数据传输的完整

        ![98ccb027811446aa895d840bceceeb5b.png](https://i-blog.csdnimg.cn/direct/98ccb027811446aa895d840bceceeb5b.png)![1e9491c6c9bf44a19a1e0c4be97853d8.png](https://i-blog.csdnimg.cn/direct/1e9491c6c9bf44a19a1e0c4be97853d8.png)
              
    ** 网络层:** 
         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地址

81423b85e7bb4898872ca43fb142c08e.png

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.编写两个程序,一个发送端,一个接收端,实现一个文件跨主机的传输

标签: 网络 网络协议 udp

本文转载自: https://blog.csdn.net/m0_67913262/article/details/141253172
版权归原作者 m0_6793018756 所有, 如有侵权,请联系我们删除。

“网络编程,网络协议,UDP协议”的评论:

还没有评论