Linux基础知识(Day 13-Day14)

零 下载资料包 网络1.zip

    补充: 
    打开多个vim chuangkou:
    在命令模式下输入: vsp xxxx.x
                                            vs xxxx.x
                                        切换的方法:ctrl + WW
                                        

一 回忆昨天的内容

    动态加载 (按需加载)
    dlopen 
    dlclose
    dlerror   -ldl
    dlsym 
    
    文件的操作 fopen  fclose
    文件夹的操作 opendir  closedir 
    文件和文件夹的权限问题
    
    系统中错误处理
    errno 
    perror ();
    strerror (); 
    
    sizeof 计算的是类型的大小!
    
    int var;
    sizeof (int); =   sizeof (var);
    
二 基于TCP/IP的网络通信及实现

    2.1 网络的基础知识
    
    服务器是什么?
    服务是软件 器是硬件
    
    C/S架构: Client  Server
    
    单路    
    双路 
    四路   32   64 
    
    什么是协议?
    protocol 规则 标准 约定 计算机的术语称为协议
    客户端和服务端要遵循TCP/IP 协议簇
    
    TCP/IP协议分为四层:
    应用层  传输层   网络层   链路层   物理层
                                                            Phy
    物理层 电气协议                  A/D <----> D/A
    链路层 以太网帧的定义        
        数据是按帧进行传递的
        以太网帧
        令牌环网帧
        ......
        
    一帧数据46~1500个字节,吞吐量
    CRC是4位校验码
    6字节目的地址是MAC目的地址
    6字节源地址MAC源地址
    48位 MAC地址 
    4G * 64K = 256T
    MAC 地址相当于身份证,IP地址相当于名字
    IP 地址是逻辑地址
    如何查看自己的IP?
    ifconfig 
    ip  a 
    
    IP 地址和MAC地址需要进行绑定
    IP地址和MAC地址之间的互换靠 ARP/RARP 完成
    
    以太网帧的分用过程
    网帧 帧头 帧体 帧尾
    
    IP 报文有一定的组织格式
    最需要关注的是4位的首部长度
    0~15位的值限制了记录路由选项,4个字节为一个单位。
    8位的协议:下一层的协议。
    指定出此数据包携带的数据采用何种协议,以便目的主机
    的IP层将数据部分上交给哪个进程进行处理。
    32位源IP地址
    32位目的IP地址
    解析到的报体传输到下一层,下一层采用什么协议,
    报体就以什么包的形式进行传输。
    
    假如说传输的包头中的Protocol是TCP的:
    TCP协议也有一定的组织格式:
    TCP 中16位的目的端口号,将来决定传给哪个应用程序。
    端口号是从 0~65535,1000一下不要用。
    进程要监听端口,当有请求到来时,接受请求。
    
    IP地址一共有5类
    IP地址有网络地址和主机地址
    最常用的是B类和C类
    192.168.1.188
    0~255.0~255.0~255.0~255
    网络号 + 主机号
    
    需要从IP地址中提取出来网络号
    子网掩码:
    255.255.255.0 
    &
    192.168.1.188
    ----------------
    192.168.1.0 ---》 网络号
    
    192.168.1.134/24 255.255.255.0
    192.168.1.134/25 255.255.255.128 
    
    192.168.1.134
    &
    255.255.255.128
    ------------------
    192.168.1.128 ---》 还剩7位主机号,
                                            最多还有128台机器
                                            
    理解三个网络设备:
    集线器  电信号的放大和分流而已
    交换机    交换的是网帧
    路由器    交换的是ip报文
    
    基于TCP的网络编程模型
    
    服务端编程模型
        1.建立通信端点,返回一个文件描述符 listenfd
        2.将listenfd和服务器的IP和端口号进行绑定
        3.将设备设置成被动连接状态,监听客户端连接的到来,
          把请求放入未决连接队列中。listen ();
        while (1) {
            4.从未决连接队列中取出来第一个未决连接进行处理,
                accept(2),返回一个文件描述符cfd,cfd就是服务端和
                客户端的连接,如果未决连接队列为空,阻塞等待。
            5.cfd从客户端读取请求数据,read(2);
            6.处理客户的请求。
            7.将处理结果发送给客户端.write(2);
            8.关闭本次链接.close(2);
        }
        
    客户端编程模型:
        1.建立通信端点 socket(2)
        2.lfd用于连接服务器. connect(2)
        3.使用lfd向服务器发送请求信息 write(2)
        4.阻塞等待服务器的响应 
        5.将服务器的响应信息进行处理
        6.关闭连接
    
        
        
        
            
    socket (2) 
    功能:
        创建一个通信端点
    参数:
        domain:
             AF_INET      IPv4 Internet protocols          ip(7)
       AF_INET6     IPv6 Internet protocols          ipv6(7)
       
    type:
        SOCK_STREAM   提供可靠的,双向的,基于连接的 TCP
      SOCK_DGRAM    UDP
    
    protocol:
        0
    
    返回值:
        成功 返回一个文件描述符
        错误 -1 errno 被设置
        
    bind:
        功能:
            将地址绑定到socket上
            
        参数:
            sockfd: 指定了具体的socket
            addr: 具体的地址
            addrlen: 指定了addr指向空间的大小
            
        返回值:
            成功:0
            错误:-1 ,errno被设置
            
    accept (2)
        功能
            接受一个连接
        参数
            sockfd: 设置为监听的那个socket,从这个socket的未决
            连接队列中取出来第一个未决处理,进行处理。
            addr: 值-结果参数,将对面的地址填充到addr所指向的
                    地址空间。
            addrlen:对面的地址所占的实际的大小            
        返回值    
            返回一个新的文件描述符,用于实现服务器和客户端的通讯。
            
    connect:
        功能:
            在指定的socket上发起一个连接
        参数:
            sockfd: 指定了socket
            addr: 指定了服务器的地址和端口号
            addrlen: addr的大小
        返回值:
            成功 0
            错误 -1
            
      struct sockaddr {
            sa_family_t sa_family;
            char        sa_data[14];
    };
    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 */
    };
    
        192.168.1.123   点分十进制
        无符号整形数据
        网络字节序 (大端)
        主机字节序转换成网络字节序
        htons (2) h -->host n --> network 
        l--->long  s --> short   
    #include <arpa/inet.h>
    uint32_t htonl(uint32_t hostlong);
    uint16_t htons(uint16_t hostshort);
    uint32_t ntohl(uint32_t netlong);
    uint16_t ntohs(uint16_t netshort);
    
    需要将ip地址的字符串和长整型进行互转
    
    inet_pton (3)
    #include <arpa/inet.h>
    int inet_pton(int af, const char *src, void *dst);
    功能:
        text ---> binary
    参数:
        af: AF_INET  AF_INET6
        src:指定一个字符串,将IPV4的ip地址转换成网络字节序
        dst: 存放转换后的结果
    返回值:
        成功 1
        错误 0  地址无效
                 -1 地址不合法
    
    #include <arpa/inet.h>
    const char *inet_ntop(int af, const void *src,
                            char *dst, socklen_t size);
                            
    功能:
        binary --->text 网络地址转换为字符串
    参数:
        af:AF_INET  AF_INET6
        src: in_addr 网络地址
        dst: 存放转换后的结果
        size: 指定dst空间的大小
        
    返回值:
        成功: 返回转换后的字符串
        错误: NULL
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值