浅谈网络通讯协议|青训营笔记

249 阅读11分钟

这是我参与「第四届青训营」笔记创作活动的的第5天。

OSI七层模型与TCP/IP四层模型

image.png

七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。

作用协议
物理层建立、维护、断开物理连接。在接口通信上进行定时的比特流传输。
数据链路层建立逻辑连接,进行硬件地址寻址、差错检验。将比特组合成字节进而组合成帧,用MAC地址访问介质。ARP、PARP(反向地址转换协议)
网络层进行逻辑地址寻址,实现不同网络之间的路径选择。控制子网的运行,如逻辑编址、分组传输、路由选择。ICMP(互联网控制信息协议)、 IGMP(组管理协议)、 IP(IPV4 IPV6)(互联网协议)
运输层定义传输数据的协议端口号,以及流控和差错校验。接受上一层的数据,在必要时对数据进行切割,并交给网络层,保证这些数据有效到达对端。TCP、UDP(数据包一旦离开网卡即进入网络传输层)
会话层建立、管理、终止会话,在不同机器上的用户之间建立及管理会话。SSL(安全套接字层协议)、TLS(安全传输层协议)
表示层数据的表示、安全、压缩。此层有关信息的语法语义以及他们的关联,如加密解密、转换翻译、压缩解压,格式有:JPEG、ASCll、EBCDIC、加密格式等LPP(轻量级表示协议)
应用层各种应用程序协议HTTP(超文本传输协议) 、FTP(文本传输协议)、TFTP(简单文件传输协议)、 SMTP(简单邮件传输协议)、 SNMP(简单网络管理协议)、 DNS(域名系统)、TELNET(远程终端协议) HTTPS(超文本传输安全协议)、 POP3(邮局协议版本3 )、DHCP(动态主机配置协议)

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议在一定程度上参考了OSI的体系结构,将其简化为了四个层次。TCP/IP协议在实际的应用中效率更高,成本更低

通信过程: 在网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。当源主机发出数据时,数据在源主机中从上层向下层传送。以TCP/IP四层模型为例:

  • 源主机中的应用进程先将数据交给应用层,应用层加上必要的控制信息就成了报文流,向下传给传输层。
  • 传输层将收到的数据单元加上本层的控制信息,形成报文段,再交给网际层。
  • 网络层加上本层的控制信息,形成IP数据报,传给网络接口层。
  • 网络接口层将网际层交下来的IP数据报组装成帧,并以比特流的形式传给网络硬件(即物理层),数据就离开源主机。

HTTP协议

概述

HTTP 全称超文本传输协议(Hyper Text Transfer Protocol),是用于从万维网上服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)。

客户端浏览器在请求一个web页面时,它首先与Web服务器建立连接; 连接成功后,它将所请求的页面,所用的协议及版本,语言,可接受的MIME类型和字符集,编码方式,连接状态等一些本地信息提交给服务器。(请求头);服务器接收到请求后,发回响应头信息,然后才发送相应的页面内容。

HTTP工作过程

  • 地址解析
  • 封装HTTP请求
  • 封装TCP包,三次握手建立TCP连接
  • 客户端发送请求命令
  • 服务器端响应
  • 四次挥手,关闭TCP连接

方法

image.png Safe:不会修改服务器的数据的方法,如:GET HEAD OPTIONS Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。所有safe的方法都是Idempoent的,如GET HEAD OPTION DELETE

幂等的的意思就是一个操作不会修改状态信息,并且每次操作的时候都返回同样的结果。即:做多次和做一次的效果是一样的。如使用SELECT查询,网页的GET请求。类似于一元操作。

状态码

image.png

  • 200 :OK,客户端请求成功
  • 301:资源(网页等)被永久转移到其他URL
  • 302:临时跳转
  • 401:请求未经授权
  • 404:请求资源不存在,可能是输入了错误的URL
  • 500:服务器内部错误
  • 504:Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的相应。

常见请求头与响应头

请求头

image.png

响应头

image.png

TCP三次握手与四次挥手

TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN。

  • 同步SYN:在连接建立时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1,SYN置1就表示这是一个连接请求或连接接受报文。
  • 确认ACK:TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。
  • 序号seq:标识从TCP发端向TCP收端发送的数据字节流(TCP传输的每一个字节都按顺序编号),它表示在这个报文段中的的第一个数据字节在数据流中的序号。
  • 确认号ack:确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志为1时该确认序列号的字段才有效。
  • 终止FIN:表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。

三次握手

客户端与服务端建立连接时需要双方共同发送三次请求,确保连接的建立。刚开始的时候,服务器和客户端都为CLOSED状态。在通信开始前,双方都得创建各自的传输控制块(TCB)。服务器创建完TCB后遍进入LISTEN状态,此时准备接收客户端发来的连接请求。

第一次握手:客户端向服务端发送连接请求报文。该报文的头部中SYN=1,ACK=0,并选择一个初始序列号seq=x。请求发送后,客户端便进入SYN-SENT状态。

第二次握手:服务端收到连接请求报文段后,如果同意连接,会发送一个应答,并初始化自己的序列号seq=y,把客户端的seq+1作为ack值传回。发送完应答后服务端进入SYN-RCVD状态。

第三次握手:客户端收到服务端连接同意的应答后,还会向服务端发送一个确认报文段,把服务器的seq值+1作为ack的值,表示:服务端发来的连接同意应答已经成功收到。客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

绘图1.png

四次挥手

第一次挥手:客户端向服务器端发送一个接释放请求,在报文中再次指定一个序列号,表示自己的数据发送完毕,要求断开连接。此时,客户端进入FIN-WAIT-1状态。

第二次挥手:服务器收到客户端连接释放报文,并向客户端发出连接释放的应答,把客户端的序列号值 +1作为ACK报文的序列号值,表明已经收到客户端的报文,此时服务端进入CLOSE_WAIT状态。

第三次挥手:服务端将最后的数据发送完毕后,就再次向客户端发送连接释放报文。序列号变化如第一次挥手。此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到服务器的连接释放报文后,向服务端发出确认应答,报文头:ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。

绘图2.png

HTTPS协议

HTTPS概述

HTTPS 全称安全超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。

HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维上安全敏感的通讯,例如交易支付等方面 。

  • Hypertext Transfer Protocol Secure
  • 经过TSL/SSL加密
  • 对称加密:加密和解密都是使用同一个密钥
  • 非对称加密,加密和机密需要使用两个不同的密钥:公钥和私钥

HTTPS 工作过程

HTTPS通信主要包括几个节点,发起请求、验证身份、协商秘钥、加密会话,具体流程如下:

  1. 客户端向服务端发起建立HTTPS请求。
  2. 服务器向客户端发送数字证书。
  3. 客户端验证数字证书,证书验证通过后客户端生成会话密钥(双向验证则此处客户端也会向服务器发送证书)。
  4. 服务器生成会话密钥(双向验证此处服务端也会对客户端的证书验证)。
  5. 客户端与服务端开始进行加密会话。 image.png

TLS和SSL协议

TLS:安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性数据完整性。TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥

该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)

SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

SSL协议可分为两层:

  • SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装压缩加密等基本功能的支持。
  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证协商加密算法交换加密密钥等。

HTTPS缺陷

  • 性能方面:相同网络环境下,HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。此外,HTTPS协议还会影响缓存,增加数据开销和功耗。
  • 安全方面:HTTPS协议的安全是有范围的,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
  • 成本方面:SSL的专业证书需要购买,功能越强大的证书费用越高。