目录
?编辑以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器?编辑4.5封装和分用
在计算机网络中,IP地址是一个很重要的概念,它是用来标识网络主机,其它网络设备(如:路由器)的网络地址。简单来说,IP地址用于定位主机的网络地址。
各式:我们一般常用的IP地址的ipv4格式的IP地址,它是一个32位的二进制数字。通常被分割为4个八位二进制树,但我们为了表示方便,通常会使用点分十进制来表示。如:
192.168.1.1
特殊ip:127.0.0.1 本机环回。主要用到本机和本机的网络通信(系统内部为了测试性能用到的。不会走网络的方式传输),在我们后续编程的时候,这是常见的开发方式。
在通信子网中,IP地址用于表示主机网络地址,端口号可以表示主机发送,接受数据的进程。简单通俗易懂的话来说:端口号就是标识主机中的进程。
格式:端口号是两个字节,也就是0-65536范围内的数字,但是一般来说 0-1024这些端口是知名端口,如https这些。我们在使用的时候也不用,所以我们使用的端口就是1025-65535这些。
两个不同的进程不能绑定同一个端口,而一个进程可以绑定多个端口。
注:如何去理解端口和IP地址,就好比在买快递的时候IP地址是是你家小区的地址,而端口号是你的手机号码,通过IP地址找到你家小区,在通过手机号码精准定位到个人。一个人可以有多个手机号码(端口号),而一个手机号码不能被多个人使用。
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。通常由三要素组成 语法,语义,时序。
?
1. 语法:即数据与控制信息的结构或格式;
类似打电话时,双方要使用同样的语言:普通话
2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。
类似打电话时,说话的内容。一方道:你瞅啥?另一方就得有对应的响应:瞅你咋的!
3. 时序,即事件实现顺序的详细说明。
时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是
异步传输。
女生和男生的通话,总是由男生主动发起通话,而总是在男生恋恋不舍的时候,由女生要求
结束通话
协议(protocol)最终体现为在网络上传输的数据包的格式
就好比我去相亲的时候,提前对好暗号。天王盖地虎,小鸡炖蘑菇。这种就叫协议。是一种提前的约定。
系统的端口范围是0-65535,而0-1024是知名端口。这些端口是留给服务端程序绑定广泛使用的应用层协议。如:
22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议
以上只是说明这些端口号用于绑定知名协议,但是某个服务器也可以使用1024-65535范围内的端口来绑定知名协议。
在TCP/IP协议中,用五元组来标识一个网络通信:
1.源IP:标识源主机
2.源端口号:表示源进程 发送数据的进程
3 目的IP 表示目的主机
4 目的端口号:标识目的进程,即接受数据的进程
5 协议号:标识发送进程和接受进程双方约定的数据格式
为了方便我们理解以及更方便,分工明确的网络通信。我们把网络协议氛围好几个层次来定义。
常见的有OSI七层网络协议,还有TCP/IP五层网络协议(有的教科书上说是四层,四层的忽略掉了物理层)
为什么需要网络协议的分层?
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类
(使用方,使用服务):
对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
这样能更好的扩展和维护,如下图
OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传
输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通
过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
?
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现
TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
应用层:负责应用程序之间的沟通,在运行在主机的时候,程序会变成进程,会有很多应用层协议来规范各应用层之间的通信。如:,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层
传输层:负责两台主机的数据传输,如传输控制协议(TCP).能够确保数据可靠的从源主机发送到目标主机。
网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式来规划出两台主机之间数据传输的合理路线,路由器就是在网络层工作的。
数据链路层:只关心相邻设备之间数据的传输。负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线
上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工
作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层
物理层:负责光/电信号的传递方式,比如现在的以太网通用的网线,早期以太网采用的同轴光缆,光纤。以及WiFi无线网使用电磁波都属于物理层的概念。
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也就是TCP/IP五层模型的下四层
对于路由器,它工作在网络层,实现了网络层到物理层,也就是下三层
对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
对于集线器,它只实现了物理层
注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设备都是传统意义上的交换机和路由器
?
以下为跨网段的主机的文件传输:数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
4.5封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报
(datagram),在链路层叫做帧(frame)。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中
的 "上层协议字段" 将数据交给对应的上层协议处理
下面是数据封装的过程:
注意,这些都是类似于字符串拼接的过程。
下面为数据奋用的过程: