当前位置: 首页 > news >正文

HTTP、TCP、SOCKET三者之间区别和原理

7层网络模型

网络在世界范围内实现互联的标准框架
7层为理想模型,一般实际运用没有7层
详细内容

HTTP属于7层应用层

BSD socket属于5层会话层

TCP/IP属于4成传输层

TCP/IP协议

三次握手

在这里插入图片描述

笔者解析:

  1. 第一次握手:实现第一步需要客户端主动打开,服务器在监听,然后发送SYN=1 seq=x等待服务器确认
  2. 第二次握手:服务器监听到,返回确认信息:SYN=1 ask=x+1,以及发送seq=y和ACK=1等待客户端确认。
  3. 第三次握手:客户端返回确认信息:ACK=1 ask=y+1 seq=x+1。至此客户端与服务器连接上,可以进行数据传输。

四次挥手

在这里插入图片描述

笔者解析

  1. 第一次挥手:发送需确认的请求:FIN=1 seq=u
  2. 第二次挥手:发送接收到服务器请求的信息:ACK=1 seq=v 需确认的请求ack=u+1,然后等待服务器处理完信息,再进行第三次挥手确认才能完成服务器的确认。
  3. 第三次挥手:处理完信息,发送确认接收到请求FIN=1 ack=u+1,以及需要确认的请求ACK=1 和seq=w
  4. 第四次挥手:发送确认接收到请求的信息ACK=1和ask=w+1以及seq=u+1。至此服务器与客户端断开。

总结

客户端发送的需要确认的信息(请求)标志位:SYN和FIN
服务器发送的需要确认的信息(请求)标志位:ACK
两者在请求和确认时有标志数据seq和ask,两者通用:seq为请求携带的标志数据,ask为确认的标志数据,ask=上一个seq+1。

常见问题

如果建立了连接,但客户端出现故障:
服务器每收到一次客户端的请求后都会重新复位保活计时器,时间通常为两个小时,若两个小时还没收到客户端的任何信息、数据,服务器会发送一个探报文段,以后每隔75秒发一次,连发10个探测器报文仍没反应,服务器就认定客户端出了故障,接着就关闭连接。

SCOKET原理概念

socket是通信的基石,是支持TCP/IP协议的网络通讯的基本操作单元,工程师要进行TCP/IP连接通信时通过socket进行操作。
socket相当于TCP/IP或UDP的封装、调用接口

应用层HTTP协议:

Wab联网的基础,也是设计联网常用的协议之一。

SOCKET和TCP/IP让工程师实现网络客户端和服务器的数据传输,但未约定协议,所以不能对数据进行翻译解码,数据不能转换为信息,在经过应用层HTTP后才能完成通讯。

HTTP连接最显著的特点是:客户端每次请求都需要服务器回送响应,在请求结束后,会主动释放连接,从建立连接到释放连接的过程称为“一次连接”,由于HTTP的“一次连接”特性,所以HTTP属于一种“短连接”,要保持客户端程序在线状态,需要不断向服务器发送连接请求,通常做法是即使不需要获取任何数据,客户端也保持一段时间向服务器发送一次“保持连接”的请求,服务器在接收到该请求后对客户端进行返回,表明知道客户端“在线”。若服务器长时间无法收到客户端请求,则认为客户端“下线”,若客户端长时间无法接收到服务器回复,则认为网络断开。

http://www.lryc.cn/news/174974.html

相关文章:

  • flutter项目中常用第三方模块
  • Android 混淆使用及其字典混淆(Proguard)
  • laravel 阿里云短信发送
  • 算法----LRU缓存机制
  • 基于springboot+vue的旅游系统(前后端分离)
  • 什么是堆栈和队列?如何实现它们?
  • 编译器自动生成的构造函数
  • SpringSecurity - 认证与授权、自定义失败处理、跨域问题、认证成功/失败处理器
  • 自定义映射resultMap
  • Android修行手册 - Android Studio去掉方法参数提示、变量类型提示、方法引用Usage提示
  • 【车载开发系列】ECU Application Software程序刷新步骤
  • inject和provide的使用
  • 2023年中国研究生数学建模竞赛D题
  • Unity制作曲线进度条
  • 面试:C++ 11 智能指针
  • 设计模式——3. 抽象工厂模式
  • vscode 无法使用 compilerPath“D:.../bin/arm-none-eabi-g++.exe”解析配置。
  • Vue.js入门模板语法[上] 及Vue.js实现购物车---详细讲解
  • windows下gvim的配置
  • 基于复旦微的FMQL45T900全国产化ARM开发开发套件(核心板+底板)
  • Leetcode Top100(23)环形链表
  • 线性代数基础-行列式
  • RT-Thread(学习)
  • 【MySQL】 MySQL 死锁问题分析优化器特性及优化方案
  • 【C++面向对象侯捷】8.栈,堆和内存管理
  • 在比特币上使用可检索性证明支付存储费用
  • 使用SSE(Server-Sent Events)实现服务端给客户端发消息
  • 【Redis】使用rpm包安装redis
  • 论文阅读-Group-based Fraud Detection Network on e-Commerce Platforms
  • java程序启动时指定JVM内存参数和Xms、Xmx参数学习