Linux网络基础一

网络基础

  • 基础概念

    1. ip地址:在网络中唯一标识一台主机
    2. port端口:在一台主机上标识一个进程 (二个字节16位整数,一个端口号只能被一个进程占用,一个进程可以绑定多个端口号)
  • ISO七层模型

    物理层 链路层 网络层 传输层 会话层 表示层 应用层

    表示层:图像、视频编解码、数据加密

    会话层:建立会话,如session认证、断点续传。

  • TCP/IP五层模型

    物理层: 负责光电信号传输;以太网协议;集线器

    链路层: 负责相邻设备之间的数据帧传输;Ethernet协议; 交换机

    网络层: 负责地址管理与路由选择; IP ARP(IP地址解析物理地址) ICMP(ping命令); 路由器

    传输层: 负责端与端之间的数据传输; TCP,UDP

    应用层: 负责应用程序之间的数据沟通; HTTP FTP SMTP DNS

  • 主机字节序和网络字节序

    • 主机字节序

      网络通信的本质是不同的机器进行数据交换, 一般不同的机器有着不同的cpu型号,不同的cpu其字节序可能不一样,字节序指的是对于存储需要多个字节的整数,其字节在不同的机器内存中存储的顺序。

      1. little-endlian(LE,小端编码)

        对于一个整数值,如果使用小端字节序,整数的高位会存储在内存地址的高的位置,整数的低位存储在内存地址低的位置, x86架构使用的是小端编码

        在这里插入图片描述

      2. big-endlian (BE, 大端编码)

        对于一个整数值,如果使用大端字节序,整数的高位存储在内存地址低的位置,整数的低位存储在内存地址高的位置上,这是最直观的字节序,JAVA程序、mac机器上的程序一般是大端编码方式

        [外链图片转存失败(img-rQ3R9G09-1566204151066)(C:\Users\some yuan\Documents\笔记\linux系统\BE.png)]

    • 网络字节序

      网络字节序是TCP/IP协议中规定好的一种数据表示格式,它与具体的cpu类型、操作系统等无关,从而可以保证数据在不同主机之间传输能够被正确解释,网络字节序采用大端编码,因此为了不同的机器和系统可以正常交换数据,需要将传输的整型值转换成网络字节序

    // 判断本机是否是网络字节序
    bool isNetByteOrder()
    {
        unsigned short mode = 0x1234;
        char *pmode = (char*)mode;
        // 如果低地址放低位
        if(*pmode == 0x34)
        {
            return false;
        }
        return true;
    }
    // htons 主机序转网络序
    uint16_t htons(uint16_t hostshort);
    {
        //如果已经本机字节序是网络字节序,则直接返回
        if (isNetByteOrder())
            return hostshort;
    
        return ((uint16_t)(hostshort >> 8)) | ((uint16_t)((hostshort & 0x00ff) 		<< 8));
    }
      short >> 8)) | ((uint16_t)((hostshort & 0x00ff) 		<< 8));
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值