网站制作公司代理怎样做自己网站
网络:数据传输,数据共享
1.网络协议模型:
     OSI协议模型
 
         应用层              实际发送的数据
         表示层              发送的数据是否加密
         会话层              是否建立会话连接
         传输层              数据传输的方式(数据报、流式)
         网络层              数据的路由(如何从一个局域网到达另一个局域网)        IP地址
         数据链路层          局域网下如何通信
         物理层              物理介质的连接
TCP/IP协议模型
         应用层              传输的数据
         传输层              传输的方式
         网络层              数据如何从一台主机到达另一台主机
         网络接口层          物理介质的连接
    应用层:
         HTTP    超文本传输协议
         HTTPS   
         FTP     文件传输协议
         TFTP    简单文本传输协议
         SMTP    邮件传输协议
         MQTT    
         TELNET  
         ..
     
     传输层:
         UDP     用户数据报协议
                 特点:
                     1.实现机制简单
                     2.资源开销小
                     3.不安全不可靠
        TCP     传输控制协议
                 特点:
                     1.实现机制复杂
                     2.资源开销大
                     3.安全可靠
    网络层:
         IPv4
        IP地址:唯一标识网络中一台主机的标号
         IP地址:网络位 + 主机位
         子网掩码:用来标识IP地址的网络位和主机位
                 子网掩码是1的部分表示IP地址的网络位
                 子网掩码是0的部分表示IP地址的主机位
         网段号:网络位不变,主机位全为0,表示网段号
         广播地址:网络位不变,主机位全为1,表示广播地址
        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.0.0.0
             用于组播
        E类
             240.0.0.0 - 255.255.255.255 
             用于实验
2.UDP编程
     socket套接字编程:
     1.发端:
 
         socket 
         int socket(int domain, int type, int protocol);
         功能:
             创建一个用来通信的文件描述符
         参数:
             domain:使用的协议族 AF_INET (IPv4协议族)
             type:套接字类型
                 SOCK_STREAM:流式套接字
                 SOCK_DGRAM:数据报套接字
                 SOCK_RAW:原始套接字
             protocol:协议
                 默认为0 
         返回值:
             成功返回文件描述符
             失败返回-1 
        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:目的地址的长度
         
         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 */
         };
                   
         返回值:
             成功返回实际发送字节数
             失败返回-1 
        inet_addr:
         in_addr_t inet_addr(const char *cp);
         功能:  
             将字符串IP地址转换为内存中的IP地址 
        htons
         uint16_t htons(uint16_t hostshort);
         功能:
             将本地字节序转换为网络的大端字节序
         
         close 
收端         1.recvfrom
     ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                         struct sockaddr *src_addr, socklen_t *addrlen);
     功能:
         从套接字中接收数据
     参数:
         sockfd:套接字文件描述符
         buf:存放数据空间首地址
         flags:属性 默认为0 
         src_addr:存放IP地址信息的空间首地址
         addrlen:存放接收到IP地址大小空间的首地址
     返回值:
         成功返回实际接收字节数
         失败返回-1 
UDP编程:
UDP编程:
     发端:socket -> sendto -> close 
     收端: socket -> bind -> recvfrom -> close 
练习:
     编写程序实现两台主机间传输一个文件
     ./recv 
     
     ./send 
     a.txt 
4.UDP需要注意的细节点:
     1.UDP是无连接,发端退出,收端没有任何影响
     2.UDP发送数据上限,最好不要超过1500个字节
     3.UDP是不安全不可靠的,连续且快速的传输数据容易产生数据丢失
5.wireshark
   抓包工具
  操作流程:
     1.sudo wireshark
       打开wireshark抓包工具
     2.选择抓取数据包的网卡
       any
     3.执行通信的代码
     4.停止通信
     5.设定过滤条件
         ip.addr == IP地址 
         udp 
         tcp 
         udp.port == 端口
=========UDP简单==========
 6.UDP包头长度:8个字节     |
     源端口号(2个字节)     |
     目的端口号(2个字节)|
     长度(2个字节)         |
     校验和(2个字节)     |
 ==========================
 TCP通信:
TCP发端:
     socket 
     connect 
     send
     recv 
     close 
TCP收端:
     socket 
     bind 
     listen 
     accept 
     send 
     recv 
     close 
 1.connect 
   int connect(int sockfd, const struct sockaddr *addr,
                    socklen_t addrlen);
   功能:
     发送链接请求
   参数:
     sockfd:套接字文件描述符
     addr:目的地址存放空间首地址
     addrlen:IP地址的大小
   返回值:
     成功返回0
     失败返回-1 
2.send 
   ssize_t send(int sockfd, const void *buf, size_t len, int flags);
   功能:
     发送数据
   参数:
     sockfd:文件描述符
     buf:发送数据空间首地址
     len:发送数据的长度
     flags:属性默认为0 
   返回值:
     成功返回实际发送字节数
     失败返回-1 
3.recv
   ssize_t recv(int sockfd, void *buf, size_t len, int flags);
   功能:
     接收数据 
   参数:
     sockfd:套接字文件描述符 
     buf:存放数据空间首地址
     len:最大接收数据的长度
     flags:属性默认为0 
   返回值:
     成功返回实际接收字节数
     失败返回-1 
     如果对方退出,返回0 
4.listen
   int listen(int sockfd, int backlog);
   功能:
     监听客户端发送的连接请求
     该函数不会阻塞
   参数:
     sockfd:套接字文件描述符
     backlog:允许等待的尚未被处理的三次握手请求的最大个数
   返回值:
     成功返回0 
     失败返回-1 
5.accept
   int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
   功能:
     处理等待连接队列中的第一个连接请求
     该函数具有阻塞功能(如果没有人发送链接请求,会阻塞等待)
   参数:
     socket:套接字文件描述符
     address:存放IP地址的空间首地址
     addrlen:存放IP地址大小空间首地址
   返回值:
     成功返回一个新的文件描述符
     失败返回-1 
     
