目录
一.网络的发展史
二.网络通信基础
2.1IP地址
2.2端口号
2.3认识协议
2.3.1协议是什么?
2.3.2为什么需要协议?
2.3.3OSI模型和TCP/IP体系结构
三.网络通信的原理
总结
个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
本文由 tq02 原创,首发于 CSDN
本章讲解内容:网络的通信基础多线程学习专栏:多线程学习专栏
其他学习专栏: C语言 JavaSE MySQL基础
问: 网络是现在生活当中必不可少的存在,可是网络的发家史是什么呢?
答: 网络的发展史可以追溯到早期的ARPANET,它是一个由美国国防部高级研究计划局(ARPA)创建的计算机网络。在1983年,ARPANET被划分为两个独立的网络,包括ARPANET和MILNET(军用网络)。这促进了互联网的发展,使得任何两台电脑都可以相互通信,没有特定的设备、路由器或网络中心控制数据流向。
局域网LAN (Local Area Network)
是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建网络的方法有:
注:路由器上有2种口,一种Lan口,另一种是Wan口,Lan口负责连接主机,Wan口负责连接运营商的机房,提供网络。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
从网络发家史中,我们可以知道网络互连的目的是进行网络通信,也就是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
问:在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?
答:需要使用IP地址了。
问:由哪个进程来接收这个数据呢?
答:使用端口号
问:我承认你的确收到了我的数据,但是你可忘记了数据可是二进制数据,你如何得知原本数据呢?
答:这就需要靠协议了
抽象表达:快递员通过IP地址,找到你家,由收货人(端口号)来接收快递,快递拆开是加密的信息,需要使用协议解密,才能得到原本的信息。
概念:主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
格式:IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个节) 例如:01100100.00000100.00000101.00000110 但通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式:100.4.5.6。
特殊ip:127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1,本机环回主要用于:本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
概念:端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
格式:端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢? 基于网络数据传输,需要使用协议来规定双方的数据格式。
概念: 网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
通常由三要素组成:
例如地下情报组织,潜伏者需要事先和接应人员约定各自带一本书,头戴帽子,这就是一种约定,也是一种协议。
不同计算机厂商中生产的计算机需要进行通信,传递各种各样的信息,则需要约定双方的数据格式,因此出现了一个标准,让大家的计算机都可以给彼此通信,这就是网络协议。
协议分为2种,一种存在于教科书的OSI七层网络协议,另一种则是TCP/IP五层协议。
二者的联系:为了实现不同体系结构的计算机网络之间的互联,国际标准化组织定义了开放系统互联基本参考模型OSI/RM(Open Systems Interconnection Reference Model),即OSI模型。OSI模型采用了七层协议体系结构,理论上较为完善,但在实践中过于复杂并不实用。因此,简化出了TCP/IP体系结构,并得到了广泛的应用。
分层的作用:为了降低复杂性、实现协调工作、解决不同体系结构之间的互联问题,并提供更加可行和实用的解决方案。
OSI模型
- 物理层:提供了数据在物理介质上传输的能力。
- 数据链路层:负责相邻网络设备之间建立、维护和拆除,确保数据的无差错传输。
- 网络层:负责在不同网络设备之间选择最佳路径,实现数据包在网络的路由选择、转发。
- 传输层:提供端到端的可靠传输服务,包括数据包的分组、传输、接收和错误恢复。
- 会话层:确保通信系统中两个应用程序会在一个会话当中进行多次交互。
- 表示层:确保数据可以在不同系统之间通信
- 应用层:处理与具体应用程序相关的通信,为应用程序提供网络服务接口,可以使应用程序能够使用网络进行数据传输和接收。此层协议通常有:HTTP、FTP、SMTP、DNS、DHCP等
注:OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。 实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。
TCP/IP 五层(或四层)模型
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远 程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
- 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发 送到目标主机。
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
- 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线 上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工 作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
- 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的 同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。 物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
而为什么有时候又称为4层模型,因为物理层又偏向于硬件,考虑的比较少。
两种模型之间的关系:
根据网络设备所在分层,分层了3种,应用程序、操作系统、设备驱动程序与网络接口。
两台计算机通过TCP/IP协议通讯过程:
注:在网络层时,数据也可能会存在从一台计算机传输到另一台计算机中会经过多个路由器。
------------------------------》以QQ发送信息为例子《--------------------------------
发送者情况:
1.应用层,输入的信息,构造成应用层数据报,指按照一定格式进行字符串拼接。传递个传输层
2.传输层,传输层有很多种协议,主要使用TCP和DCP,假设此处使用UDP,然后将UDP数据报传递给网络层。注:UDP不会处理应用层数据报的内容。
3.网络层,网络层的主要协议,IP协议,然后传递个数据链路层。注:IP协议不会处理UDP数据报。
4.数据链路层,以太网会针对IP数据报,进行进一步封装,填上数据头和数据尾,当然以太网也不会处理IP数据报。然后传递给物理层
5.物理层,硬件设备需要对上述数据进行转换了,例如:光信息、电信号、电磁波。
以上便是发送者发生信息后,信息的主要传输过程。
接收者情况
1.物理层,硬件设备(网卡),收到光信号/电信号/电磁波,得到了一串二进制数据,也就是以太网数据帧
2.数据链路层,以太网协议,针对这个数据报进行解析,载荷部分交给网络层。
3.网络层,根据IP协议,去掉IP报头,将载荷交给传输层
4.传输层,根据IP报头中的信息,可以知道当前载荷是UDP数据报,交给UDP处理,再取出载荷交给应用层。
5.应用层:根据UDP报头可以得到目的端口,根据目的端口可以找到相关联的应用程序,然后对载荷进行解析,再将数据显示
额外补充:
系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如:
- 22端口:预留给SSH服务器绑定SSH协议
- 21端口:预留给FTP服务器绑定FTP协议
- 23端口:预留给Telnet服务器绑定Telnet协议
- 80端口:预留给HTTP服务器绑定HTTP协议
- 443端口:预留给HTTPS服务器绑定HTTPS协议
在TCP/IP协议中,用五元组来标识一个网络通信:
- 源IP:标识源主机
- 源端口号:标识源主机中该次通信发送数据的进程
- 目的IP:标识目的主机
- 目的端口号:标识目的主机中该次通信接收数据的进程
- 协议号:标识发送进程和接收进程双方约定的数据格式
网络通信的数据传输需要经过封装和分用,发送者进行封装,接收者进行分用
封装:每层协议都要加上一个数据首部(header),首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息,例如传输层使用了UDP协议还是TCP协议。
分用:到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理