目录
-
- 1.协议简述
- 2.网络分层结构
-
- [2.1 软件分层](#2.1 软件分层)
- [2.2 网络分层](#2.2 网络分层)
- 是什么?
- [3. 网络与操作系统之间的关系](#3. 网络与操作系统之间的关系)
- 4.从语言角度理解协议
- 5.网络如何传输
- 不同网段、MAC、IP地址
- 端口号
1.协议简述
为什么要存在网络?网络主要解决什么问题?
核心问题就是计算机之间的距离变远了,数据传输变得不再那么方便了,所以有了网络,而距离变远必然会引发新的问题(可靠性、主机定位等 ),所以我们的网络协议就是为了解决这些问题,所以协议就是一种解决方案
首先我们要知道,协议是一种约定,计算机协议,就是计算机之间的约定
而在网络中的协议是为了减少我们的通信成本,主要是沟通成本
通俗来讲就是:
计算机生产厂商有很多;计算机操作系统, 也有很多; 计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;
2.网络分层结构
2.1 软件分层
在计算机领域有一句经典名言
任何问题都可以添加一层软件层来解决
层和层之间是松耦合的,可以随时替换或者方便维护
2.2 网络分层
为什么?
既然协议是一种解决方案,一个好的方案是要可扩展的,方便维护的,所以网络协议就被设计为层状结构了
是什么?
OSI七层模型
-
OSI(Open System
Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
-
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
-
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
-
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整.
通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解
TCP/IP五层(或四层)结构
但我们工程使用一般用的是TCP/IP五层(或四层)结构
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
- 物理层(底层硬件): 负责光/电信号的传递方式. 网卡、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决
定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层 - 数据链路层(驱动软件): 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层
- 网络层(操作系统内部实现、IP): 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层
- 传输层(操作系统内部实现、TCP): 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机
- TCP/IP等都是在操作系统内部实现的,所以网络也属于操作系统源代码的一部分
- 应用层(网络库、软件、系统调用、用户空间): 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
一般来说:
- 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容
- 对于一台路由器, 它实现了从网络层到物理层
- 对于一台交换机, 它实现了从数据链路层到物理层
- 对于集线器, 它只实现了物理层
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
3. 网络与操作系统之间的关系
拿Windows与Linux系统举例,这两个系统中的内部实现比如内存管理或者进程管理是不一样的,那他们为什么可以通信呢,因为尽管他们内部实现不同,但他们在网络上都要遵循上述的OSI七层或者TCP/IP五层模型,所以他们之间可以通信
世界上所有的操作系统只要想入网,就必须遵守TCP/IP协议,保证不同主机之间的通信
4.从语言角度理解协议
既然有了协议约定,那么 协议双方传递的的数据就是都双方能识别的结构体数据类型,这就是约定
5.网络如何传输
局域网通信(同一网段)
在我们的世界,是先有局域网再有互联网的,各种各样的局域网组合通信构成了我们的互联网
同一网段内的两台主机如何进行文件传输呢?
首先,文件传输的过程都一定要遵守上述所讲的模型(TCP/IP),如下图所示

加入我们的用户A要传递一个C信息,这几个要经过一些规定的路径和流程才能到达用户B
- 我们要传递的信息作为有效载荷,从用户层一层一层向下传递
- 每到一层我们都要加上这一层的协议报头
- 这种协议报头+有效载荷的结构我们称为报文,报文不断被自定义向下交互的过程,不断添加每一层的协议报头,我们叫做封装
- 每一层的报文在每一层都有着自己的名称(数据段、数据报、数据帧)
- 当A用户的信息自顶向下封装传输到B用户的底部时,B用户又要开始将这些报文解包和分用
- 自底向上没到一层解除对应层的协议报头,直到信息到达用户层,我们的报头中一般包含了上层协议是谁
因此任何协议:
1.可以将报头和有效载荷进行分离
2.可以将自己的有效载荷交付给上层的协议

不同网段、MAC、IP地址
对于跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器

这里我们要了解两个重要的地址,MAC与IP地址
路由器一般至少要跨越两个子网,所以要有两张网卡,也就是要有两个MAC地址
在我们数据运输的过程,报文带有两套地址
- 源IP与目标IP地址
- 源mac与目标mac地址
源IP与目标IP地址是一直不变的,就比如我们坐火车去北京旅游,我的源IP地址是家,目标IP地址是北京,这个一直不会变
而在去北京的过程我们会经过许多站,比如我现在在长沙,我的源mac地址就是长沙,我的下一站是武汉,我们的目标mac地址就是武汉,mac地址会随我们站的改变而改变
IP地址就像是方向,永远不变,mac地址就像我们的坐标,表明当前位置和指引下一步
端口号
我们要明白,网络通信的本质其实就是进程在帮我们进行网络通信(进程间通信)
我们知道IP地址可以标识唯一的一台主机,而端口号port可以标识该主机上唯一的一个进程,两者结合起来就可以标识互联网中的唯一一个进程(源IP地址、源端口号 | 目的IP地址、目的端口号)
所以客户端和服务器端都可以通过上述方式唯一的找到彼此,上述这种基于IP地址加端口号的通信模式我们称为套接字通信(socket通信)
- 端口号(port)是传输层协议的内容,是一个2字节16位的整数
- 用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理
- IP地址 + 端口号能够标识网络上的某一台主机的某一个进程
- 一个端口号只能被一个进程占用
- 一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定
我们知道 pid 表示唯一一个进程,但此处我们的端口号也是唯一表示一个进程,为什么要有端口号,两者又是什么关系呢?
- 为什么要有端口号
不要与系统向耦合,OS中每个进程都有PID,但不是每个进程都要有端口号(port),专事专办
2.两者关系
1.两者关系有点类似于哈希,有了port,就可以通过port在哈希表中找到相应的PID(绑定)