linux-网络基础一
网络划分
网络的划分:
局域网(1000) --> 城域网(10公里) --> 广域网
所谓 “局域网” 和 “广域网” 只是一个相对的概念.
IP地址
IP地址:在网络中唯一标识一台主机—uint32 —无符号32位的整数
在网络通信中的每一条数据中都应该包含有目的IP地址 +源IP地址
- IPV4: IP地址无符号32位的整数决定了IP地址的个数:不到43亿–不够用
DHCP-动态地址分配(谁上网给谁分配IP地址)
NAT–网络地址转换技术(将数据中的源IP地址转换为中间转发设备的IP地址数据按照什么路径出去响应就应该按照什么路径回来)- IPV6: uint8_t ip[16]–不向前兼容IPv4—导致IPv6的推广使用特别的慢
MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
端口号:
端口号:在一台主机上标识一个进程–当计算机收到一个数据之后能够通过数据中的目的端口信息来决定这个数据应该交给哪个进程处理
每条网络中的数据都应该包含有:源端口+目的端口
uint16_t 0~65535
特性:一个端口号只能被一个进程占用; 一个进程可以使用多个端口号
协议
协议:通信双方数据格式的约定
协议分层:就是在通信换进中对每一层提供的服务以及接口还有使用的协议进行封装,使通信环境层次更加清晰,更加容易实现标准化;更加容易使用; 实现网络互联;
OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
分别是:应用层–>表示层–>会话层–>传输层–>网络层–>链路层–>物理层
TCP/IP五层(或四层)模型
应用层–>传输层–>网络层–>链路层–>物理层
应用层: 负责应用程序之间的数据沟通; HTTP/FTP/DNS/DHCP/SMTP
传输层: 负责端与端之间的数据传输; TCP/UDP
网络层: 负责地址管理与路由选择; IP; 路由器
链路层: 负责相邻设备之间数据传输; Ether; 交换机
物理层: 负债光电信号的传输;以太网协议;集线器
数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
网络通信数据传输的处理流程
网络字节序:
- 字节序: cpu在内存中对数据的存取顺序-针对存储大小大于一个字节的数据类型
- 主机字节序:一个主机的大小端字节序取决于cpu架构–X86 (小端),MIPS (大端),在网络通信中(两台不同主机之间的通信) -通信双方并不知道对方的主机字节序
小端:低地址存低位
大端:低地址存高位- 在通信过程中,通信双方有可能因为主机字节序不同而导致数据的义性(发送的数据,和对方获取得的数据不同)
解决方法:通信时,双方不管自己的主机字节序是什么,网络通信中的数据全部采用大端字节序格式在网络通信中使用大端字节序作为网络字节序标准