0
点赞
收藏
分享

微信扫一扫

TypeScript 实现的轻量级内存数据库 warehouse

乌龙茶3297 03-07 13:00 阅读 1

文章目录


#概述

网络发展史

https://zhidao.baidu.com/question/244362751.html
ARPnet–Internet–移动互联网–物联网–AI

局域网和广域网

局域网(LAN)

局域网的缩写是LAN,local area network,顾名思义,是个本地的网络,只能实现小范围短距离的网络通信。我们的家庭网络是典型的局域网。电脑、手机、电视、智能音箱、智能插座都连在路由器上,可以互相通信。局域网,就像是小区里的道路,分支多,连接了很多栋楼。

广域网(Wan)

广域网(Wide Area Network)是相对局域网来讲的,局域网的传输距离比较近,只能是一个小范围的。如果需要长距离的传输,比如某大型企业,总部在北京,分公司在长沙,局域网是无法架设的。广域网,就像是大马路,分支可能少,但类型多,像国道、省道、高速、小道等,连接了很多大的局域网。

这时需要其它的解决方案。
第一,通过因特网,只需要办一根宽带,就实现了通信,非常方便,现在的宽带价格也比较便宜。
第二,通过广域网专线。
所以为了数据安全,不能连接因特网,需要用一条自己的专用线路来传输数据,这条线路上只有自己人,不会有其他人接入,且距离很远,这个网络就叫 “广域网”。

光猫

光猫是一种类似于基带modem(数字调制解调器)的设备,和基带modem不同的是接入的是光纤专线,是光信号。用于广域网中光电信号的转换和接口协议的转换,接入路由器,是广域网接入。
在这里插入图片描述

路由器

用于连接局域网和外网
路由器需要区分WAN口和LAN口,WAN口是接外网的(从Modem出来的或者从上一级路由器出来的),LAN口是接内网的,现在路由器都带无线功能,本质上无线接入就是LAN。
在这里插入图片描述

IP地址

基本概念

●IP地址是Internet中主机的标识
●Internet中的主机要与别的机器通信必须具有一个IP地址
●IP地址为32位(IPv4)或者128位(IPv6)
●表示形式:常用点分十进制,如192.168.1.109,最后都会转换为一个32位的无符号整数。

地址划分

在这里插入图片描述
主机号的第一个和最后一个都不能被使用,第一个作为网段号,最后一个作为广播地址。
A类:1.0.0.1~126.255.255.254
B类:128.0.0.1~191.255.255.254
C类:192.0.0.1~223.255.255.254
D类(组播地址):224.0.0.1~239.255.255.254

网段号的定义:主机位全为0,代表当前设备所处的网段号
这个需要结合子网掩码来计算,子网掩码规定了哪些是网络号,哪些是主机号
如果子网掩码位是1,那么当前为就是网络号,如果是0,那么当前位是主机号
网段号=IP&子网掩码

特殊地址(后续编程使用)

0.0.0.0:在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。在程序里,用宏定义表示:INADDR_ANY
127.0.0.1:回环地址/环路地址,所有发往该类地址的数据包都应该被loop back。仅作为测试使用,只能实现本机上通信。

IP地址转换

实现了人看的IP(192.168.1.155)和机器内部使用(32位的无符号的整数)的实际IP进行转换。

struct in_addr {
    uint32_t s_addr;
};

 //从人看的ip地址转为机器使用的32位
typedef uint32_t in_addr_t;
in_addr_t inet_addr(const char *cp);

//从机器到人
char *inet_ntoa(struct in_addr in);  

例子:
给定一个IP地址,转换为机器的32位无符号整数,然后打印。
打印完后,再转回给人看的IP地址,再打印。

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char const *argv[])
{
    //把人看的转成机器要的,192.168.0.109
    char ip[64] = "192.168.0.109";
    in_addr_t ip32 = inet_addr(ip);
    printf("ip = 0x%x\n", ip32);  //0x6d00a8c0

    //把机器的转成人看
    struct in_addr in;
    in.s_addr = ip32;

    char *p = inet_ntoa(in); 
    printf("p = %s\n", p);  //0x6d00a8c0

    return 0;
}

端口

●为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区
●TCP端口号与UDP端口号独立
●端口号一般由IANA (Internet Assigned Numbers Authority) 管理
●端口用两个字节来表示–USHORT
●端口指定需要统一为网络字节序(大端)
众所周知端口:1-1023(1255之间为众所周知端口,2561023端口通常由UNIX系统占用)
注册端口:1024-49151(尽量用5000以上的)
动态或私有端口:49152-65535

字节序

网络中传输一字节以上的带类型的数据(比如short、int),必须使用网络字节序,即大端字节序。
小端序(little-endian) - 低序字节存储在低地址
大端序(big-endian)- 高序字节存储在低地址
面试题:写一个函数,判断当前主机的字节序?

int checkCPU()
{
	union w{
		short a;
		char b;
	}c;
	c.a = 1;
	return (c.b == 1);
}

主机字节序到网络字节序

uint16_t htons(uint16_t hostshort);

网络字节序到主机字节序

uint16_t ntohs(uint16_t netshort);

网络模型

网络模型

●网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。
●每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务
●网络体系结构即指网络的层次结构和每层所使用协议的集合
●两类非常重要的体系结构:OSI与TCP/IP

OSI模型(了解)

●OSI模型是一个理想化的模型,尚未有完整的实现
●OSI模型共有七层
●OSI现阶段只用作教学和理论研究
在这里插入图片描述

TCP/IP模型(重点)

在这里插入图片描述
网络接口和物理层:屏蔽硬件差异(驱动),向上层提供统一的操作接口。
网络层:提供端对端的传输,可以理解为通过IP寻址机器。
传输层:决定数据交给机器的哪个任务(进程)去处理,通过端口寻址
应用层:应用协议和应用程序的集合

OSI和TCP/IP模型对应关系图
在这里插入图片描述

TCP/UDP

TCP

TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。
适用场景
适合于对传输质量要求较高的通信
在需要可靠数据传输的场合,通常使用TCP协议
登录账户、文件传输等

UDP

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,不需要进行连接,可以进行高效率的数据传输。
适用场景
发送小尺寸数据(如对DNS服务器进行IP地址查询时)
适合于广播/组播式通信中。
音频、视频聊天等

举报

相关推荐

0 条评论