liunx网络编程

1.网络:
    1.数据传输
    2.数据共享

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

3.国际网络协议标准:
    1.OSI网络协议模型
        分层:
            应用层                  要传输的数据
            表示层                  数据是否加密传输
            会话层                  是否建立可控的会话连接
            传输层                  数据传输的方式                 
            网络层                  数据的路由(跨局域网通信)
            数据链路层              局域网内部的通信
            物理层                  物理介质连接

    2.TCP/IP网络协议模型
        应用层              HTTP、HTTPS、MQTT、SMTP、FTP、TFTP、...
        传输层              TCP、UDP
        网络层              IPv4 IPv6 ARP RARP      MAC地址:网卡地址(唯一)    IP地址:网络地址
        物理层              


4.UDP和TCP:
    UDP:用户数据报协议
        特点:
            1.实现机制简单
            2.资源开销小
            3.不安全、不可靠

    TCP:传输控制协议
        过程:
            1.三次握手建立连接
                发送方                  接收方
                SYN                     
                                        ACK + SYN
                ACK 
            2.传输过程中有序列号和确认号保障数据传输的完整性
                PSH                         
                                        ACK 
            3.四次挥手结束连接
                FIN             
                                        ACK 
                                        FIN
                ACK
        特点:
            1.实现机制复杂
            2.资源开销大
            3.安全、可靠

5.IPv4协议:
    管理员形式: 192.168.0.158            
    内存形式:  11000000. 10101000. 00000000. 10011110
    子网掩码:   255.255.255.0 
               11111111. 11111111. 11111111. 00000000


    IP地址 = 网络位 + 主机位 
    网络位:表示局域网的编号
    主机位:该IP地址是在局域网中的第几台主机
    子网掩码:区分IP地址的网络位和主机位(IP地址都会搭配子网掩码使用)
            子网掩码对应的二进制形式中是1的部分对应IP地址的网络位
            是0的部分对应IP地址的主机位
    网段号:网络位不变,主机位全为0,则表示网段号      192.168.0.0
    广播号:网络位不变,主机位全为1,则表示广播号      192.168.0.255 
    一个局域网内,网段号和广播号,不能作为主机的IP地址使用

    192.168.100.137
    11000000.10101000.01100100.10001001

    11111111.11111111.11111111.11100000
    255.255.255.224 

    11000000.10101000.01100100.10000000
    11000000.10101000.01100100.10011111
    网段号:192.168.100.128
    广播号:192.168.100.159

    1.IP地址的分类:
        公有地址:能够直接上网的IP地址
        私有地址:不能够直接上网的IP地址

        A类:0.0.0.0 - 126.255.255.255
            255.0.0.0
            管理超大规模型网络

            私有地址:  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
            组播地址

        E类:240.0.0.0 - 255.255.255.255 
            实验地址

    2.MAC地址:
        网卡地址(唯一的)
        实现在局域网内部通信

    3.IP地址:
        实现跨网段通信

    4.端口号:
        区分同一台主机上不同的应用程序

6.虚拟机网络地址设置:
    NAT模式:Ubuntu虚拟出来一个网卡,IP地址也是虚拟的,只要windows有网,Ubuntu就有网
    桥接模式:Ubuntu直接使用真实的网卡作为操作系统的网卡,通过实际网卡进行数据收发(网络传输不经过windows了)

    1.将虚拟机设置为桥接模式:
        1.点击"虚拟机"
        2.点击"设置"
        3.点击"网络适配器"
        4.选择"桥接模式"
        5.点击"确定"
    
    2.将网卡桥接到无线网卡上:
        1.点击"编辑"
        2.点击"虚拟网络编辑器"
        3.点击"更改设置"
        4.选择桥接到 无线网卡
        5.点击"确定"

    3.设置UbuntuIP地址为自动获取IP地址
        1.打开网卡配置文件
            sudo vim /etc/network/interfaces 
        2.修改文件内容
            auto lo 
            iface lo inet loopback 

            auto ens33 
            iface ens33 inet dhcp
        3.保存退出

    4.重启网络服务
        sudo /etc/init.d/networking restart 

    5.ifconfig
        查看网卡地址信息

    6.ping www.baidu.com 
        PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.
        64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=52 time=35.0 ms
        64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=52 time=35.4 ms
        64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=52 time=35.2 ms

7.UDP编程:
    1.socket 套接字
        通信对象的抽象

    2.函数接口:
        1.socket
          int socket(int domain, int type, int protocol);
          功能:
            创建一个用来网络通信的终端节点
          参数:
            domain:协议族       AF_INET
            type:套接字的类型
                SOCK_STREAM:流式套接字         TCP
                SOCK_DGRAM:数据报套接字        UDP
                SOCK_RAW:原始套接字
            protocol:
                默认传0 
          返回值:
            成功返回创建的文件描述符
            失败返回-1 

        2.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 */
           };

        3.inet_addr
          in_addr_t inet_addr(const char *cp);
          功能:
            将字符串IP地址转换为内存IP地址类型

        4.htons
          uint16_t htons(uint16_t hostshort);
          功能:
            将本地字节序转换成网络字节序

    练习:
        发端循环从终端接收消息,发送给接收端,
        输入.quit退出

        5.bind
          int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
          功能:
            将一个套接字与IP和端口号绑定
          参数:
            sockfd:套接字文件描述符
            addr:绑定的IP地址和端口号信息
            addrlen:地址的大小
          返回值:
            成功返回0 
            失败返回-1 

          注意:
            1.只能绑定自己这台主机的IP和端口
            2.端口号只能被一个套接字绑定,多次绑定会报错提示端口号被占用

        6.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 

8.UDP通信流程:
    1.发送方:
        socket 
        sendto 
        close 

    2.接收方:
        socket
        bind 
        recvfrom 
        close 

    发送方:sendto本身具有绑定的功能(IP地址绑定为当前主机的IP,端口号绑定随机端口)
           
作业:
1.编写程序实现利用UDP实现文件的发送
    发送端                           接收端 
    ./send                          ./recv
    filename 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值