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

2024-08-22 19:28
文章标签 编程 udp 网络 网络协议

本文主要是介绍网络编程,网络协议,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.png1e9491c6c9bf44a19a1e0c4be97853d8.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编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097176

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Linux之UDP和TCP报头管理方式

《Linux之UDP和TCP报头管理方式》文章系统讲解了传输层协议UDP与TCP的核心区别:UDP无连接、不可靠,适合实时传输(如视频),通过端口号标识应用;TCP有连接、可靠,通过确认应答、序号、窗... 目录一、关于端口号1.1 端口号的理解1.2 端口号范围的划分1.3 认识知名端口号1.4 一个进程