【TCP/UDP】MSS和MTU、UDP报文、TCP报文、如何实现TCP的长连接、TCP的粘包问题如何解决等重点知识汇总

news2024/11/16 8:50:31

目录

MSS 和 MTU

UDP 和 TCP 区别及应用场景

UDP头部中有哪些信息?

TCP头部中有哪些信息?

TCP的长连接如何实现

TCP粘包和解决


TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

UDP是一种提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

MSS 和 MTU

MTU:一个网络包的最大长度,以太网中一般为 1500 字节。

MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

UDP 和 TCP 区别及应用场景

TCP 和 UDP 区别:

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。

4. 拥塞控制、流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。最大为15,即60字节。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

TCP 和 UDP 应用场景:

由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:

  • FTP 文件传输;
  • HTTP / HTTPS;

由于 UDP 面向无连接,它可以随时发送数据,再加上 UDP 本身的处理既简单又高效,因此经常用于:

  • 包总量较少的通信,如 DNS 、SNMP 等;
  • 视频、音频等多媒体通信;
  • 广播通信;

UDP头部中有哪些信息?

UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。

UDP 协议真的非常简,头部只有 8 个字节(64 位),UDP 的头部格式如下:

  • 目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
  • 报文长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
  • 校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP 包。

下是UDP校验和的计算方式:

数据分段:首先,数据报文被分割成多个16位的字(或者称为16位字,即两个字节),如果数据长度不是16位的整数倍,最后一个字节将被扩展为16位。

求和:将这些16位字依次相加,形成一个32位的中间和,如果中间和的高16位不为0,将其加到低16位上,得到最终的16位和。

取反:将最终的16位和按位取反(将0变为1,1变为0)。

存储:将这个取反后的16位和放入UDP报文头部的校验和字段。

接收方在接收UDP数据报时执行相同的计算,将数据和接收到的校验和字段进行相同的校验和计算。如果接收方的计算结果与发送方发送的校验和相同,那么数据包被认为是完整的;如果计算结果不同,那么数据包可能在传输过程中发生了错误或损坏。

TCP头部中有哪些信息?

  • 序号(32bit):在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
  • 确认序列号(32bit):指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。
  • 首部长度(4bit):标识首部有多少个4字节 * 首部长,最大为15,即60字节。
  • 标志位(6bit)
    • URG:标志紧急指针是否有效。
    • ACK:标志确认号是否有效(确认报文段)。用于解决丢包问题。
    • PSH:提示接收端立即从缓冲读走数据。
    • RST:表示要求对方重新建立连接(复位报文段)。
    • SYN:表示请求建立一个连接(连接报文段)。
    • FIN:表示关闭连接(断开报文段)。
  • 窗口(16bit):接收窗口。用于告知对方(发送方)本方的缓冲还能接收多少字节数据。用于解决流控。
  • 紧急指针: 用于指示在TCP数据流中的紧急数据的位置。紧急数据是指在通信中需要立即处理的数据,通常用于通知接收方在其它数据之前立即处理某些特殊情况。
  • 校验和(16bit):接收端用CRC检验整个报文段有无损坏。

TCP的校验和计算方式如下:

数据分段:首先,TCP数据流被分割成多个TCP段。每个TCP段包括TCP头部和TCP数据。

伪头部:在计算校验和之前,需要创建一个伪头部(Pseudo-Header),该伪头部包括以下信息:

源IP地址

目标IP地址

协议字段(TCP的协议号,通常是6)

TCP段的长度(包括TCP头部和TCP数据的总长度)

数据合并:将伪头部和TCP段的内容合并成一个连续的字节序列。

求和:对上述合并后的字节序列进行16位的求和。具体做法是将数据分成16位的块,然后依次相加,如果最终结果超过16位,则将高位溢出的部分加到低位上。

取反:将16位的求和结果按位取反(将0变为1,将1变为0)。

存储:将取反后的16位值放入TCP报文头部的校验和字段。

接收端在接收TCP段时执行相同的计算,将数据与接收到的校验和字段进行相同的校验和计算。如果接收方的计算结果与发送方发送的校验和相同,那么数据包被认为是完整的。如果计算结果不同,那么数据包可能在传输过程中发生了错误或损坏,接收端会丢弃它。

TCP的长连接如何实现

TCP长连接是指在TCP协议中,两个通信节点之间建立的一种持久的连接,可以在通信过程中保持打开状态,而不需要每次都重新建立连接。

TCP长连接可以通过以下几种方式实现:

  1. 心跳机制:客户端和服务器端定时发送心跳包,以保证连接的活跃状态。
  2. 保活机制:客户端和服务器端通过设置超时时间来保证连接不会被关闭。
  3. 重传机制:当数据包丢失时,客户端会自动重传数据包,以保证数据的完整性。

TCP粘包和解决

当用户消息通过 TCP 协议传输时,消息可能会被操作系统分组成多个的 TCP 报文,也就是一个完整的用户消息被拆分成多个 TCP 报文进行传输。

这时,接收方的程序如果不知道发送方发送的消息的长度,也就是不知道消息的边界时,是无法读出一个有效的用户消息的,因为用户消息被拆分成多个 TCP 报文后,并不能像 UDP 那样,一个 UDP 报文就能代表一个完整的用户消息。

我们不能认为一个用户消息对应一个 TCP 报文,正因为这样,所以 TCP 是面向字节流的协议

当两个消息的某个部分内容被分到同一个 TCP 报文时,就是我们常说的 TCP 粘包问题,这时接收方不知道消息的边界的话,是无法读出有效的消息。

要解决这个问题,要交给应用程序

如何解决粘包?

粘包的问题出现是因为不知道一个用户消息的边界在哪,如果知道了边界在哪,接收方就可以通过边界来划分出有效的用户消息。

一般有三种方式分包的方式:

  • 固定长度的消息;
  • 发送方:在每个消息前添加一个固定长度的消息头,该消息头包含了消息的长度信息。接收方:根据消息头中的长度字段来准确地划分消息。
  • 05Hello10World,消息头包含了消息的长度信息,"05"表示第一个消息的长度为5个字节,"10"表示第二个消息的长度为10个字节。
  • 特殊字符作为边界;
  • 发送方:在每个消息的末尾添加一个特殊的字符(例如换行符 '\n')作为消息的结束标志。接收方:根据特殊字符来分割消息。
  • Hello\nWorld\n,接收方根据换行符来划分两个消息,分别是"Hello"和"World"
  • 自定义消息结构。
  • 发送方:使用自定义的消息结构,例如JSON,同时在消息中包含长度信息或其他分隔标志。接收方:解析消息结构来准确地划分消息。
  • {"length": 5, "message": "Hello"}{"length": 10, "message": "World"},接收方解析JSON消息结构中的长度字段,然后根据长度信息来划分消息。

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

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

相关文章

漏洞扫描环境:win10系统用VMware Workstation打开虚拟机若干问题

win10系统用VMware Workstation打开虚拟机若干问题 一 .VMware打开虚拟机就蓝屏重启怎么解决?一. VMware打开虚拟机就蓝屏重启怎么解决?方法一:1、同时按下CTRLSHIFTESC打开任务管理器功能,之后依次点击-详细信息-性能后出现下列界…

制作PE启动盘

文章目录 ⭐️写在前面的话⭐️1、下载微PE2、格式化U盘3、安装PE到U盘4、下载镜像 ⭐️写在前面的话⭐️ 📒博客主页: 程序员好冰 🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】 📌本文由 程序员好…

二维码智慧门牌管理系统引领未来

文章目录 前言一、数据安全性与保密性二、跨网络交互与灵活部署三、系统的优势 前言 在科技飞速发展的时代,传统门牌管理系统逐渐无法满足现代社会的需求。为了解决这一问题,一款基于二维码智慧门牌的管理系统应运而生。这款系统不仅运用了先进的科技力…

java常用API之Object

Objct toString() package myObjct;public class myObjct {public static void main(String[] args) {Object onew Object();System.out.println(o.toString());//打印结果java.lang.Object27f674d} }java.lang.Object27f674d后面的27f674d是地址值 package myObjct;import ja…

港联证券:“你我同心 反诈同行”

9月26日,在国家金融监督管理总局深圳监管局的指导下,“你我同心 反诈同行”——金融顾客权益保护教育宣传月活动暨金融青年反诈宣传自愿公益行为成功举行。本次活动将传递顾客权益保护理念与防范电信网络欺诈相结合,鼓舞金融青年聚集人民大众…

力扣:111. 二叉树的最小深度(Python3)

题目: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 来源:力扣(LeetCode) 链接:力扣(LeetCod…

CentOS密码重置

背景: 我有一个CentOS虚拟机,但是密码忘记了,偶尔记起可以重置密码,于是今天尝试记录一下,又因为我最近记性比较差,所以必须要记录一下。 过程: 1、在引导菜单界面(grub&#xff…

vscode设置vue3用户代码片段

打开vscode,点击设置选中用户代码片段: 前面我尝试创建vv的文件当做vue3模板代码文件,上面可以看见,但是忽略了一点: 创建用户代码片段的文件必须是json文件才可以使用,不然不可以使用 发现来源是此篇文章:如何解决Vue3没有代码提示问题?_vscode vue3代码提示_寻梦…

Nmap使用教程图文教程(超详细)

Nmap使用教程 一、端口扫描1. 指定端口2. 指定扫描方式2.1 TCP全连接扫描2.2 SYN半链接扫描2.3 隐秘扫描 二、主机探测三、服务识别四、系统识别五、扫描结果导出 kali的命令行中可以直接使用 nmap 命令,打开一个「终端」,输入 nmap 后回车,可…

K8s架构简述

以部署一个nginx服务说明kubernetes系统各个组件调用关系: 一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件 apiServer组件会调用scheduler组件来决定到底…

代码随想录刷题笔记10——动态规划

动态规划理论基础 动态规划定义 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区…

【VUE复习·3】@keyup.xxx 键盘事件触发函数(单按键 or 组合按键触发)

总览 1.keyup.xxx or keydown.xxx 单按键触发 2.组合按键触发 一、keyup.xxx or keydown.xxx 1.用法 在我们使用 keyup.enter 时&#xff0c;那么我们可以这样写&#xff1a; <div><input type"text" placeholder"按下回车键以确定..." keyu…

【新版】系统架构设计师 - 层次式架构设计理论与实践

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…

CyclicBarrier 、CountDownLatch 、Semaphore 的用法

1 CountDownLatch&#xff08;线程计数器 &#xff09; CountDownLatch类位于java.util.concurrent 包下&#xff0c;利用它可以实现类似计数器的功能。比如有一个任务 A&#xff0c;它要等待其他 4 个任务执行完毕之后才能执行&#xff0c;此时就可以利用 CountDownLatch 来实…

开源对手模拟工具:Network Flight Simulator

Network Flight Simulator 是一款轻量级实用程序&#xff0c;可生成恶意网络流量并帮助安全团队评估安全控制和网络可见性。 该工具执行测试来模拟 DNS 隧道、DGA 流量、对已知活动 C2 目的地的请求以及其他可疑流量模式。 安全行业内关于全面产品&#xff08;例如 EDR、SI…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Badge

可以附加在单个组件上用于信息标记的容器组件。该组件从API Version 7开始支持。 支持单个子组件。子组件类型&#xff1a;系统组件和自定义组件&#xff0c;支持渲染控制类型&#xff08;if/else、ForEach和LazyForEach&#xff09;。 一、接口 方法1&#xff1a; Badge(value…

2022最新--Oracle数据库完整版(P1-P12)

目录结构 admin目录 cfgtoollogs目录 checkpoints目录 diag目录 flash_recovery_area&#xff08;闪回区&#xff09;目录 oradata目录 orcl数据库文件 数据库中的文件介绍 product目录 Oracle 系统用户介绍 sys用户 system用户 sys和system用户在登录时的区别 scott用户 Or…

法兰安装技术要求

法兰密封面应正确对中(轴向和径向)&#xff0c;法兰密封面的平行度和对中的允差应符合下列要求&#xff0c;如图 1所示&#xff1a; a) 法兰接头中心线错口<1.5 mm&#xff1b; b) 法兰接头密封面的不平行度≤0.8 mm&#xff1b; c) 法兰螺栓孔应对准&#xff0c;孔与孔之…

VM虚拟机连接NAT虚拟网络并上网的总结

关键字 VMware、NAT、VM虚拟机、ip route get、网关、私有云 设置 虚拟网络 VMware虚拟网络管理器中显示当前所有VMware的虚拟网络&#xff0c;根据显示&#xff0c;这里是"VMnet8"网络是NAT模式&#xff08;寄主机只能存在一个NAT虚拟网络&#xff0c;也就是说&a…