
网络:
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 
                 管理超大规模型网络
                 私有地址: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地址:设备自带网卡的地址(该地址是唯一的)
         端口号:找到同一台主机不同的应用程序
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
     5.重启网络服务
         sudo /etc/init.d/networking restart
     6.测试与局域网内其余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 


















