大家在搞嵌入式开发的时候基本都了解过七层网络协议、五层网络协议、四层网络协议,那么今天让我们更加的深入了解一下:
这里我们着重讲解网络协议,因此在这里我们对照七层协议进行讲解。
HTTP协议(HyperText Transfer Protocol,超文本传输协议):是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果等)。它是一个简单的请求-响应协议,用于从服务器请求和发送网页内容。在HTTP协议中,客户端(通常是浏览器)向服务器发送请求,请求内容包括要获取的资源、请求方法(GET、POST等)以及请求头信息;服务器接收请求后,根据请求方法和路径找到相应的资源,并返回响应,包括状态码、响应头信息和响应体信息。HTTP协议的特点包括:
1. 无状态:HTTP协议是无状态的,这意味着服务器不会为每个请求保持状态。因此,同一个客户端的连续请求之间没有关联。
2. 请求-响应模型:HTTP协议采用请求-响应模型,客户端向服务器发送请求,服务器返回响应。
3.面向对象:HTTP协议是面向对象的,客户端和服务器之间传输的对象是消息头和消息体。
4.简单快速:HTTP协议简单、快速,客户端和服务器可以在任何时刻关闭连接,释放系统资源。
5.无须长时间连接:HTTP协议不需要长时间连接,可以快速完成数据传输后断开连接,节省网络资源。
6. 灵活:HTTP协议灵活,可以传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
HTTPS(全称:Hypertext Transfer Protocol Secure),是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。简单讲,HTTPS是HTTP的安全版。
HTTPS经由HTTP进行通信,利用SSL/TLS来加密数据包。其主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上进行文件传输的标准协议,FTP协议使用TCP传输而不是UDP,客户在和服务器建立连接前要经过一个“三次握手”的过程,保证客户与服务器之间的连接是可靠的,而且是面向连接,为数据传输提供可靠保证。
FTP协议包括两个组成部分,一是FTP服务器,用于存储文件;二是FTP客户端,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
FTP协议的特点包括:
1. 基于客户-服务器(C/S)模型而设计。在客户端与FTP服务器之间建立两个连接,一个控制连接和一个数据连接。控制连接用于传输FTP控制命令和命令执行信息;数据连接用于传输数据,包括数据上传、下载、文件列表发送等。
2. 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
3. FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。
4. FTP只提供文件传送的一些基本的服务,它使用TCP可靠的运输服务。
5. FTP的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
6. FTP使用客户服务器方式,一个FTP服务器进程可同时为多个客户进程提供服务。
7. FTP协议默认采用TCP端口中的20和21两个端口。其中20用于传输数据,21用于传输控制信息。
8. FTP协议的默认传输模式是ASCII模式,主要用于传输文本文件和程序文件。
9. FTP协议可以建立主动模式和被动模式的数据连接。主动模式下,由服务器主动发起连接;被动模式下,由客户端主动与服务器的临时端口号建立数据传输通道。
1. 客户端和服务器建立连接,服务器会生成一对公钥和私钥。
2. 客户端请求连接,发送请求到服务器。服务器将公钥传给客户端使用。
3. 客户端收到服务器的公钥后,会生成一对公钥和私钥,并将公钥发送给服务器。
4. 服务器验证客户端的公钥是否有效,如果有效,则建立连接。
5. 在连接过程中,客户端和服务器会使用非对称加密算法对数据进行加密和解密,保证数据传输的安全性。
1. 安全性高:SSH协议基于非对称加密方法,采用加密算法对数据进行加密和解密,保证了数据的机密性和完整性。同时,SSH协议还支持数字签名和身份验证等功能,防止网络攻击和非法访问。
2. 兼容性强:SSH协议可以在多种操作系统上运行,如UNIX、Linux、Windows等。这使得在不同系统之间进行安全远程登录和数据传输变得非常方便。
3. 易于使用:SSH协议的安装和配置相对简单,可以通过命令行或图形界面进行操作。同时,SSH协议还支持隧道技术等扩展功能,可以满足各种复杂网络环境的需求。
4. 高度灵活:SSH协议支持多种服务,如远程登录、文件传输、端口转发等。这使得SSH协议在远程管理、软件开发、网络安全等领域具有广泛的应用价值。
1. Telnet位于OSI模型的第7层——应用层上,是一个通过创建虚拟终端提供连接到远程主机终端仿真的TCP/IP协议。这一协议需要通过用户名和口令进行认证,是Internet远程登录服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。
2. Telnet定义一个网络虚拟终端为远程系统提供一个标准接口。客户机程序不必详细了解远程系统,他们只需构造使用标准接口的程序。
3. Telnet包括一个允许客户机和服务器协商选项的机制,而且它还提供一组标准选项。
4. Telnet对称处理连接的两端,即Telnet不强迫客户机从键盘输入,也不强迫客户机在屏幕上显示输出。
5. Telnet适应异构。为了使多个操作系统间的Telnet交互操作成为可能,就必须详细了解异构计算机和操作系统。
1. Telnet协议是一种面向连接的协议,它提供了一种可靠的数据传输方式,能够保证数据在网络中的可靠传输。
2. Telnet协议使用了一种基于文本的通信方式,使得不同操作系统和设备之间的通信更加方便。
3. Telnet协议还支持多种网络服务,例如文件传输、电子邮件等,使得它成为了一种通用的网络工具。
4. Telnet协议的安全性相对较低,因为它传输的数据是明文的,容易被截获和窃取。因此,对于需要高度安全性的应用场景,应该考虑使用更安全的通信协议,例如SSH或SSL。
1. 客户端和服务器建立连接后,服务器会将数字证书和公钥发送给客户端。
2. 客户端会对数字证书进行验证,包括证书的颁发机构、证书的所有者以及证书的有效期等信息。如果证书验证通过,客户端会生成一个随机数,并用服务器的公钥进行加密,然后发送给服务器。
3. 服务器接收到加密的随机数后,会用自己的私钥进行解密,得到客户端发送的随机数。
4. 服务器和客户端会使用这个随机数作为密钥,对后续的数据传输进行加密和解密。
1. 数据加密:SSL协议使用加密算法对传输的数据进行加密,保证了数据在传输过程中的保密性。
2. 身份认证:SSL协议允许客户端对服务器进行身份认证,确保只有正确的服务器才能接收客户端的请求。
3. 消息完整性:SSL协议使用消息摘要算法对传输的数据进行完整性校验,保证了数据在传输过程中没有被篡改。
4. 值得注意的是,SSL协议存在多个版本,其中SSL 2.0和SSL 3.0是最常用的版本。然而,由于安全漏洞和其他问题,SSL 2.0已被废弃,SSL 3.0也被视为不安全,不再建议使用。现在常用的版本是TLS(Transport Layer Security)协议,它与SSL 3.0兼容,并改进了安全性。TLS协议已经发布了多个版本,其中TLS 1.2和TLS 1.3是最常用的版本。
TLS(Transport Layer Security)协议,也被称为安全传输层协议,是一种提供在两个应用程序之间进行保密性和数据完整性保护的协议。它是在两个通信应用程序之间提供加密通信的协议,与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。
TLS协议由两层组成:TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)。在建立连接时,客户端和服务器会使用握手协议协商出一个有状态的连接,并使用一个公钥/私钥对进行身份验证。一旦连接建立,客户端和服务器就可以使用记录协议来传输加密的数据。
TLS协议的优势在于其与高层的应用层协议的无耦合性,使得应用层协议可以透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。同时,TLS协议还提供了数据加密和完整性校验功能,保证了数据在传输过程中的安全。
TLS协议广泛应用于各种需要安全通信的场景,如Web浏览器和Web服务器之间的通信、电子邮件、即时通讯等。此外,TLS协议还提供了对数字证书的支持,使得客户端和服务器可以互相验证对方的身份。
值得注意的是,TLS协议的最新版本是TLS 1.3,它在TLS 1.2的基础上进行了改进,提高了安全性并减少了实现复杂度。
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP旨在适应支持多网络应用的分层协议层次结构,为不可靠的互联网络上提供可靠的端到端字节流。
TCP协议的主要特点包括:
1. 面向连接:在数据传输之前,需要先建立一个可靠的连接。数据传输结束后,通过协定的方式断开连接,由通信的双方释放资源。
2. 可靠传输:TCP通过确认机制、重传机制和流量控制机制确保数据的可靠传输。如果发送方在一定的时间内没有收到接收方的确认,则会进行重传。此外,TCP还会对接收方缓存区中可能存在的数据进行管理,确保数据的完整性。
3. 基于字节流:TCP将数据看作字节流,不区分消息边界。发送方发送的字节流按照发送顺序被接收方接收,接收方可以按照发送顺序重组消息。
4. 拥塞控制:当网络拥塞严重时,TCP会降低数据发送速度,以减少网络拥塞。TCP通过拥塞控制算法来管理网络拥塞。
TCP协议的应用非常广泛,包括Web浏览、电子邮件、文件传输、远程登录等都需要用到TCP协议。此外,TCP也是许多其他协议的基础,如HTTP协议和FTP协议等都基于TCP进行数据传输。
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,与TCP协议相比,UDP协议不提供可靠的数据传输服务。在OSI(Open System Interconnection)参考模型中,UDP位于第四层——传输层,处于IP协议的上一层。
UDP协议的特点包括:
1. 无连接:UDP协议在数据传输之前不需要建立连接,可以直接发送数据。与TCP相比,UDP协议的开销较小,传输数据时延较短。
2. 不可靠:UDP协议不保证数据的可靠传输,可能会出现数据丢失或乱序的情况。因此,使用UDP协议的应用程序需要自己实现可靠传输的机制。
3. 面向数据报:UDP将数据封装在一个数据报中,然后发送该数据报。接收方需要按照顺序接收数据报,并重新组合成完整的数据。
4. 速度快:由于UDP协议简单且无连接,因此其传输速度通常比TCP协议快。
1. 需要快速传输数据的场景:如流媒体、在线游戏等,使用UDP协议可以提供更好的实时性。
2. 可靠性要求不高的场景:如VoIP(语音通话)等,使用UDP协议可以降低网络延迟。
3. 需要进行广播或组播的场景:如视频会议系统等,使用UDP协议可以更好地利用网络带宽。
1. 无连接数据报传送:IP协议是一种无连接协议,这就意味着在通信的终点之间没有连续的线路连接。
2. 数据报路由选择:IP协议通过路由选择实现从一个网络到另一个网络的通信,即通过选择最佳路径来传递数据包。
3. 差错控制:IP协议通过校验和的方式来检测数据在传输过程中是否发生了错误,并且能够实现一定的纠正功能。
1. 报告错误:当IP数据无法访问目标或IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
2. 查询和响应:ICMP还可以用于查询主机或路由器的信息,并接收相应的响应。
总的来说,ICMP是用于在IP主机和路由器之间传递控制消息的重要协议,主要用于解决网络中的各种问题,并对用户数据的传输起着重要作用。
ARP(Address Resolution Protocol),中文是地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ARP协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
1.第一次握手:客户端发送一个SYN(synchronize)包到服务器,并进入SYN_SEND状态,等待服务器的确认。SYN包中包含一个随机生成的seq number(序列号)。
2.第二次握手:服务器收到SYN包后,会确认客户端的SYN(ACK=1),同时自己也发送一个SYN包(SYN=1)给客户端,即SYN+ACK包,此时服务器进入SYN_RECV状态。这个过程中,服务器会将自己的seq number添加到SYN包中一起发送给客户端。
3.第三次握手:客户端收到服务器的SYN+ACK包后,向服务器发送确认包ACK(ACK=1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。这个过程中,客户端会将服务器的seq number加1后作为ack number发送给服务器,表示已经收到服务器的SYN+ACK包。
在三次握手过程中,传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。
注* ACK和ack的大小写不同,意义也略有不同。
ACK:这是一个确认字符,也是TCP协议中的一个标志位。在TCP连接中,当一方收到另一方发送的数据包时,会向对方发送一个ACK消息,告诉对方已经收到了数据包。ACK消息通常会携带一个序列号,表示确认的数据包的序列号。ACK是TCP协议中的一个特定标志位。
ack:这是TCP连接中的确认消息的通用术语,表示确认消息的意思。在TCP连接中,当一方收到另一方发送的数据包时,会向对方发送一个ack消息,告诉对方已经收到了数据包。ack消息通常会携带一个序列号,表示确认的数据包的序列号。
总的来说,ACK是TCP协议中的一个特定标志位,而ack是TCP连接中的确认消息的通用术语。
1.第一次挥手:客户端发送一个FIN报文,表示客户端不再发送数据,并进入FIN-WAIT-1状态。
2.第二次挥手:服务器收到客户端的FIN报文后,会发送一个ACK报文给客户端,确认收到客户端的FIN报文,服务器进入CLOSE-WAIT状态。
3.第三次挥手:服务器发送一个FIN报文给客户端,表示服务器不再发送数据,并进入LAST-ACK状态。
4.第四次挥手:客户端收到服务器的FIN报文后,发送一个ACK报文给服务器,确认收到服务器的FIN报文,客户端进入TIME-WAIT状态。服务器收到客户端的ACK报文后,进入CLOSED状态,完成四次挥手过程。
1.第一次挥手:客户端发送一个FIN报文,表示客户端不再发送数据,并进入FIN-WAIT-1状态。
2.第二次挥手:服务器收到客户端的FIN报文后,会发送一个ACK报文给客户端,确认收到客户端的FIN报文,服务器进入CLOSE-WAIT状态。
3.第三次挥手:服务器发送一个FIN报文给客户端,表示服务器不再发送数据,并进入LAST-ACK状态。
4.第四次挥手:客户端收到服务器的FIN报文后,发送一个ACK报文给服务器,确认收到服务器的FIN报文,客户端进入TIME-WAIT状态。服务器收到客户端的ACK报文后,进入CLOSED状态,完成四次挥手过程。
问:为什么要三次握手两次不行吗?
答:三次握手可以解决了历史连接初始化带来的数据混乱问题。如果只进行两次握手,那么就存在以下问题:
下面引用知乎大佬的一篇文章:
要搞懂这个问题,首先要知道三次握手的目的是什么?两次握手可以达到这个目的吗?
第一次握手:客户端发送网络包,服务器端接收,此时服务器知道:客户端的发送能力、服务器端的接收能力正常。
第二次握手:服务器发包,客户端接收,此时客户端知道:服务器端的发送、接收能力正常,客户端的发送接收能力也正常。但是服务器端还不知道客户端的接收能力是否正常。
第三次握手:客户端发包,服务器端接收,此时服务器端知道客户端的发送、接收能力正常。
因此,需要三次握手才能确认双方的发送、接收能力是否正常。
试想一下,如果只进行两次握手,假如客户端发送连接请求,但因为连接请求报文丢失而未收到确认,就再重新发送连接请求。后来收到确认,建立了连接。数据传输完毕后,就释放了连接。其中第一个连接丢失,第二个到达服务器端,但是第一个丢失的报文段只是在某个网络节点长时间滞留了,等到第二次连接释放后的某个时间段,到达了服务器端,服务器以为客户端又请求连接,于是也发送确认,建立连接。所以不采用三次握手,只要服务器端发送确认,就能建立新的连接了。此时客户端忽略服务器端发来的确认报文段,也不传输数据,服务器端一直等待客户端传输数据,造成资源浪费。
问:为什么要等待2MSL?
答:数据包等待2MSL的原因是为了确保最后一个ACK报文能够到达对方,并保证连接可靠地关闭。在TCP的TIME_WAIT状态中,数据包需要等待2MSL时间,以防止最后一个ACK报文丢失。如果数据包在等待时间内没有收到重传的FIN+ACK报文段,那么它会认为连接已经关闭,并释放连接资源。这样可以保证连接的可靠关闭,避免出现连接未正常关闭的情况。同时,等待2MSL时间还可以防止旧的连接请求报文段在网络中滞留,避免出现重复连接的情况。
来自知乎大佬的讲解