TCP/IP五层协议栈(1)

news2025/7/18 21:16:46

1.应用层协议

应用层协议相对来说比较简单,因为其他层的协议属于硬件上的.相对程序员来说已经固定了.不需要自己设计和实现了.

设计应用层协议有两个要点

  • 要约定好传输的数据
  • 还要约定好数据的格式

1.1.协议模板

虽说可以自己设计,不过当前已经有很多模板被大佬设计好了.这里我们介绍几个常见的模板

1.1.1.xml

xml是由标签构成的.主要样式为: <标签名>内容</标签名> .标签名是可以嵌套的.

(样式如下图)
在这里插入图片描述

虽然xml格式的可读性很高,但是引入了很多的辅助信息.是比较浪费带宽的.而在网络传输中,宽带开销是比较高的.因此xml现在很少作为应用层协议的设计模板.现在使用xml主要是作为一些配置文件.

1.1.2.JSON

JSON数据格式主要是一个 {} 中包含很多键值对.键值对之间用逗号分割,键和值之间用冒号分割.键是字符串类型,值未限制类型.

JSON 中单引号和双引号都表示字符串,由于 JSONkey 必须是字符串.所以一般情况下key的引号是可以省略的.

(样式如下图)

在这里插入图片描述

虽然 JSON 在当前是比较流行的数据格式. 但是 JSON 在表示一个复杂的数组时,key会出现多次,数据还是会产生冗余.

1.1.3.protobuffer

protobuffer是一种二进制格式的数据

在protobuffer的数据中,不再包含上面key 的名字了.而是通过顺序以及一些特殊符号,来区分每个字段的含义. 同时再通过一个IDL文件来描述这个数据格式(描述各个部分都是什么意思)

IDL 只是起到一个辅助开发的效果,并不会真正的进行传输.传输的只是二进制的纯粹的数据.

2.传输层协议

常见的传输层协议有两种 TCPUDP .

2.1.UDP数据格式

UDP报头 (源端口+目的端口+报文长度+校验和.大小均为2字节,UDP报头总大小为8字节) + UDP数据载荷 (完整的应用层数据)

(UDP数据格式如下图)
在这里插入图片描述

应用层数据报封装成UDP数据报,本质上就是在应用层数据报的基础上添加了8个字节的报头.

  • 报文长度:2字节(范围:0-65535(单位字节)->最大就是64k)
    • 如果需要传送较大的数据,主要做法就是在应用层对数据报进行分包,然后再发送.接收方再把收到的数据报重新拼接成一个完整的数据
  • 校验和:用来验证数据是否正确(准确率不是100%(校验和正确,数据不一定真的正确.但是检验和错误的时候,数据一定有问题)).

2.2.TCP数据格式

TCP报头 (16位源端口+16位目的端口+32位序号+32位确认序号+4位首部+6位保留位+(6个标志位)+16位窗口大小+16位校验和+16位紧急指针+选项) + 应用层数据

六个标志位 : URG ACK PSH RST SYN FIN ,标志位已经有固定含义,所以传输时,只需要将标志位置为0/1. 1就表示选择了当前含义.(例如:ACK标志位为1时,表示当前报文是确认报文段)

  • URG: 紧急报文段
  • ACK: 确认报文段
  • PSH: 推送报文段
  • RST: 复位报文段
  • SYN: 同步报文段
  • FIN: 结束报文段

(TCP数据格式如下图)
在这里插入图片描述

TCP选项是不确定的,所以TCP数据报的大小也不固定.

2.3.TCP传输机制

2.3.1.确认应答(保证可靠传输的核心机制)

  • 接收方收到消息之后,给发送方返回一个应答报文(ACK,acknowledge),表示自己已经收到了.
  • 由于网络环境不确定,就会产生一种情况:后发先至(多个以太网数据帧之间)
    • 后发先至的解决方法:
    • 对消息进行编号(序号 和 确认序号).
    • 确认序号 表示当前这个应答报文是针对哪个消息进行的确认应答.
  • TCP并不是根据消息条数进行编号.而是根据字节, 每个字节都进行了编号.
    • 发送的数据中序号就是发送的字节数据范围.
    • 确认应答报文中的确认序号就是当前从头接收到了哪个字节(从头拼接到数据断开的字节序号)

2.3.2.超时重传(对确认应答的补充)

  • 如果传输中丢包,就会缺少要等待的ACK(确认报文).传输方等待一定时间后还没有收到ACK.就重新发送一次数据.
  • 正常网络情况下,连续丢包两次的概率是比较低的.所以如果连续重传失败,就会放弃重传.断开TCP连接.
  • 但是丢包是分情况的
    • 如果是发送的数据丢了,重新发送对整体不会有影响.
    • 如果是应答报文ACK丢了.就会重复发送两次数据,如果没有处理就会比较危险.(TCP内部会进行去重操作)

2.3.3.连接管理

2.3.3.1.如何建立连接(三次握手)

三次握手:客户端和服务器之间,通过三次交互建立连接.(客户端发起请求)

(三次握手过程如图)
在这里插入图片描述

  • 三次握手之所以是三次是因为服务器返回时将(ACK和SYN)打包在一个报文中发送(让两个标志位同时为1)
    • 也可以不将(ACK和SYN)打包在一起发送(四次握手)
  • 因为三次握手中间的 ACK+SYN 都是操作系统负责进行的.中间不会有很长的间隔,所以是可以打包的.
  • 三次握手的作用:
    • 检查当前这个网络的情况是否满足可靠传输的基本条件.(主要)
    • 三次握手的同时也会相互交互一些信息.
  • 三次握手交互的信息在建立连接之后会被客户端和服务器双方保存.
    • 主要信息就是五元组.源IP,源端口,目的IP,目的端口,协议类型(TCP)

2.3.3.2.如何断开连接(四次挥手)

四次挥手:客户端和服务器之间,通过四次交互断开连接.(发送方可能是客户端,也可能是服务器)

(四次挥手过程如图)
在这里插入图片描述

  • 中间发送ACK和FIN不合并的原因:两个报文发送的时机是不同的.
    • 四次挥手中间的 ACK 是内核负责的.而 FIN 是用户代码负责的(调用close触发).因此一般这两个报文是不可以合并的.所以一般不可以是三次挥手.
    • 但是,当在第一次挥手之后,如果被动方没有数据要发给主动方.第二和第三次挥手就有可能合并传输. 这样就出现了三次挥手.
  • 第四次挥手的ACK发送结束后,发送端资源不会立即销毁,会有一个超时时间(TIME_WAIT),时间长度为 2MSL
    • 预防最后一次传输过程中ACK丢包(等待接受重传的FIN:因为如果ACK丢包,接收方就会重新发送一次FIN.当再次接受到FIN,就说明ACK丢包.需要重新发送)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机语音进店迎宾器统计进店人数可定制播报铃声(可选PCB)

实践制作DIY- GC0115-语音进店迎宾器统计进店人数 一、功能说明&#xff1a; 基于51单片机设计-语音进店迎宾器统计进店人数 功能介绍&#xff1a; 硬件组成&#xff1a;STC89C52&#xff08;AT89C51/52&#xff09;单片机串口语音播报模块2个红外对射传感器一个按键&#x…

C++不知算法系列之高精度数值处理算法

1. 前言 什么是高精度数值处理算法&#xff1f; 高精度数值指因受限于计算机硬件的制约&#xff0c;超过计算机所能存储范围的数值。既然不能存储&#xff0c;更谈不上运算。 对此类数值的加、减、乘、除运算需要提供针对性的算法方能获取到结果。此类算法的设计思路因有别于…

VMware环境配置

文章目录一、环境配置1、修改主机名&#xff0c;然后切换到root用户2、确认主机网关a.确认windows主机网关b.确认虚拟机主机网关3、修改网络配置4、设置DNS域名解析的配置文件resolv.conf。5、修改hosts文件6、重启网络服务7、验证网络服务a.虚拟机ping百度b.主机ping虚拟机二、…

vscode使用restClient实现各种http请求

vscode使用restClient实现各种http请求 一&#xff0c;安装插件 首先&#xff0c;我们要在vscode的扩展中&#xff0c;搜索rest Client&#xff0c;然后安装它&#xff0c;这里我已经安装过了。 安装后&#xff0c;我们就可以使用rest client插件进行http各种操作了。 二&a…

MySQL---权限控制和用户、角色管理详解

目录 一、MySQL用户登录 二、用户管理 三、权限控制 四、角色管理 一、MySQL用户登录 一般在本机上我们的登录命令&#xff1a; mysql -u root -p密码这里介绍命令的作用&#xff1a; -u 指定用户名 -h 指定主机地址&#xff08;默认为localhost&#xff09; -p 指定用…

CHRONY - 时钟同步

一、同步公网时间源 安装chrony: yum install chrony -y 查看chrony的重要配置文件:rpm -ql chrony 修改chrony配置文件: vim /etc/chrony.conf 查看修改了的配置文件 egrep -v "^#|^$" /etc/chrony.conf

Baklib知识库|为什么知识共享工具对减少内部知识缺口至关重要

你的企业是否存在知识缺口&#xff1f; 知识缺口——没有对关键知识进行研究和记录&#xff0c;以有效地传播信息&#xff0c;并教育企业内外的用户——可能是寻求生产率最大化并最终实现利润增长的公司的一个关键缺陷。知识&#xff08;或数据、关键信息等&#xff09;是你的…

你一定要知道的四个程序员接外包的网站,悄悄把技术变现!

说起程序员接外包的网站&#xff0c;你在网上一搜发现数不胜数&#xff0c;但真正有用的却很少。然后你想快速的找到几个靠谱的网站&#xff0c;去看了看接外包的攻略&#xff0c;你会发现排雷的又数不胜数。一时间你还真不知道要选哪一个。 接下来就为大家推荐几个我认为比较…

165 pbi-utils 使用文档

165 pbi-utils 使用文档 一、背景 先来说一下为什么会有 pbi-utils 这个小工具吧。在我日常做演示的示例文件的时候&#xff0c;每次都要重新搞一次 Power BI Desktop&#xff0c;就想能不能像 PPT 模板那样&#xff0c;搞一个模板&#xff0c;然后更专心的去专注内容本身呢&…

网络规划.1.扩展.IP地址规划

第一章 IPv4 Internet中有数百万台以上的主机和路由器&#xff0c;IP 地址可以确切地标识它们。- 一台主机至少拥有一-个IP地址。任何两台主机的IP地址不能相同&#xff0c;但是允许一台主机拥有多个IP地址。如果一台计算机虽然也连入Internet, 使用Internet 的某些功能&#…

Android 开发中原始音频的录播和和自定义音频控制条的讲解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、原始音频的录播 语音通话功能要求实时传输&#xff0c;如果使用MediaRecorder与MediaPlayer组合&#xff0c;那么只能整句话都录完并编码好了才能传给对方去播放&#xff0c;这个时效性太差。 此时用到音频录制器AudioRecord与音…

[附源码]Python计算机毕业设计二手书交易系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

企业如何提供安全方面的投资回报率?

为什么增加在恢复方面的投资可以提高投资回报率? 所有企业都会认可安全的重要性&#xff0c;但在安全上的投入却经常令人迷惑。 一方面&#xff0c;由于安全威胁在不断变化&#xff0c;所以&#xff0c;安全建设维护需要长期持续大量投入。另一方面&#xff0c;长期大量投入后…

第6章 集成第3方依赖注入中间件“Autofac”

“Blog.Core-master”示例程序中接口及其具体实现类的注入操作&#xff0c;是通过第3方依赖注入中间件“Autofac”来以反射方式把Service.dll 程序集中所有接口及其具体实现类的实例依赖注入内置容器中。.Net(Core).x框架是中的内置依赖注入容器是不支持程序集注入的。 从最佳实…

葡萄糖-聚乙二醇-人血清白蛋白,HAS-PEG-Glucose,人血清白蛋白-PEG-葡萄糖

葡萄糖-聚乙二醇-人血清白蛋白,HAS-PEG-Glucose,人血清白蛋白-PEG-葡萄糖 人血清白蛋白(HSA)是一种高度水溶性的球状单体血浆蛋白&#xff0c;相对分子量为67KDa&#xff0c;由585个氨基酸残基、一个巯基和17个二硫键组成。在纳米颗粒载体中&#xff0c;HSA纳米颗粒与各种药物…

直播预告丨中高频多因子库存储的最佳实践

因子挖掘是量化交易的基础。随着历史交易数据日益增多&#xff0c;交易市场量化竞赛的不断升级和进化&#xff0c;量化投研团队开始面对数据频率高、因子数量多的场景&#xff0c;以10分钟线10000个因子5000个股票为例&#xff0c;一年的因子数据约为 2.3T 左右&#xff0c;1分…

BUUCTF Reverse/firmware

安装工具firmware-mod-kit &#xff0c;可以参考这个firmware-mod-kit工具安装和使用说明 最后make的时候报了个错&#xff0c;参考这个&#xff1a;linux安装firmware-mod-kit /firmware-mod-kit/src/uncramfs/uncramfs.c 加上头文件&#xff1a;#include <sys/sysmacros.h…

想做TikTok跨境电商?如何运营?

想做TikTok跨境电商&#xff1f;如何运营&#xff1f; 据官方报道&#xff1a; 2021年8月TikTok全球月活跃用户数已突破10亿 自2020年7月以来增长了45% 相比2020年初则增长了一倍 月活跃用户能达10亿&#xff0c;覆盖150个国家地区 你只要爆了一条视频 分一小杯羹就能舒…

13.5 GAS与连击

目录1. 连击检测窗口与砍出的第二刀1. 连击检测窗口与砍出的第二刀 连击的实现思路是&#xff0c;在劈砍动画的期间的某一段窗口期&#xff0c;令角色能够再次响应输入&#xff0c;完成伤害动作并进入新的连击动画&#xff0c;直到连招打完。所以核心关键就在于这一段连击窗口…

Halcon机器视觉实战--分水岭分割+距离变换实现粘连物体图像分割

分水岭的原理 把图像的灰度看作高度图,图像中每个像素点的灰度值看作该点的高度,高灰度值代表山脉,低灰度值代表盆地,每个局部最小值及其周围区域称为集水盆,而集水盆的边界则形成分水岭。 分水岭算法的步骤 1.彩色图像转化成单通道灰度图 2.求梯度图 3.在梯度图的基础…