• HTTP TCP UDP 概括总结


    OSI 七层模型

    物理层 -> 数据链路层 -> 网络层 -> 传输层 -> 会话层 -> 表示层 -> 应用层

    每一层只专注做一件事,每一层都需要使用下一层提供的功能,但是比较复杂不实用,而且功能会在上层重复复现,运行效率很低层次多。

    HTTP

    基于 TCP, 端口号是 80,http 请求由请求行(Method Request-URI HTTP-Version CRLF)、请求头、请求体组成。

    GET 通过 URL 传输数据,通过历史记录,缓存很容易查到数据信息,POST 通过请求体传输数据因为在请求主体内,所以有一定的安全性保证。

    http1 是文本协议,而 http2.0 是一个二进制协议,二进制帧中标识了属于哪个 request,使得网络传输变得十分灵活。

    HTTPS

    端口号是 443,需要到 CA 申请证书。

    数据使用对称加密传输,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输。

    SSL

    安全套接层协议,对网络连接进行加密。

    TLS

    安全传输层协议,对网络连接进行加密,它建立在 SSL 3.0 协议规范之上,但是它们所支持的加密算法不同,所以不能互操作。

    TCP/IP 四层模型

    目前被广泛采用的一种模型,是七层模型的精简版。

    网络接口层(以太网) -> 网络层 (IP,路由器)-> 传输层(TCP,UDP) -> 应用层(HTTP,FTP,SSH)

    IP 协议

    IP 协议为了完成不同主机的通信,通过IP地址,IP 协议就能够帮我们把一个数据包单向发送给对方。

    TCP 传输控制协议

    TCP协议 在 IP 协议的基础上,位于IP层之上,应用层之下的中间层,提供可靠的连接(传输带有回执信息),系统资源要求较多,有序传输,适合大量的数据,传输速度一般,全双工(可以同时进行双向传输 : A→B B→A)。

    三次握手

    TCP 的连接建立需要客户端和服务器总共发送3个包,执行 connect() 操作产生挥手操作。

    第一次握手 - 客户端发送一个标志位(SYN 同步序列号)1的包,客户端进入SYN_SEND状态;

    第二次握手 - 服务器接收后,发送回确认包(ACK 报头的控制位)1,服务器端进入SYN_RCVD状态;

    第三次握手 - 客户端再次发送确认包(ACK)1,SYN标志位为0,客户端进入 established 状态,服务器接收后,也进入 established 状态,TCP 握手结束。

    缺点

    慢,效率低,占用系统资源高,易被攻击,TCP在传递数据之前,要先建连接,消耗时间,而且在数据传递时,确认、重传、拥塞等机制都会消耗大量的时间,维护传输连接会占用系统的CPU、内存等资源,三次握手机制,这些也导致TCP容易被人利用,比如DOS、DDOS、CC等攻击。

    案例

    电子邮件,文件传输,浏览器,远程登录。

    四次挥手

    TCP 的连接的拆除需要发送四个包,客户端或服务器均可主动发起挥手动作,执行 close() 操作产生挥手操作。

    第一次挥手 - 假设是客户端关闭连接,客户端先发送一个标志位(FIN)1的包,进入 FIN_WAIT_1 状态;

    第二次挥手 - 服务器接收后发送一个确认包,进入 CLOSE_WAIT 状态,客户端接收到这个包后,进入 FIN_WAIT_2 状态,等待服务器关闭;

    第三次挥手 - 服务器端准备好关闭连接,向客户端发送结束连接请求,FIN设置为1,服务端进入 LAST_ACK 状态;

    第四次挥手 - 客户端接收到来自服务器的关闭请求,发送一个确认包,并进入 TIME_WAIT 状态,等待可能出现的要求重传的 ACK 包;

           服务器端接收到这个确认包之后,关闭连接,客户端进入 CLOSED 状态后,没有收到服务器端的消息,会认为服务器端已正常关闭,也关闭连接,进入 CLOSED 状态。

    UDP 用户数据报协议

    无需建立连接,“ping”命令的原理就是通过 udp 向对方主机发送数据,系统资源要求少,可能丢包,无序传输,适合轻量级数据,传输速度较快,可多对多传输。

    缺点

    udp没有 tcp 的确认等机制,被攻击者利用的漏洞就要少一些,在数据传递时,如果网络质量不好,就会很容易丢包。

    案例

    即时通讯(qq),语言 视频电话。

    Socket 套接字(IP 地址+端口号)

    基于 TCP/UDP 的 API框架,Stream Socket 基于 TCP 实现,Datagram Socket(无连接)基于 UDP 实现 ;

    Socket 属于一个抽象层(应用层与TCP/IP协议中间),是一组接口,向应用层进程发送报文来传送数据包。

    在 Linux 系统中,有万物皆文件的说法,也就是虚拟文件系统(Virtual File System);

    Socket 在 Linux 系统中也看作是一个虚拟文件,数据解构中包含 ip 地址端口等信息,通过这些信息,可以在 VFS 系统中定位到这个 Socket 文件,然后进行读写达到通信的目的。

    心跳包

    客户端每隔一段时间,向服务端发送一个心跳包,服务端受收到包以后,会更新客户端最近一次在线时间。一旦服务端超过规定时间没有接收到客户端发来的包,则视为掉线。

    WebSocket

    h5的一种双向通讯协议(可以在浏览器跟服务器之间双向发送或接受信息),基于 TCP/IP 协议的应用层;

    首先通过 tcp 的三次握手,在建立握手时,数据是通过HTTP传输的,成功后通过TCP进行通信。

  • 相关阅读:
    STM32 HAL库 CUBEMX 定时器双通道 高精度捕获PWM波
    STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
    FreeRTOS — 消息队列
    STM32CubeMX 定时器配置时钟中的auto-reload preload
    使用TortoiseGit连接GitLab
    STM32CubeMx 定时器实现 微妙级延迟函数
    STM32 Keil新建工程报错“Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”
    STM32CubmeMx 串口IDLE中断+DMA读取不定长数据
    云龙51单片机视频教程全套包含案例课件及资料
    推荐一本很好的51单片机书籍,适合新手入门学习。
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/16023820.html
Copyright © 2020-2023  润新知