OSI七层结构概述
应用层:
应用层是OSI模型的最高层,是用户与网络的界面,所有能和用户交互产生网络流量的程序 因为用户的实际应用多种多样,就要求应用层采用不同的协议来解决不同应用类型的需求 典型的协议有:文件传输协议FTP、电子邮件协议SMTP、万维网HTTP等。 表示层: 主要处理两个通信系统中交换信息的表示方式(语法和语义) 功能一、数据格式变换 不同机器采用的编码和表示方法不同,使用的数据结构不同 功能二、数据加密解密 功能三、数据的压缩和恢复 会话层: 向表示层实体/用户进程提供简历连接,并在连接上有序的传输数据。(进程:正在运行的程序) 这是会话,也是建立同步(SYN) 功能一、建立、管理、终止会话(如网页) 功能二、使用校验点可使会话在通信失效时从校验点/同步点继续恢复通信,实现数据同步。 适用于传输大文件 主要协议:ADSP、ASP 传输层: 负责主机中两个进程的通信,即端到端的通信。传输单位是报文段或用户数据报。 数据链路层是点到点的通信,传输层是端到端的通信 点到点(下三层):可以理解为主机到主机之间的通信,一个点指一个硬件地址或IP地址,网络中参与通信的主机通过硬件地址或IP地址标识的; 端到端(上三层):指运行在不同主机内的两个进程之间的通信,一个进程由一个端口号来标识,所以称端到端通信 功能一:可靠传输、不可靠传输 功能二:差错控制 功能三:流量控制(发送方传输速度) 功能四:复用分用 主要协议:TCP、UDP 网络层 主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。 流量控制(发送方传输速度) 拥塞控制(整体速度) 数据链路层 主要任务是把网络层传下来的数据报组装成帧。数据链路层/链路层的传输单位是帧。 物理层 主要任务是在物理媒体上实现比特流的透明传输。物理层传输单位是比特。
TCP/PI五层参考模型(应用层、传输层、网络层、数据链路层、物理层)
1.TCP/IP、OSI、五层参考模型结构图
2.TCP/IP、OSI的相同点 3.TCP/IP、OSI的不同点 4.五层参考模型结构
5.五层参考模型数据封装与解封装(数据传输)
TCP
TCP 的包头有哪些内容,分别有什么用
- 首先,源端口和目标端口是不可少的。
- 接下来是包的序号。主要是为了解决乱序问题。不编好号怎么知道哪个先来,哪个后到
- 确认序号。发出去的包应该有确认,这样能知道对方是否收到,如果没收到就应该重新发送,这个解决的是不丢包的问题
- 状态位。SYN 是发起一个链接,ACK 是回复,RST 是重新连接,FIN 是结束连接。因为 TCP
是面向连接的,因此需要双方维护连接的状态,这些状态位的包会引起双方的状态变更 - 窗口大小,TCP 要做流量控制,需要通信双方各声明一个窗口,标识自己当前的处理能力。
三次握手四次挥手
??TCP/IP 协议是传输层的一个面向连接的安全可靠的一个传输协议,三次握手的机制是为了保证能建立一个安全可靠的连接,那么第一次握手是由客户端发起,客户端会向服务端发送一个报文,在报文里面:SYN标志位置为1,表示发起新的连接。当服务端收到这个报文之后就知道客户端要和我建立一个新的连接,于是服务端就向客户端发送一个确认消息包,在这个消息包里面:ACK标志位置为1,表示确认客户端发起的第一次连接请求。以上两次握手之后,对于客户端而言:已经明确了我既能给服务端成功发消息,也能成功收到服务端的响应。但是对于服务端而言:两次握手是不够的,因为到目前为止,服务端只知道一件事,客户端发给我的消息我能收到,但是我响应给客户端的消息,客户端能不能收到我是不知道的。所以,还需要进行第三次握手,第三次握手就是当客户端收到服务端发送的确认响应报文之后,还要继续去给服务端进行回应,也是一个ACK标志位置1的确认消息。通过以上三次连接,不管是客户端还是服务端,都知道我既能给对方发送消息,也能收到对方的响应。那么,这个连接就被安全的建了。 ??四次挥手机制也是由客户端去发起,客户端会发送一个报文,在报文里面FIN位标志位置一,当服务端收到这个报文之后,我就知道了客户端想要和我断开连接,但是此时服务端不一定能做好准备,因为当客户端发起断开连接的这个消息的时候,对于服务端而言,他还有可能有未发送完的消息,他还要继续发送,所以呢,此时对于服务端而言,我只能进行一个消息确认,就是我先告诉客户端,我知道你要给我断开连接了,但是我这里边还可能没有做好准备,你需要等我一下,等会儿我会告诉你,于是呢,发完这个消息确认包之后,可能稍过片刻它就会继续发送一个断开连接的一个报文,也是一个FIN位置1的报文也是由服务端发给客户端的啊,这个报文表示服务端已经做好了断开连接的准备,那么当这个报文发给客户端的时候,客户端同样要给服务端继续发送一个消息确认的报文一共有四次,那么,通过这四次的相互沟通和连接,我就知道了,不管是服务端还是客户端都已经做好了断开连接的准备,于是连接就可以被断开啊,这是我对三次握手和四次挥手的一个理解。
为什么TCP连接要建立三次连接?
??为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误,主要目的防止服务端一直等待,浪费资源。
TCP协议如何保证可靠传输
(1)应用数据被分割成 TCP 认为最适合发送的数据块。 (2)TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 (3)校验和:(发送的数据包的二进制相加然后取反)目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。 (4)TCP 的接收端会丢弃重复的数据。 (5)流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。(TCP 利用滑动窗口实现流量控制)。 (6)拥塞控制: 当网络拥塞时,减少数据的发送。 (7)停止等待协议 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 (8)超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
TCP四次挥手的时候,先发起方为什么会有一个TIME_WAIT状态,它的作用是什么?
(1)保证最后一次握手报文能到接收方,如果接收方未收到会再次发送FIN+ACK,发起方可以进行超时重传。 (2)TIME_WAIT时间一般是2MSL。2MSL后这次连接的所有报文都会消失,不会影响下一次连接。
为什么客户端在TIME-WAIT状态必须等待2MSL的时间?
??1)为了保证客户端发送的最后一个ACK报文段能够达到服务器。 这个ACK报文段可能丢失,因而使处在LAST-ACK状态的服务器收不到确认。服务器会超时重传FIN+ACK报文段,客户端就能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重启计时器。最好,客户端和服务器都正常进入到CLOSED状态。如果客户端在TIME-WAIT状态不等待一段时间,而是再发送完ACK报文后立即释放连接,那么就无法收到服务器重传的FIN+ACK报文段,因而也不会再发送一次确认报文。这样,服务器就无法按照正常步骤进入CLOSED状态 。 ??2)防止已失效的连接请求报文段出现在本连接中。客户端在发送完最后一个ACK确认报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。 4分钟就是2个MSL,每个MSL是2分钟。MSL就是maximium segment lifetime——最长报文寿命
TCP 和 UDP 的区别
- TCP 是面向连接的,UDP 是面向无连接的
- UDP程序结构较简单
- TCP 是面向字节流的,UDP 是基于数据报的
- TCP 保证数据正确性,UDP 可能丢包
- TCP 保证数据顺序,UDP 不保证
什么是面向连接,什么是面向无连接
??在互通之前,面向连接的协议会先建立连接,如 TCP 有三次握手,而 UDP 不会
UDP
TCP 和 UDP 是传输层的两个协议 UDP 的包头
UDP 的主要应用场景
- 需要资源少,网络情况稳定的内网,或者对于丢包不敏感的应用,比如 DHCP 就是基于 UDP 协议的。
- 不需要一对一沟通,建立连接,而是可以广播的应用。因为它不面向连接,所以可以做到一对多,承担广播或者多播的协议。
- 需要处理速度快,可以容忍丢包,但是即使网络拥塞,也毫不退缩,一往无前的时候
直播:直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议 实时游戏:游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响 物联网:一方面,物联网领域中断资源少,很可能知识个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的 域名查询、语音通话、视频直播等
HTTPs加密过程?及为什么?
加密过程:HTTPS在传输数据之前需要客户端与服务器进行一个握手(TLS/SSL握手),在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL使用了非对称加密,对称加密以及hash等。HTTPS相比于HTTP,虽然提供了安全保证,但是势必会带来一些时间上的损耗,如握手和加密等过程,是否使用HTTPS需要根据具体情况在安全和性能方面做出权衡。
为什么加密:因为HTTP报文是包裹在TCP报文里面的,服务器端收到报文段后,会解包提取HTTP报文,而HTTP报文是明文,所以若传输过程中被截取,有可能泄露信息,所以需要在HTTP报文进入TCP报文之前,先使用SSL对HTTP报文进行加密。HTTPS协议的本质就是HTTP + SSL(or TLS)。
HTTP和HTTPS的区别?(长连接和短连接)
https:全称Hyper Text Transfer Protocol Secure,相比http(超文本传输协议),多了一个secure,这一个secure是怎么来的呢?这是由TLS(SSL)提供的,可以简单理解为 HTTPS=HTTP+SSL。 ①HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头 ②HTTP 是相对不安全的,而 HTTPS 是相对安全的 ③HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443 ④在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层 ⑤HTTP 无需加密,而 HTTPS 对传输的数据进行加密 ⑥HTTP 无需证书,而 HTTPS 需要认证证书
长连接和短连接
??在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码: Connection:keep-alive 在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。 HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
|