OSI七层模型
OSI模型
OSI模型是一个理论上的模型,用于描述如何在网络中发送和接收数据。
物理层 (Physical Layer)
物理层负责处理电子设备和网络媒介(如电缆和天线)之间的硬件传输。这层的职责包括但不限于处理电压、引脚、电缆、卡、网络拓扑等。
数据链路层 (Data Link Layer)
数据链路层处理从一个节点到另一个节点的数据传输。这一层负责将原始比特流从物理层转化为具有意义的数据帧,同时也负责数据帧的错误检测和流量控制。
网络层 (Network Layer)
网络层负责数据包的发送和接收,以及如何在网络中导航。这包括处理如何在多个网络之间转发数据包(路由),以及其他和网络拓扑相关的任务。
传输层 (Transport Layer)
传输层负责端到端的通信会话,包括数据的发送和接收。它也负责错误恢复和流量控制,确保数据包能够按顺序和无错误的发送。
会话层 (Session Layer)
会话层负责在网络设备之间建立、管理和终止通信会话。这一层还管理全双工、半双工和单向通信。
表示层 (Presentation Layer)
表示层负责处理操作系统和网络之间的接口,将数据转化为可以理解的格式,并处理数据的加密和解密。
应用层 (Application Layer)
应用层负责处理特定的应用程序细节。这一层与最终用户直接交互,为应用程序(如电子邮件、web浏览器和数据库访问)提供所需的网络服务。
OSI模型各层协议
OSI层次 | 协议 |
---|---|
物理层 | Ethernet(计算机局域网技术) |
数据链路层 | Ethernet (IEEE 802.3)(计算机局域网技术) |
网络层 | IP协议(Internet Protocol,因特网互联协议) ICMP协议(Internet Control Message Protocol,因特网控制报文协议) ARP协议(Address Resolution Protocol,地址解析协议) RARP协议(Reverse Address Resolution Protocol,逆地址解析协议) |
传输层 | TCP协议(Transmission Control Protocol,传输控制协议) UDP协议(User Datagram Protocol,用户数据报协议) |
会话层 | —— |
表示层 | SSL/TLS(SSL(安全套接字层)和TLS(传输层安全)是加密协议) |
应用层 | FTP(文件传送协议) Telnet(远程登录协议) DNS(域名解析协议) SMTP(邮件传送协议) POP3协议(邮局协议) HTTP协议(Hyper Text Transfer Protocol) |
网络层协议
ICMP协议(Internet Control Message Protocol,因特网控制报文协议)
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
简介
ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
工作原理
ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
在网络中经常会使用到ICMP协议,比如经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
ARP协议(Address Resolution Protocol,地址解析协议)
简介
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。
工作原理
1.Host1发送数据前设备会先查找自己的ARP缓存表,如果有直接封装到帧里进行发送,如ARP缓存表没有对应IP地址的MAC信息,则会通过ARP进行获取
2.Host1会发送ARP Request报文来请求获取Host2的MAC地址(因为帧内没有目的MAC地址是不可以进行传输的,所以ARP报文内的目的MAC地址为全F)
3.因为ARP Request目的MAC地址为 FF-FF-FF-FF-FF-FF(广播数据帧),所以交换机收到后会直接对该帧进行泛洪(广播)操作,并且学习该IP的MAC地址以及端口号到交换机自己的MAC缓存表
4.所有主机都接受到该ARP Request报文后,都会检查该帧的目的IP地址与自身的IP地址是否匹配,不匹配就直接丢弃,Host发现与自己IP地址匹配,就会先把发送端的IP与MAC地址信息记录到自己的ARP缓存表之中,然后Host2就会发送ARP Reply报文(因为刚才进行了学习所以知道Host1的MAC地址,所以ARP Reply是单播数据帧)来进行响应
5.交换机收到单播数据帧以后,会对该帧进行转发操作,并且学习Host2的MAC地址和端口号到自己的MAC缓存表
6.Host1收到Host2的ARP Reply报文后会检查目的IP与自己IP地址字段是否相同,如果匹配就将回应报文的源IP地址与MAC地址学习到自己的ARP缓存表之中,然后就可以传输信息进行通信
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)
简介
反向地址转换协议(RARP:Reverse Address Resolution Protocol) 允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。网络管理员在局域网网关路由器里创建一个表以映射物理地址(MAC)和与其对应的 IP 地址。当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。
工作原理
1 主机发送一个本地RARP广播,在广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址。
2 本地网段的RARP服务器收到此请求后,检查器RARP列表,查找该MAC地址对应的IP地址。
3 如果存在,RARP服务器就给源主机发送一个响应数据包,并将IP地址提供给对方主机使用。
4 如果不存在,RARP服务器对此不做任何响应。
5 源主机收到从RARP服务的响应信息,就利用得到的IP地址进行通信。如果一直没收到RARA服务器的响应信息,表示初始化失败。
传输层协议
TCP协议(Transmission Control Protocol,传输控制协议)
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用"带重传的肯定确认"技术来实现传输的可靠性。TCP还采用一种称为"滑动窗口"的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
TCP协议的三次握手和四次挥手:
注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:“acknowledge"确认标志”;FIN:"Finally"结束标志。
**TCP连接建立过程:**首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。
**TCP连接断开过程:**假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,“告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,“告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,“就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。”,Server端收到ACK后,“就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
为什么要三次握手?
在只有两次"握手"的情形下,假设Client想跟Server建立连接,但是却因为中途连接请求的数据报丢失了,故Client端不得不重新发送一遍;这个时候Server端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候Client端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据…问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,"三次握手"很有必要!
为什么要四次挥手?
试想一下,假如现在你是客户端你想断开跟Server的所有连接该怎么做?第一步,你自己先停止向Server端发送数据,并等待Server的回复。但事情还没有完,虽然你自身不往Server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!
UDP协议(User Datagram Protocol,用户数据报协议)
UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
UDP的主要特点:
(1)UDP 是无连接的。即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。
(2)UDP 使用尽最大努力交付。即不保证可靠交付,因此主机不需要维护复杂的连接状态表(这里面有许多参数)。
(3)UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不分拆,而是保留这些报文的边界。
(4)UDP 没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很多的实时应用(如:IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络出现拥塞时丢失一部分数据,但却不允许数据有太大的时延。UDP 协议正好适合这种要求。
(5)UDP 支持一对一、一对多、多对一和多对多的交互通信。
TCP 与 UDP 的区别:TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。
表示层协议
SSL/TLS(SSL(安全套接字层)和TLS(传输层安全)是加密协议)
SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。
SSL/TLS协议架构
TLS握手过程
1.客户端与服务端建立TCP连接后,TLS握手从客户端发送Client Hello开始,此消息包含客户端支持的加密套件和一个随机数。
2.服务端接收客户端的Client Hello消息后,响应Server Hello消息,此消息携带服务端从客户端提供的支持的加密套件列表中选择使用的加密套件,同时还会携带一个随机数。
3.服务端向客户端发送证书,证书包含公钥和签名。
4.客户端验证服务端发送的证书,验证通过后,假设选择的加密套件是RSA_WITH_AES_128_CBC_SHA256,那么客户端要生成一个预主密钥,然后从服务器发送的证书中提取公钥,利用证书的公钥对预主密钥进行RSA加密,再发送给服务端。
此时客户端开始根据发送Client Hello时生成的随机数+服务端Server Hello响应的随机数+客户端生成的预主密钥,生成主密钥,此密钥用于给后续传输的数据进行加解密。
接着,客户端向服务端发送Change Cipher Spec消息,告诉服务端,它后续将切换到使用协商好的加密密钥对数据进行加密再传输。同时也是跟Client Key Exchange(此加密套件需要使用Client Key Exchange消息携带加密后的预主密钥)、Finished消息一起发送,Finished消息使用了该密钥进行加密。
5.服务端收到Client Key Exchange消息后,从消息中提取加密过的预主密钥,然后拿证书的私钥解密获取预主密钥。
服务端根据前面客户端发送Client Hello携带的随机数、服务端响应给客户端的随机数,加上这次接收的预主密钥,生成主密钥。
服务端响应Change Cipher Spec消息,告诉客户端,服务器执行相同操作,后续将切换到使用协商好的加密密钥对数据进行加密再传输。同时也是跟Finished消息一起发送,Finished消息使用密钥进行加密。
应用层协议
FTP(文件传送协议)
文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。
FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。
FTP的基本工作原理
Telnet(远程登录协议)
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
Telnet的工作原理
- 客户端向服务器发送连接请求
客户端通过Telnet协议向服务器发送连接请求,请求连接到远程主机。
- 服务器接受连接请求
服务器接受客户端的连接请求,并建立起连接。
- 客户端和服务器进行握手
客户端和服务器之间进行握手,以确定连接的参数和协议版本等信息。
- 客户端向服务器发送命令
连接建立后,客户端可以向服务器发送命令,服务器接收到命令后执行相应的操作。
- 服务器向客户端返回结果
服务器执行完命令后,将结果返回给客户端,客户端接收到结果后进行显示。
- 断开连接
当客户端不再需要连接时,可以通过Telnet协议断开连接,服务器接收到断开连接请求后,关闭连接。
SMTP(邮件传送协议)
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
SMTP的连接和发送过程
1.建立TCP连接
2.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;
服务器端正希望以OK作为响应,表明准备接收
3.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;
服务器端则表示是否愿意为收件人接收邮件
4.协商结束,发送邮件,用命令DATA发送
5.以.表示结束输入内容一起发送出去
6.结束此次发送,用QUIT命令退出
HTTP协议(Hyper Text Transfer Protocol)
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
HTTP 协议请求
GET:请求读取由URL所标志的信息。
POST:给服务器添加信息(如注释)。
PUT:在给定的URL下存储一个文档。
DELETE:删除给定的URL所标志的资源。
HTTP详细描述