文章目录
- 前言
- 一、网络基础知识
- 网络协议
- 协议分层
- OSI七层模型
- TCP/IP五层(或四层)模型
- 认识IP地址
- 认识MAC地址
- 数据包封装和分用
前言
Linux系统编程已经告一段落,但是我们在学习LInux系统编程所积累的知识,将仍然与后面网络知识强相关,学习网络的同时也是在复习系统知识。
一、网络基础知识
对于网络,我们并不陌生,就像现在你看我的文章,也是通过网络实现的,与朋友在微信、qq聊天也是通过网络。那么我们的网络数据是通过怎样的方式来传播的呢?
网络协议
从现实生活中,我们全球拥有许多不同的语言,例如汉语,英语,德语。 我们与自己的父母进行谈话用的都是汉语,所以我们才能互相知晓对方的意思。 但是如果你不懂德语却与一个德国人对话,那么你们就会拥有沟通障碍。
对于网络通信也是一样,全球各地拥有许多计算机厂商,会研发出各种各样的网络硬件设备,如果他们不统一网络协议,那么网络通讯就无异于我们与外星人交流一样。
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守,这就是 网络协议。
协议分层
要实现网络通讯,不仅仅只有一套协议,而是有许多套协议,而有的协议解决的并不是同一个问题,所以就需要协议分层。
OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型。
认识IP地址
IP地址是在IP协议中, 用来标识网络中不同主机的地址
;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
IP地址是可以标识全网唯一的地址,所以要进行网络通信,发送方就必须要知道接受方的IP地址。
认识MAC地址
MAC地址用来识别数据链路层中相连的节点。
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
例如在以太网中,就可以通过MAC地址来查找对应主机。
数据包封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
以上图为例,当客户要通过网络发送数据,需要从应用层自下传输,且每经过一层都会封装对应的报头。 服务器再自上解包数据包。
1.应用层封装请求数据,向下交付给传输层。
2.经过传输层 封装 tcp协议相关报头,向下交付给网路层。
3.经过网络层 封装 ipv4 或ipv6协议与端口号相关报头,并且这里需要添加发送方和接受方双方的IP地址和端口号,向下交付给数据链路层。
4.经过数据链路层封装以太网MAC相关报头,将报文数据交给以太网,
5.经过以太网解包将数据链路层报头和其有效载荷分离,将剩下的报文交给对应主机或者路由器。
6.路由器拿到目标IP地址后,查到目标IP地址,再向下交给自己的令牌环驱动程序,并封装令牌环报头。
7.令牌环驱动程序再根据其令牌环报头的目标MAC地址,找到并将报文对应主机的令牌环。
8.令牌环解包将数据链路层报头和其有效载荷分离,将剩下的报文向上交付给网络层。
9.网络层解包将网络层报头和其有效载荷分离,将剩下的报文向上交付给传输层。
10.传输层解包将传输层报头和其有效载荷分离,最后得到请求数据向上交付给应用层。