文章目录
网络基本概念
- 局域网 (LAN):在小范围内的计算机互联网络。这个"小范围"可以是一个家庭,一所学校,一家公司,或者是一个政府部门。局域网(LAN)上的每一台电脑(或其他网络设备)都有一个或多个局域网IP地址(或者说私网、内网IP地址),局域网IP地址是局域网内部分配的,不同局域网的IP地址可以重复,不会相互影响
- 广域网 (Wide Area Network,WAN):也称远程网 。所覆盖范围从几十公里到几千公里,能连接多个城市或国家,或横跨几个大洲提供远距离通信,形成国际性的远程网络。广域网上的每一台电脑(或其他网络设备)都有一个或多个广域网IP地址(或者说公网、外网IP地址),广域网IP地址一般要到ISP处交费之后才能申请到,广域网IP地址不能重复
- 协议:网络协议是为了实现网络上各种设备之间的通信而制定的规则,它提供了统一的方式和规范来实现数据的传输和交换,网络协议具有统一性、标准化、可扩展性、透明性、可靠性、安全性 等特点。常见的网络协议有:TCP/IP协议、HTTP协议、UDP协议、FTP协议、DNS协议、DHCP协议、SSH协议等。
协议分层
在网络传输数据时,我们会遇到很多问题,譬如:我们如何处理在网络中获取的数据?如何处理在网络传输中产生丢包的问题?如何去定位将要访问的主机?在现实生活中一个主机访问另一个主机并不是一下子访问的,中间需要经过无数机器作为跳板,那么在机器跳跃间,如何知道下一站在哪?
为了应对这些问题。我们定义了许多协议。而为了更好的服务互联网。就需要将协议在体系结构上进行划分,就是根据互联网所需要的服务和功能,在体系结构上分成若干个层次,协议的服务和功能与哪一层的服务和功能相对应,该协议就属于哪一层。每层协议层通过在该层中执行某些动作或使用直接下层的服务来提供服务。协议分层具有概念化和结构化的特点,通过协议分层来研究讨论系统组件,会使系统组件的更新更容易。
网络协议是网络上所有设备之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。
各个分层的所有协议被称为协议栈 。因特网的协议栈由5个层次组成,自顶向下为:应用层(由应用层、表示层、会话层组成)、运输层、网络层、数据链路层、物理层(硬件)。此外,国际标准化组织(ISO)定义了一种叫开放系统互连模型(OSI)的7层协议栈,自顶向下分别为:应用层、表示层、会话层、运输层、网络层、链路层、物理层。OSI模型除了比5层协议栈多两层外,其余5层与5层协议栈的同名对应层的定义基本相同。
OSI七层模型
OSI(Open System Interconnect),意为开放式系统互联。其各个层次的划分遵循下列原则:
-
同一层中的各网络节点都有相同的层次结构,具有同样的功能。
-
同一节点内相邻层之间通过接口进行通信。
-
七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。
-
不同节点的同等层按照协议实现对等层之间的通信。
示意图如下:
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太 网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层.
物理层我们考虑较少. 很多时候也称为 TCP/IP四层模型
一般而言
- 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)
网络传输基本流程
先看流程图:
当应用层想要发消息给对方时,并不是直接发给对方的应用层。而是先将上层用户的消息进行包装,然后向下贯穿协议栈,为什么要这么做?因为体系结构是这么规定的!
- 从应用层开始,添加完应用层的报头后,传输给传输层。
- 传输层如果需要发给对方,也需要加上自己的报头,再向下传递给网络层。
- 网络层也需要添加网络层的报头,继续向下传递给数据链路层。
- 数据链路层也需要添加数据链路层的报头,之后便可以通过以太网发送给对方主机。
在这个过程中,最底层的报头一定是封装在报文的最外侧。
什么是报头?
- 报头是双方都认识的结构化字段,在发送消息时将信息逐级封装报头,最后通过以太网发送至对方的主机,对方再将数据解包并向上发送,将自己的报头和有效载荷进行分离,最后对方获得原始信息
数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议 字段" 将数据交给对应的上层协议处理. 下图为数据封装的过程
网络中的地址管理
认识IP地址
IP协议有两个版本, IPv4和IPv6.
- 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地址).