网络基础与套接字的学习
一 认识协议
1.什么是协议:就是一种约定,这种约定是分层的,一层一层进行约定好的通信规则。
在我们对于协议的理解呢,一共是有两种角度的
第一个就是初学者的角度:认为协议就是同层的,是可以直接进行通信(下面我们会介绍通信)
第二个就是工程师的角度:认为协议就是同层的,但是并不是直接通信的。
1.1什么是分层的
举个例子呢,我们两个人再用电话交流,其实这里面就分了两层:第一层就是人与人之间的交流,用的都是中文,这是语言层,第二层呢就是交流设备层,都是运用的是电话。
而在我们网络里呢,想要通信,有明确规定的分层。
1.1.1OSI 七层协议(Open System Interconnection) --这是国际上的规定标准
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
这七层分别都有对应的功能:
物理层(Physical Layer)
物理层是最底层,负责处理与传输介质相关的细节,包括电缆类型、信号强度、接口类型等。
它定义了电压水平、数据传输速率、物理连接器类型及网络拓扑等规范。
数据链路层(Data Link Layer)
数据链路层确保两个直接相连的节点之间能够可靠地传输数据帧。
它提供了错误检测与纠正功能,并且管理着物理地址(如MAC地址)以识别网络上的设备。
网络层(Network Layer)
网络层负责路由选择,即决定数据包从源到目的地的最佳路径。
这一层使用逻辑地址(如IP地址)来标识不同的网络和设备,并处理数据包的转发。
传输层(Transport Layer)
传输层提供端到端的数据传输服务,确保数据完整无误地到达目标应用程序。
它支持流量控制、错误检测与纠正,以及分段重组等功能。常见的协议有TCP和UDP。
会话层(Session Layer)
会话层管理用户会话和对话控制,允许程序在不同机器间建立、管理和终止会话。
它还提供了同步点机制,使得通信可以在中断后从中断点继续进行。
表示层(Presentation Layer)
表示层关注的是数据格式和编码转换,确保信息可以被接收方理解。
它负责数据加密/解密、压缩/解压缩以及数据格式转换等任务。
应用层(Application Layer)
应用层直接面向最终用户,提供了各种网络服务,如电子邮件、文件传输、远程登录等。
它包含了多种协议,比如HTTP、FTP、SMTP等,这些协议支持具体的应用程序需求。
这些定义出来的功能,不用硬记,我们能未来的学习一点一点都会慢慢了解。
而在我们学习的过程中呢,其实更方便的是五层协议,这个更加实用与简便,所以我们以五层协议开始学习。
1.1.2 五层协议
分层的意义是什么呢,为什么要分层?
分层其实在解决的就是解耦合,我们追求的就是解耦,解耦是减少组件之间的依赖关系,方便以后的修改,来简化复杂的系统,而分层就是解耦合的一种有效方式,提高了可维护性---①方便检查问题 ② 可读性高
1.2 认识IP地址和MAC地址
1.2.1
IP地址 :IP地址是在IP协议中,用来标识网络中不同主机的地址;
什么是IP协议:是网络层的核心协议之一,它负责在多个网络之间进行数据包的发送与路由选择,IP协议有两个版本,IPv4和IPv6。
MAC地址:MAC地址用来识别数据链路层中相连的节点;
用西游记的故事来类比看待这两个地址。
在西游记中,唐僧每经过一个地方,都会问你是从哪里来的,要到哪去,唐僧都是回答从东土大唐而来要到西天取经,而唐僧会问去最近的下一站是到哪。、
而IP 地址就是长期目标 :源IP地址->目的IP地址。它是由路由器分配的(局域网下)
MAC地址就是短期目标 : 源MAC地址->目的MAC地址。它是由MAC地址由设备制造商在生产时分配,它的主要目的就是在同一个局域网下进行数据的传输。
1.3 IP地址和端口号
刚才介绍死了什么是IP地址,接着我们介绍端口号,并看看IP地址和端口号一起的作用。
什么是端口号 :用于标识网络通信中特定进程或服务的数字地址。说白了是什么呢。在Linux中我们都学习过进程,而端口号可以确定唯一一个进程。(PCB里面的进程标识符,那个是操作系统里面的进程,现在说的是网络的进程)。
而IP地址地址的作用是标识唯一一台主机,加上端口号的作用就是,确定一台主机下的一个进程,进行数据的传输。
1.4 端口号和进程标识符PID
PID 我们之前学过,它就可以确定出唯一一个进程,那为什么还要再弄一个端口号呢?
如果用PID,在技术上肯定也是可以找到这个你要找的进程的,但是PID是属于操作系统里面的,如果网络层也用这个,那么系统一旦修改PID,网络层上也要修改,所以为了解耦,简化该复杂的操作,在网络上再用端口号确定一个进程。其次就是不是所有的进程都要进行网络通信,但是所有的进程都要进行管理,怎么管理--小描述再组织,每个进程都必须要PID。
如何确定端口号呢?
举个例子,假如是腾讯公司的QQ这个进程,它是广为通用的,而且服务器也是该公司开发,这两个是并用的,所以这个东西是默认确定的,我们并不需要关心,只要想要通信,他就会默认知道。
1.5 TCP 和UDP
TCP是一种面向连接、可靠的传输层通信协议。它确保了数据能够准确无误地从一个端点传送到另一个端点。
TCP的特点是:传输层协议,有连接,可靠传输,面向字节流。
UDP是一种无连接、不可靠的传输层协议。它的设计目标是快速传递数据,但不保证数据一定会送达目的地,也不保证数据包按序到达。
UDP的特点是:传输层协议,无连接,不可靠传输,面向数据报。
!!我说的这些都是它两各自的特点,并不是优缺点,因为 Every coin has two sides。每个硬币都有两面性,TCP可靠,那么它一定实现起来更复杂,因为要三次握手它的传输时间会更长,UDP虽然并不可靠,但是实现肯定更简单。
什么是字节流---可以理解为水流,家里有自来水,你要一杯,就接一杯,要一桶就接一桶,这就是字节流,相当于你在文件里面写东西,你想读多少就读多少
什么是数据报---可以理解为整个的快递,你买快递,拿到手多少盒快递,都是看商家给你怎么发,你要是拿的话,只能全部拿完,不能拿半盒快递吧,这就相当于,发送端给你发送的数据,你必须全部接收。