**
计算机网络背景
**
网络发展史:一个网络由路由器星形发散
局域网
1、指覆盖范围在1000米以内的网络
2、计算机的数量较多,通过交换机和路由器连在一起,也被称为服务器。
城域网:
1、指覆盖范围在10~20Km
广域网:
1、指覆盖范围更大
2、将远隔万里的计算机连在一起
总结:
交换机:
记录相互连接的计算机的mac地址进行数据交换
路由器:
在数据交换的基础上增加了网络标识,给网络中的数据找到合适路径,实现原端到对端。(这里有协议和ip地址的知识)
还有什么互联网Internet网:指具有国际范围的广域网
以太网令牌环网:指典型的组网方式
**
网络中的地址管理
**
认识IP地址-----ip协议有两个版本,, IPv4(unit32_t)和IPv6(unit8_t ip[16])。
1、ip地址在ip协议中,标识网络中不同主机地址,不能重复。
2、对于ipv4,i是一个4字节,32位整数。
3、通常使用“点分十进制”字符串表示IP地址,192.168.0.1,.以一个字节一个字节分割。
因为IP地址只有2的32次方个范围,是不够使用的—问题。
有两个技术可以应急一下这个情况–只能应急不能根本解决问题。
1、DHCP,动态分配ip,谁上网给谁,但是同一时间上网人多就不行了
2、NAT,网络地址转换,1000多人用一个ip来上网。
ipv6的出现–根本解决ip地址不够用的问题–不够现实,推广慢,导致互联网公司换程序和硬件的更换
增加了ip的地址范围,是一个128位的整数。
认识mac地址–
1、mac地址用来识别数据链路层中相连的结点
2、mac地址是一个6字节,48位整数。
3、通常使用十六进制加:表示,08:00:27:03:fb:19
4、mac地址在网卡出厂时就确定了,通常是唯一的(有些网卡支持用户自己配置mac地址),(虚拟机的mac地址不是真实的mac。可能会冲突)
认识PORT端口号:–一个端口就是一个通信通道
网络通信中一台主机上的进程的标识符,2个字节16位的整数。
1、为什么不用进程pid来表示每一个进程的标识符?
因为机子重启,每一个进程的标识符就会改变
2、一个端口只能被一个进程占用,但是一个进程能使用多个端口。
**总结:**网络通信中的每一个数据,都要包含源端ip,端口和对端ip端口,才能通过交换机转换到互联网中,然后在互联网根据路径选择去哪里。(哪个主机的哪个进程到哪个主机的哪个进程)
**
网络协议初识
**
网络通信协议(数据格式约定)
1、网络通信中的数据格式约定。 遵循统一的通信协议标准,才能实现实质通信,网络互联
2、整个网络通信环境中有很多通信协议–,每一个协议应对不同的通信场景。
协议分层–场景不同,服务不同,协议也不同–进行层次划分
上边的例子,协议只有两层,语言层协议,不同设备的协议
但是网络的通信比较复杂。
分层的好处–可以封装,面向对象的例子。–将不同层次的协议封装起来,在不同的层次去使用。
**
OSI七层模型
**
1、osi开放系统互连,逻辑上定义和规范
2、将网络从逻辑分为七层,每一层都有相对应的物理设备。
3、osi七层模型是框架式的设计方法,只要功能让不同类型的主机进行数据传输。
4、最大优点将服务、接口、协议概念明确分开,理论比较完整。这个模型可以使不同系统不同网络不同主机之间可靠传输。
5、七层的这个不实用,使用五层的来学习。
//只需要了解每一层名字
**
TCP/IP五层(或四层)模型
**
1、TCP/IP是一组协议代名词,里边有很多协议。
2、TCP/IP通信协议采用5层结构,每一层呼叫下一层 所提供的 网络完成需求
应用层负责程序间的沟通;简单电子邮件(smtp)
文件传输协议(ftp),网络远程访问协议(telnet),HTTP超文本传输(打游戏,浏览网页),网络编程主要针对应用层。
传输层负责两台主机进程间数据传输;传输控制协议TCP,UDP,端口。确保数据可靠传输
网络层负责地址管理和路由选择;ip协议中,用ip地址来标识一台主机。通过路由器的路由表方式规划两台主机之间的数据传输线路。
数据链路层负责相邻设备之间的 数据帧传送和识别传输。网卡设备驱动,帧同步(从网线检测到什么信号算作帧开始),冲突检测(检测到冲突自动重发),数据差错校验。有以太网(ETH),令牌环网,无线lan等标准,交换机在这一层(相邻设备之间的mac地址)
物理层负责光电信号的传递方式,以太网通用的网线(以太网藐视的介质传输),早期的同轴电缆,现在的有线电视, 光纤,wifi(使用的电磁波)都属于物理层概念,集线器工作在物理层。
一般而言:
对于程序员,实现了应用层到物理层
对于一台主机,它的操作系统实现了从传输层到物理层的内容。
对于一个路由器,它实现了从网络层到物理层
对于一台交换机,实现了从数据链路层到物理层
对于集线器,只实现物理层。
有的交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(端口转发)
**
网络传输基本流程
**
数据的封装和分用
1、不同的协议层 对数据包有不同的称谓。传输层叫段,网络层叫数据报,链路层叫帧
2、应用层数据 通过协议栈发送到网络上时,每层协议都加上一个数据首部,称为封装。
3、首部信息包含了 类似首部有多长,载荷有多长,上层协议是什么等信息。
4、数据封装成帧 发送到传输介质上,到达目的主机每层协议剥掉相应的首部,根据首部上层协议字段 将数据交给对应上层协议处理。
跨网段的主机之间数据传输,一台主机到另一台主机要经过一个或多个路由器。
数据封装过程
数据分用过程
我的厚厚的笔记也有一个自己画的图,可以理解一下。
**
网络字节序
**
主机字节序:
一台主机上cpu对 内存中数据 以字节为单位进行存储 的顺序。
分类:
大端:低地址存高位
小端:低地址存低位
如何判断大小端机
1、联合体
union{int a;char b;}tmp_t;tmp_t tmp;tmp.a = 1;if(tmp.b == 1){小端};else{大端};
2、类型强转
int a = 1;char* b = (char*)&a;if(*b == 1){小端}else{大端};
主机字节序主要强调存储单元大于一个字节的数据类型 short,int,long,double
判断大小端时,用char1 个字节来验证其高低地址如何存储的,判断大小端。
struct{char ch1;--//不涉及字节序char ch2;int a;//涉及字节序}s;//自定义类型不涉及字节序//只有内置类型大于一个字节的 才涉及大小字节序//一个数组也不涉及字节序//涉及字节序的都是某个独立的基础数据类型(也就是自定义类型里边的成员变量--数组的单个元素)
主机字节序对网络字节序的影响:两个不同主机字节序的主机进行数据通信会产生数据二义性。–问题
想要避免这个问题,使用网络字节序解决,需要网络字节序提供一个统一的标准–大端字节序。
1、如果是小端,在网络通信中,将数据转换为网络字节序大端 然后进行传递。
2、如果是大端,在网络通信中,不需要转换直接进行传递。
3、如果两个机子都是小端,你可以考虑不使用网络字节序。
//转换代码的函数#include<arpa/inet.h>uint32_t htonl(uint32_t hostlong);//主机-网络uint16_t htons(uint16_t hostshort);//主机-网络 16位uint32_t ntohl(uint32_t netlong);//网络-主机uint16_t htonl(uint16_t netlong);//网络-主机
网络基础1--计算机网络背景-局广城网范围 还有其他各种网 交换机路由器概念 ip地址 mac端口了解 网络协议 五层模型 传输中数据封装和分用 网络字节序 主机字节序如何判断。