1. 前言
本篇文章开始,会正式学习网络,网络编程的本质依然是使用系统调用,所以这里就不另外开辟专栏来讲解网络,而是直接将系统和网络放在一起,望大家理解!
2. 初识网络
网络其实就是进程间通信的一种,跨网络通信是在不同主机上进行的(比如我在杭州要访问软件QQ,而QQ的服务器进程可能在深圳),而通信的复杂度是和距离成正比的.跨网络通信需要解决一些问题,比如:
- 如何处理在网络中获取的数据?
- 在网络中丢包了应该咋办?
- 怎样定位要访问的主机或要访问的进程?
- 现实生活中有很多路由器可以当网络的跳板,怎样知晓下一跳往哪儿走?
为了解决上面的一些问题,要制定协议
协议的本质就是一层软件层
而像大家听说过的HTTP,TCP/IP协议
就是在这种场景下诞生的
四层模型以及它们的协议:
- 应用层(HTTP协议)
- 传输层(TCP/UDP协议)
- 网络层(IP协议)
- 数据链路层(ARP协议)
物理层偏向硬件,所以后续不会讲解
3. 网络为什么需要分层?
先说结论,进行网络分层的原因:
- 场景复杂,分层利于拆分复杂场景
- 功能解耦,便于后续进行各种维护
还有一点,网络编程使用的是系统调用.
- 应用层对应shell,应用软件等
- 传输层和网络层对应操作系统
- 数据链路层对应的是驱动板块
- 而物理层对应的是硬件
4. 网络传输的基本流程
首先我们需要明确下面的观点:
- 每一层都有自己的协议定制的方案
- 每一层都要有自己的协议报头(字段)
- 从上到下交付数据时,要添加报头
- 从下到上递交数据时,要去掉报头
5. 初识IP地址和MAC地址
认识IP地址:
IP协议有两个版本, IPv4和IPv6.
我们只讲IPv4,也是最常用的
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
认识MAC地址:
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
IP地址和MAC地址的区别:
6. 总结
本篇文章着重讲解网络的基础知识,
意在为后面的网络学习打下基础