计算机网络——快速了解传输层协议

news2024/12/24 7:17:16

文章目录

  • 一、TCP和UDP的区别
  • 二、TCP
    • 1.TCP报文段
    • 2.建立连接(三次握手)
    • 3.断开连接(四次挥手)
    • 4.TCP提供的支持
  • 三、UDP
  • 参考

一、TCP和UDP的区别

传输层协议有两个——TCP和UDP,二者区别如下:

在这里插入图片描述

二、TCP

1.TCP报文段

在这里插入图片描述

  • 序号Seq: 当TCP从进程接受数据字节时,就把它们存储在发送缓存中,并对每一个字节进行编号,编号的特点是编号不一定从0开始,一般会产生一个随机数作为第一个字节的编号,称为初始序号(ISN),范围是0~2^32-1。TCP每个方向的编号都是互相独立的。当字节都被编上号后,TCP就给每个报文段指派一个序号,序号就是该报文段中的第一个字节的编号。当数据到达目的地后,接收端会按照这个序号把数据重新排列,确保数据的正确性。
  • 确认号Ack: 确认号是对发送端的确认信息,用它来告诉发送端这个序号之前的数据段都已经收到。
  • 控制位: 这六位有着很重要的作用,TCP的连接、传输和断开都受这六个控制位的指挥。
    URG(紧急位):紧急指针有效位
    ACK(确认位):只有当ACK=1时,确认序列号o字段才有效;当ACK=0时,确认序列号字段无效。
    PSH(急迫位):标志位为1时要求接收方尽快将数据段送达应用层。
    PST(重置位):当PST值为1时通知重新建立TCP连接。
    SYN(同步(连接)位):同步序号位,TCP需要 建立连接时 将这个值设为1。
    FIN(断开位):发送端完成发送任务位,当TCP完成数据传输 需要断开连接时 ,提出断开连接的一方这个值设为1。

2.建立连接(三次握手)

确认号Ack是为了确认收到了对方的数据以及确认收到了正确的序列号Seq而设置的。

  • 第一次握手: PC1向PC2发送一个SYN报文,请求建立连接,其中包括了Seq = x和SYN = 1。
  • 第二次握手: PC2收到PC1的报文后,回复一个SYN+ACK报文,表示收到对方的请求,并请求建立连接,其中包括了Seq = y、Ack = x+1,SYN = 1,ACK = 1。
  • 第三次握手: PC1收到PC2的报文后,回复一个ACK报文,表示确认收到,其中包括了Seq = y、Ack = x+1,SYN = 1,ACK = 1。
  • 建立连接: PC2收到第三次握手报文之后,两个机器建立起连接。

在这里插入图片描述

  • 为什么是三次不是两次: 试想一下,假如两次握手就建立起了连接。如果1端此前有一个请求建立连接的报文在发给2端的途中丢失了,超时重传机制会让1端重新发送一个报文,从而继续建立连接。但是,过了可能一段时间后,此前1端丢失的报文到达了2端,如果是两次握手,那么此时1和2端就会直接建立起连接,然后2端认为他们已经建立起了连接,但是1端又没有通信需求,因此2端就会进入不必要的等待状态中,这其实是一种资源上的浪费。

3.断开连接(四次挥手)

  • 第一次挥手: client向server发送一个FIN报文,请求断开连接,其中包括了Seq = p和FIN = 1。
  • 第二次挥手: server收到client的报文后,回复一个ACK报文,表示收到对方的请求,其中包括了Ack = p+1,ACK = 1。
  • 第三次挥手: 由于此时server端可能还有数据没发送完,因此会继续发送数据,然后等发送完后,会向client发送一个FIN报文,请求断开连接,其中包括了Seq = q和FIN = 1。
  • 第四次挥手: client收到报文后,回复一个ACK报文,表示收到对方的请求,其中包括了Ack = q+1,ACK = 1。然后client会进入超时等待状态,过了这个状态后二者断开连接。

在这里插入图片描述

  • 为什么是四次: 多了第三次挥手,目的是为了确保server端数据能发送完,而不是在数据没发完的时候就断开连接。

  • 为什么超时等待: 设定一个时间,如果在时间内server端没有因为没收到来自client端的报文而重新发起第三次挥手,则表明对方收到了client发过去的第四次挥手,就可以真正断开了,避免server陷入没必要的等待中。

4.TCP提供的支持

  • 可靠性支持:

序列号:给每个字节提供序列编号。
确认应答:对于对方发送过来的数据进行带确认序号的确认应答。
超时重传:一定时间内没有收到确认,会进行超时重传。

  • 效率支持(滑动窗口):
    滑动窗口:通过滑动窗口机制提升通信效率,可以进行多个数据段的发送和确认应答等待。

  • 流量控制(滑动窗口):
    如果发送端一味地发送数据,当发送的数据量超出了接收方的接收能力时,就会导致数据因为来不及接收而丢失,因此需要进行流量控制。具体操作是,接收端向发送端通知自己可以接收数据的大小(窗口),发送方将会根据窗口大小控制数据的发送量。

  • 拥塞控制(滑动窗口):
    网络是有一定承受能力的,在网络拥堵时,如果如果突然发送一个较大的数据,就可能导致网络的瘫痪。因此TCP提供了一种慢启动算法,对发送的数据量进行控制。

在一开始,将拥塞窗口的大小设置为1个数据段(MSS最大数据分段),随着每一次发送数据并收到确认应答之后,窗口大小+1;
在每次发送数据时,会比较拥塞窗口大小和流量控制窗口大小,选一个更小值作为发送数据的窗口大小;
设置一个慢启动阈值,当拥塞窗口大于这个值时,将通过以下公式计算窗口放大比例:1个数据段的字节数^2/拥塞窗口大小的字节数。

三、UDP

  • UDP报文段:

在这里插入图片描述

  • UDP是面向无连接的,它可以随时发送数据,并且不会提供任何可靠机制,适用于以下场景:
    包总量较少的通信,比如DNS。
    视频、音频等多媒体即时通信,略微丢帧也没关系。
    广播、多播通信。

参考

《图解TCP/IP》
blog

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

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

相关文章

MySQL集群

目录 主从复制 主从复制流程: 为什么要有relay log中继日志? 为什么要有主从复制,好处? 实际生产环境中。如果对MySQL数据库的读写都在一台数据库服务器中操作,无论是再安全性、高可用性,还是高并发性等…

MapReduce之WordCount本地测试

1)需求 在给定的文本文件中统计输出每一个单词出现的总次数。 (1)输入数据 2)期望输出数据 banzhang 1 cls 2 hadoop 1 jiao 1 ss 2 xue 1 2)需求分析 按照MapReduce编程规范,分别编写Mapper&#x…

跨境电商支付平台-PingPong Pay(实现收银台模式沙箱支付)

介绍 PingPongCheckout 跨境支付的 API 接口文档,商户服务器和 PingPongCheckout 服务器进行交互。 供商户/平台服务方的技术开发及测试相关人员使用。 本文档分别从交互流程、通讯方式、签名方 案、交易接口、注意事项等⻆度详细介绍了 PingPongCheckout 跨境支付 API 接口的…

【C++】类和对象(中篇)

几个成员函数 类的6个默认成员函数构造函数引例特点 析构函数概念特点 拷贝构造函数概念特征 赋值运算符重载赋值运算符重载赋值运算符只能重载成类的成员函数不能重载成全局函数前置和后置重载 日期类的实现const成员函数取地址及const取地址操作符重载 类的6个默认成员函数 …

Web缓存利用分析(二)

导语:在上一篇文章中,大致介绍了一些关于Web Cache的攻击方式及CTF中的一些出现。而本篇文章则会聚焦于Web Cache在学术前沿的一些攻击利用方式的探究。 前言 在上一篇文章中,大致介绍了一些关于Web Cache的攻击方式及CTF中的一些出现。而本…

Web缓存利用分析(一)

导语:最近看到一些Web Cache方面的攻击,于是总结了一下,内容如下。 前言 最近看到一些Web Cache方面的攻击,于是总结了一下,内容如下。 背景知识 Cache是一种经典的用空间换时间的做法,其应用场景非常广…

Htop使用说明

目录 引言 什么是htop htop安装 htop界面介绍 htop功能介绍 引言 我们使用服务器的时候常常需要关注下自己的程序资源占用情况,htop就是一种互动式的进程查查看器,整齐用下来感觉比top的逼格高,造作可视化都更方便些,我觉得还…

《Vue.js 设计与实现》—— 02 框架设计核心要素

框架设计并非仅仅实现功能那么简单,里面有很多学问。例如: 框架应该给用户提供哪些构建产物?产物的模块格式如何? 当用户没有以预期的方式使用框架时,是否应该打印合适的警告信息从而提供更好的开发体验,让…

优化性能测试分析:如何科学利用CPU异常曲线

性能测试为保证软件质量起到重要作用,对于交易量较大的应用系统,性能测试更是一个必不可少的环节。 测试人员通常通过监测响应时间、吞吐量、应用服务器和数据库服务器的CPU及内存来衡量系统的性能是否达标,那么,在性能测试过程中…

LabVIEWCompactRIO 开发指南13 网络发布的共享变量

LabVIEWCompactRIO 开发指南13 网络发布的共享变量 跨网络共享标签的一种方法是网络共享变量。术语网络变量是指网络上可以在程序、应用程序、远程计算机和硬件之间进行通信的软件项。网络共享变量非常适合1:N或N:1设置,因为它们有一个内置的连接管理器来管理传入…

《Netty》从零开始学netty源码(五十六)之RecvByteBufAllocator

RecvByteBufAllocator 在创建channel的过程中会创建一个相应的配置类,该类存储了一些关于channel的属性,包括分配内存的ByteBufAllocator和预估大小的RecvByteBufAllocator,通过前面的学习我们知道ByteBufAllocator分配内存的时候最终会委托…

Consensus洞察|2023,Web3“脱虚向实”元年

前言 2023年对于Web3来说,是一个被推到主流社会前台的关键时期。 出品|欧科云链研究院 作者|毕良寰 Web3作为新兴科技,其发展路径在近几年尤为艰难,充斥着“丑闻”的2022年,以Luna/UST的崩溃为起点开启了…

c++类与对象(二)——赋值运算符重载与取地址操作符重载

文章目录 一.运算符重载1.运算符重载的概念2.实现Date类&#xff08;1&#xff09;> < > < ! 重载&#xff08;2&#xff09; - - 重载&#xff08;3&#xff09;前置与后置重载&#xff08;4&#xff09;日期-日期的实现&#xff08;5&#xff09;<< 与 &g…

代码随想录之额外题目

数组 1207 独一无二的出现次数 看数组的大小和长度都没有很大&#xff0c;所以可以直接用数组来做哈希表&#xff0c;用一个数组来记录出现次数&#xff0c;再用一个数组来标记出现次数的值是否出现过。就是O(n) class Solution {public boolean uniqueOccurrences(int[] arr…

Spring IOC:IOC在Spring底层中如何实现?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 spring版本&#xff1a;5.3.1 文章目录 Spring系列专栏文章目录一. 什么是IOC?二. IOC在spring中的实现2.1…

java 基础

第一章 计算机认识 1 概述 计算机包括**硬件&#xff08;hardware&#xff09;和软件&#xff08;software&#xff09;**两部分。硬件包括计算机可以看得见的物理部分&#xff0c;而软件提供看不见的指令。 2 计算机硬件介绍 3 计算机硬件——中央处理器 中央处理器&#xff0…

PyQGIS 加载单个shp文件到图层面板

打开QGIS Desktop 3.22.16&#xff0c;点击菜单栏 【设置】——>【Python控制台】 在Python控制台中点击【显示编辑器】按钮&#xff0c;打开Python编辑器 点击第一个按钮 【打开脚本文件】&#xff0c;选择加载图层列表到图层面板源码 # 加载图层列表到图层面板中 from qgi…

DataGridXL中快速搜索单元格和底部全屏模式区域隐藏

DataGridXL表格是在2020年发布&#xff0c;DataGridXL在设计时就考虑到了性能。提供最快、最简单、最可靠的数据网格。DataGridXL支持所有常用所有的浏览器&#xff0c;为 Web 应用程序提供类似于 Microsoft Excel 的体验&#xff0c;它支持前端框架有Vue、React、Angular等。 …

Acid burn(★★)

运行程序 先是弹出一个neg 然后是真正的程序界面 有一个输入Serial和Name的判断 还有一个只输入Serial的判断 查壳 没有壳&#xff0c;是Delphi程序 先除去一个Neg 找到Neg弹出的程序&#xff0c;在程序头下个断&#xff0c;运行程序&#xff0c;此时栈顶是调用此功能的…

希亦、米家、必胜家用洗地机测评,洗地机十年老用户告诉你哪款好用

如今&#xff0c;各种清洁设备早已进入我们的生活。其中&#xff0c;各种扫地机和洗地机更是出现在各大商场、酒店、餐饮、医院等领域。 洗地机是一种集洗地、吸尘于一体的清洗设备&#xff0c;它适合清扫如粉尘、烟头、纸屑、厨余、毛发等垃圾。它的工作效率高&#xff0c;可…