网络基础扫盲--TCP/UDP

news/2024/5/18 15:29:15 标签: 网络, tcp/ip, udp

博客内容:TCP/UDP


文章目录

  • 一、TCP与UDP
  • 二、tcp可靠性如何保证?
    • 1、三次握手
    • 2、TCP报头
    • 3、TCP四次挥手


一、TCP与UDP

tcp与udp都是传输层的协议,用于数据的传输。
对于tcp而言数据的传输会比较可靠,主要依赖于tcp面向链接的,采用“字节流”,同时会对于数据顺序排序,以及数据的流量控制,重发机制等来保障。
udp是无连接的一种协议,数据报的传输就得不到保证,但是不需要进行链接就意味着数据的传输速度方面就比tcp快。通过对比会发现俩者都是进行一个“互补”。适用的场景不同对于tcp要求可靠,有序、传输量大的应用,比如文件传输,云端备份。udp就适合对于实时要求高的,传输速度快,数据量小,可以容忍对于数据的丢失的,比较实用的就是网络游戏,视屏会议等。

二、tcp可靠性如何保证?

1、三次握手

对于tcp的三次握手来提高对于对于数据安全的链接
在这里插入图片描述

  1. 第一次握手:客户端向服务器发送SYN包,表示请求连接
  2. 第二次握手:服务器收到SYN包后,向客户端发送ACK包,表示确认收到请求,并发送自己的SYN包,表示同意连接
  3. 第三次握手:客户端收到服务器的SYN包后,向服务器发送ACK包,表示确认收到同意连接的消息

这样,服务器收到ACK包后,TCP连接就建立成功了。
客服端发起请求给服务器,服务器收到请求并作出响应。进行数据应答时带上自己的请求,这样的恢复恢复方式叫做捎带应答
这样建立的链接就可以进行数据的传输了,在数据传输的过程中对于发送和接受双方都需要对于数据进行处理。但是对于数据的接受都是有一定大小的不然就会出现你这边已经说的天花乱坠、口干舌燥。然后别人就会给你一个反馈一脸懵。为了防止这样的情况发生就会在双方交流前就说好,我能接受的范围的一个缓冲区MMS的最小值。
如何保证对方接受的消息就是当前需要发送给他的,他回复的应答如何是对于那一句的回复。换句话说就是避免俩个人在进行“交流”时,出现牛头不对马嘴的情况。

  • 顺序控制
    这就是对于消息一个处理,对于数据段中的每一个字节都进行一个编号(序列号),这样就行数据发送时只需要进行对数字的一个确认尽可以了。在范围内进行最后一个数字和消息最后一个编号对应就可以。回答时只需要最后一个编号就可以了。如果在一段时间内没有得到消息回复,无法判断是否收到数据。就会认为是数据包丢失或损坏:如果发送方在规定的时间内(计时器超时时间)没有收到接收方的确认消息,就会认为该数据包已经丢失或损坏。这个时候就会一进行数据的重发来避免数据的丢失问题。就是重发机制。
  • 流控制
    流量控制是指TCP协议使用滑动窗口来控制数据发送的速率。TCP连接的两端会通过一个滑动窗口来控制每个数据包的大小和发送速率。发送方根据接收方发送的确认信息动态调节发送窗口的大小,以限制发送数据的速率,避免网络拥堵和丢包。
    实际上,TCP的流量控制使用了两个窗口:拥塞窗口和接收窗口。拥塞窗口用于限制整个网络的拥塞情况,而接收窗口用于限制接收方的接收能力。TCP发送方的拥塞窗口大小由网络拥塞程度决定,而接收方的窗口大小由接收方的接收能力决定。
    当发送方向接收方发送数据时,接收方会返回一个ACK确认信息,确认接收的数据量,并通知发送方自己的接收窗口大小。发送方会根据这个窗口大小来动态调整自己的发送速率,以避免发送方发送过多数据导致网络拥堵和丢包。

2、TCP报头

看完tcp的报头就会理解tcp的可靠性了。
在这里插入图片描述

TCP头部共有20个字节,包含以下字段:

字段名称字节数描述
源端口号2源端口号,标识发送端口
目标端口号2目标端口号,标识接收端口
序列号4本次传输数据的第一个字节在数据流中的序号
确认号4确认号为期望收到的下一个数据包序号,即确认接收方已经收到了序列号到确认号之间的字节
数据偏移4 bits表示TCP头部的长度,单位为4字节,所以该字段的值为TCP头部长度/4,取值范围为0~15
保留6 bits保留字段,保留以后用
控制位6 bits包括URG、ACK、PSH、RST、SYN、FIN六个标志位,用于控制TCP连接的建立、维护和结束
窗口大小2接收窗口大小,表示接收方当前还能接收多少数据
校验和2TCP头部和数据的校验和
紧急指针2表示紧急数据在当前数据流中的位置
选项可变TCP头部的可选项,包括最大段大小、时间戳、SACK等

数据偏移的取值范围是[0,60]字节,对于整个报头是20
字节。所以选项的大小就是:偏移*4-20=选项的大小。

3、TCP四次挥手

TCP四次挥手是指TCP连接的终止过程,

在这里插入图片描述

  1. 主动关闭方发送终止连接请求,即FIN报文段,进入FIN_WAIT_1状态。

  2. 被动关闭方收到FIN报文段后发送确认报文段ACK,进入CLOSE_WAIT状态。

  3. 被动关闭方关闭连接时,发送FIN报文段,进入LAST_ACK状态。

  4. 主动关闭方收到FIN报文段后发送确认报文段ACK,进入TIME_WAIT状态。在等待2倍的最大段生存时间(2MSL)后,进入CLOSED状态。

通过这四个步骤,TCP连接正常地终止。值得注意的是,第三步和第四步可以合并成一步,即被动关闭方发送完FIN报文段后直接关闭连接,但是主动关闭方需要在收到ACK报文段后等待2MSL的时间才能关闭连接。这是为了防止ACK报文段在传输过程中丢失,导致主动关闭方无法正常收到确认信息。


http://www.niftyadmin.cn/n/5151181.html

相关文章

Pytho入门教程之Python运行的三种方式

文章目录 一、交互式编程二、脚本式编程三、方式三关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 一、交互式编…

好物周刊#29:项目管理软件

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. HelloGithub 分享 GitHub 上有趣、入门级的开源项目。每月 28 号以月刊…

android studio 字节码查看工具jclasslib bytecode viewer

jclasslib bytecode viewer 是一款非常好用的.class文件查看工具; jclasslib bytecode editor is a tool that visualizes all aspects of compiled Java class files and the contained bytecode. Many aspects of class files can be edited in the UI. In addit…

文件上传学习笔记

笔记 文件上传 文件上传是指将本地图片,视频,音频等文件上传到服务器,供其它用户浏览或下载的过程 文件上传前端三要素 : file表单项 post方式 multipart/from-data 服务端接收文件 : 用spring中的API : MultipartFile 要想文件名唯一 …

Android性能优化--Perfetto用SQL性能分析

Android性能优化–Perfetto用SQL性能分析 文章目录 Android性能优化--Perfetto用SQL性能分析介绍Perfetto SQL 基础使用 Perfetto SQL 进行性能分析总结 本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134167741 最新更新地址 https://gitee.com/chenjim/che…

网络协议的基本概念

网络协议的基本概念 随处可见的协议 在计算机网络与信息通信领域里,人们经常提及“协议”一词。互联网中常用的具有代表性的协议有IP、TCP、HTTP等。 “计算机网络体系结构”将这些网络协议进行了系统归纳。TCP/IP就是IP、TCP、HTTP等协议的集合。现在&#xff0…

Redis7.x 高级篇

Redis7.x 高级篇 Redis版本发行时间Redis单线程说的是什么东西 Redis版本发行时间 Redis单线程说的是什么东西

文件夹重命名与大小写转换:提高文件检索准确性的技巧

在文件管理中,文件夹的命名和大小写转换是非常重要的操作。正确的文件夹命名和大小写转换可以提高文件检索的准确性,从而提高工作效率和文件管理的便利性。现在来看云炫文件管理器如何进行文件夹重命名和大小写转换的技巧,以帮助您更好地管理…