协议概览

现代社会,我们几乎每个人每天都在通过电脑或手机或平板使用互联网,但你是否想过,它是如何实现的(既网络中的设备是如何通讯互联的)?

人们为了达到这个目的,制定了的互联网中设备传输通讯的规范---网络通讯协议(简称网络协议 Protocol),无论是开发相关的硬件和软件都需要遵守它。

网络协议

网络协议不止一种,如NetBEUI、IPX/SPX、TCP/IP,前两种协议我们几乎很少接触,最后一个则是使用最多。
你平时了解的 IP地址,网关,子网掩码,DNS、HTTP 都属于TCP/IP的范畴,接下来我们讲的内容也都是TCP/IP协议。

TCP/IP协议

为了便于区分理解和解耦,该协议将网络的实现分为5层,每一层都有自己的功能,上层靠下层支持。

发生在应用层 开发人员在开发软件的过程中使用应用层协议发请求 如HTTP、FTP、SMTP,

发生在传输层 软件在执行的请求的过程中,则会调用更底层的网络API,发起下一步的传输层请求 如TCP、UDP, 比如浏览器内部解析页面中的HTTP请求时,会引入C++的socket库来发起TCP请求。 再比如安卓应用发起HTTP时候,安卓系统内部会将其封装为TCP协议再次传递网络层

发生在网络层 路由器或者电脑的操作系统内部接收到TCP或UDP请求时候,会将其数据封装成数据包,并添加IP头部信息,并传入到数据链路层。

发生在数据链路层 进一步将传入的数据包会被封装成帧

发生在物理层 物理层(的网络适配器也叫网卡、集线器、中继器、调制解调器等设备将)负责将帧处理为比特,并通过物理媒介(如网线、无线)将比特流传输到目的地。

最终执行的时候使用传输层协议请求传递给操作系统,
操作系统将使用为网络层协议请求继续传递网卡路由器等设备, 而网卡路由器则将请求数据通过网线传输

当用户在软件上执行某个操作时,软件会构造一个应用层请求(如HTTP、FTP、SMTP)。 这个请求通过操作系统的网络API被传递到传输层,并使用TCP或UDP协议进行封装。 然后,传输层将数据传递给网络层,并使用IP协议进行路由和封装。 接下来,数据链路层将数据包封装成帧,并通过物理层在物理链路上传输。 数据最终通过网线、无线信号等方式传输到目标设备,并在目标设备上逐层解封装,直到应用层接收到原始请求。

开发人员使用如HTTP、FTP、SMTP等应用层协议来编写软件,当用户使用这些软件触发这些请求时,解释执行软件的操作系统会构造一个调用一个网络API(如socket API) 开发人员在编写应用程序里的请求部分 生成需要发送的数据,并通过调用操作系统提供的的网络API(如socket API)向操作系统发送请求

应用层

这一层主要发生在应用程序,普通用户和开发人员接触到的最多。
比如远程文件操作的FTP协议、编程人员开发程序(web,桌面端、原生、小程序等)中用到的HTTP协议、使用电子邮件需要配置的SMTP协议等等,它们传输的数据格式是报文,如FTP报文、HTTP报文,SMTP报文。

传输层

虽然用户和开发者使用都是应用层协议,但这些软件的底层发出去的却都是传输层的协议,比如:
WEB开发人员使用的是HTTP,但是浏览器内部处理再向下转发的时候是基于TCP协议。
安卓应用使用的也是HTTP,但是当安卓系统执行到它时就会向下转发的时候是基于TCP协议。

TCP和UDP请求通常是由应用层软件(如浏览器、电子邮件客户端、FTP客户端等)发起的

其传输的数据是报文段格式(封装自来自应用层的报文)。 当然,除了这些软件底层转发数据会使用传输层协议外,为了满足日益增长的网络需求,很多编程语言直接对外暴漏UDP协议、TCP协议调用的API。

比如 浏览器或安卓解析http请求,将其转发给TCP

TCP和UDP请求通常是由应用层软件(如浏览器、电子邮件客户端、FTP客户端等)发起的。这些软件使用套接字(Socket)API来创建、管理和终止TCP或UDP连接

区别
TCP发起/断开链接需要三次握手并建立链接才能发信息,以确保通信双方的同步和可靠,而UDP则直接发送;
TCP传输数据更可靠,准点和不丢包 不会像UDP那样。
但是相对而言TCP的效率就差一些 因为需要保持稳定导致牺牲了速度。

使用场景
像对数据要求可靠的 文件传输、电子邮件、浏览器的HTTP请求 等就需要使用TCP方式来接手处理,
而对数据实时性要求较高的则需要使用UDP处理,如游戏、还有音视频播放

网络层

将TCP段封装在IP数据包中,并添加IP头部信息。负责路由选择和数据包的转发。

网络层接手并处理传输层协议而来的数据:将其数据分组。 网络层提供的协议有IP、IGMP、APR协议,其中IP协议是使用最广的。

谁在使用此层协议? 路由器,终端网卡使用网络层的协议。

数据链路层

接收网络层使用IP等协议发来的数据,并封装成数据帧(数据链路层的传输的基本单元) 此层也有协议:以太网、点对点、帧中继等等。

谁在使用此层协议? 网卡、、交换机等等

物理层

网络通信的基础设施,网线,光纤,电缆、网卡等。

物理层负责将帧处理为比特(流) 既 010101...

使其沿着物理链路从源端传输到目的端。这涉及将数字信号转换为适合在特定传输介质(如电缆、光纤等)上传输的信号形式 通常还需要调制解调器在网线两端辅助。