计算机网络知识点总结——第五章传输层

2023-11-05

一、传输层概述

只有主机之间才会有的层次。
传输层的功能

  1. 传输层提供进程和进程之间的逻辑通信。
  2. 分用和复用
    复用:发送方不同的应用进程都可以使用同一个传输层协议传输数据。
    分用:接收方的传输层在剥去报文的首部之后能够将数据正确的送到进程。
  3. 传输层对收到的报文进行差错检测
  4. 传输层的两种协议(TCP,UDP)
    ①面向连接的传输控制协议TCP
    可靠,面向连接,时延大,适用于大文件
    ②无连接的用户数据报协议UDP
    不可靠,无连接,时延小,适用于小文件

传输层的寻址与端口

  • 端口是传输层的SAP,标识主机中的应用进程。
  • 端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的。
  • 端口号长度为16bit,能表示65536个不同的端口号。
    在这里插入图片描述

⭐套接字Socket=(主机IP地址,端口号)⭐

二、UDP协议

UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检错功能。
UDP的主要特点:

  1. UDP是无连接的,减少开销和发送数据之前的时延。
  2. UDP使用最大努力交付,即不保证可靠交付。
  3. UDP是面向报文的,适用一次性传输少量数据的网络应用。
  4. 应用层给UDP多长的报文,UDP就照样发送,即一次发一个完整报文。
  5. UDP无拥塞控制,适合很多实时应用。
  6. UDP首部开销小,8B
    在这里插入图片描述
    UDP首部格式
    在这里插入图片描述
    UDP长度指的是整个UDP用户数据报的长度,即首部字段+数据字段。
    UDP检验和即用于检测整个 UDP数据报是否有错,有错就丢弃。
    UDP校验
    在这里插入图片描述
    伪首部只有在(接收端或发送端)计算检验和时才出现,不向下传送也不向上递交。
    在这里插入图片描述

三、TCP协议

TCP协议特点

  1. TCP是面向连接(虚连接)的传输协议。
  2. 每条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  3. TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。
  4. TCP提供全双工通信
  5. TCP面向字节流——TCP把应用程序交过来的数据堪称仅仅是一连串的无结构字节流

⭐TCP报文段首部格式(重点)⭐

在这里插入图片描述
固定首部:20B
序号:在一个TCP连接中传送的字节流的每一个字节都按序号编号,本字段表示本报文段所发送数据的第一个字节的序号
确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认好为N,则证明到序号N-1为止的所有数据都已正确收到。
在这里插入图片描述
数据偏移(首部长度):TCP报文段的数据其实距离TCP报文段的起始处有多远,以4B为单位,即一个数值是4B。
6个控制位

  1. ⭐紧急位URG⭐:URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合坚急指针字段使用。
  2. ⭐确认位ACK⭐:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1。
  3. 推送位PSH:PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。
  4. 复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。
  5. ⭐同步位SYN⭐:SYN=1时,表明是一个连接请求/连接接受报文
  6. ⭐终止位FIN⭐:FIN=1时,标明此报文段发送方数据已发完,要求释放连接。

窗口:指的时发送本报文段的一方的接收窗口,即现在允许对方发送的数据量
校验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6
紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数。

TCP连接管理

TCP连接传输的三个阶段在这里插入图片描述
TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。

⭐TCP的连接建立(三次握手)⭐
在这里插入图片描述
步骤如下:

  1. 客户端发送连接请求报文段,无应用层数据。
    SYN(同步位)=1,seq(序号位)=x(随机)
  2. 服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
    SYN=1,ACK(确认位)=1,seq=y(随机),ack(确认序号)=x+1
  3. 客户端为该TCP连接分配缓存和变量,并向服务器端返回确认报文段,可以携带数据。
    SYN=0,ACK=1,seq=x+1,ack=y+1

SYN洪范攻击
SYN洪泛攻击发生在osI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPu和内存,最后服务器可能死机,就无法为正常用户提供服务了。
** 解决办法,设置SYNcookie **

TCP的连接释放
参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结束后,主机中的“资源”(缓存和变量)将被释放。
在这里插入图片描述
步骤如下:

  1. 客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。
    FIN(终止位)=1,seq(序号位)=u
  2. 服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了――半关闭状态
    ACK(确认位)=1,seq=v,ack(确认序号)=u+1
  3. 服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。
    FIN=1,ACK=1,seq=w,ack=u+1
  4. 客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命,避免确认报文丢失导致的服务器B一直保持连接)后,连接彻底关闭。
    ACK=1,seq=u+1,ack=w+1

TCP可靠传输

可靠:保证接收方进程从缓存区读出的字节流与发送方发送出的字节流时完全一样的。

TCP实现可靠传输的机制
在这里插入图片描述
1、校验

  • 与UDP校验一样,增加伪首部。

2、序号

  • TCP传输数据时,以字节为单位进行编号。一个字节占一个序号。序号字段指的是一个报文段第一个字节的序号。

3、确认

  • TCP发送报文段时,发送方缓存中一直保留,直至接收方接收到报文段并返回一个确认字段后,发送方才会将发送方刚才发送的报文段从缓存中删除。

4、重传

  • 确认重传不分家,TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。超时重传
  • 重传时间:TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)。
  • 冗余ACK(冗余确认)
    在这里插入图片描述

⭐TCP流量控制(重点)⭐

流量控制:让发送方慢点,要让接收方来得及接收。
TCP利用滑动窗口机制实现流量控制。

在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。即发送窗口大小可以动态变化。
在这里插入图片描述
当接收方发送零窗口报文发送后,重新发送rwnd>0的报文丢失会造成死锁,解决办法如下:

  1. TCP为每一个连接设有一个持续计时器,只要TCP连接的乙方收到对方的零窗口同志,就启动持续计时器。
  2. 若持续计时器,设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值
  3. 若窗口仍是0,那么发送方就重新设置持续计时器。

⭐TCP拥塞控制(重点)⭐

⭐出现拥塞的条件:对资源需求的综合>可用资源。⭐
网络中许多资源同时呈现供应不足,会导致网络性能变坏,造成网络吞吐量将随输入负荷增大而下降。
拥塞控制:防止过多的数据注入到网络中。

拥塞控制&流量控制

  • 拥塞控制是多台主机,全局性
  • 流量控制是点到点的问题。
    在这里插入图片描述

拥塞控制四种算法

假定:

  1. 数据单方向传送,而另一个方向只传送确认。
  2. 接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度。
    ⭐发送窗口=Min(接收窗口rwnd,拥塞窗口cwnd)⭐
    接收窗口
    接收方根据接受缓存设置的值,并告知给发送方,反映接收方容量。
    拥塞窗口
    发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。

慢开始和拥塞避免
在这里插入图片描述

快重传和快恢复
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络知识点总结——第五章传输层 的相关文章

  • 在不使用环回网络的情况下将数据包转发到同一主机中的服务

    我有这个 libnetfilter queue 应用程序 它根据某些 iptables 规则从内核接收数据包 在直接讨论我的问题之前 我提供了一个示例可行代码和其他工具来设置测试环境 以便我们的问题定义和可能的解决方案可以更加准确和稳健 以
  • 播放 UDP 数据包中收到的原始 PCM 音频

    远程设备正在 UDP 数据包中发送实时原始 PCM 音频 不包含标头 我需要在 java 中实现一个程序来接收这些数据包并在 PC 上实时播放它们 据我所知 原始 PCM 的属性是 16 位 单声道 采样率 24KHz 因此我尝试向该原始
  • 使用.Net Core创建UDP套接字

    如何创建一个 UDP 套接字以非阻塞方式接收本地端点中的数据 我不知道数据来自的远程端口 我在 Linux 中使用 NET Core 我认为我可以使用 ReceiveAsync 但它似乎无法以这种方式工作 我这样解决了这个问题 static
  • UDP 数据包在交付时是否保证是完整的、具有实际意义的?

    众所周知 UDP 用户数据报协议 并不安全 因为用它发送的数据包的顺序可能不按顺序传送 甚至根本不按顺序传送 但是 如果发送了 UDP 数据包 该数据包中的信息在实际意义上 99 99 及以上 是否保证正确 在实际意义上 99 99 及以上
  • Android 无法通过互联网从 PC 服务器接收 UDP 数据

    我目前正在探索用Java 进行UDP 数据包传输 以在Android 上创建多人游戏 我使用通常的 127 0 0 1 成功地在 Nexus 4 内交换数据包 并且还成功地在本地网络中的 PC 服务器和 Android 客户端之间交换数据包
  • Android udp 多播与以太网

    大家好 我正在开发一个使用 udp 多播的项目 我有一台服务器通过以太网电缆发送多播 udp 数据包 我花了几周的时间阅读有关 android 上多播的所有帖子 但我仍然无法在我的 Asus Transformer Tablet 4 1 上
  • 什么是 STUN?它是否需要端口转发服务器?

    我对没有基础服务器的 p2p 通信进行了一些研究 并通过了 STUN 据我所知 STUN 是 NAT 打孔 的一种方式 不需要对等方进行端口转发即可连接 这是正确的吗 打孔到底是什么意思 这一切看起来都很脆弱 因为如果不需要端口转发 它就会
  • Spark Scala UDP 在侦听端口上接收

    中提到的例子http spark apache org docs latest streaming programming guide html http spark apache org docs latest streaming pro
  • 如何在多个程序中接收相同的udp流?

    我有一个封闭的第三方系统 它发送单播 UDP 流 MPEG TS 我想在同一台计算机上的两个不同程序中访问该流 我无法更改源上的任何内容 甚至无法更改 IP 或端口 除了编写自己的小程序来捕获流然后创建新流并重新发送这两个流之外 还有其他选
  • 错误的 UDP 校验和没有效果:为什么?

    我正在尝试测试 UDP 程序 如果它接收到 UDP 校验和错误的数据 会发生什么情况 奇怪的是 它似乎没有任何效果 并且有效负载被成功接收 至少在 OS X 上是通过环回接口成功接收的 下面是一个示例 其中使用以下方式发送数据SOCK RA
  • 更改Windows下的默认套接字缓冲区大小[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法更改的应用程序正在丢弃一些传入的 UDP 数据包 我怀疑接收缓冲区溢出 是否有注册表设置可以使默认缓冲区大于 8KB From th
  • 如何在QT中发送和接收UDP数据包

    我正在 QT 中编写一个小型应用程序 它通过本地网络发送广播 UDP 数据包 并等待来自网络上的一个或多个设备的 UDP 响应数据包 创建套接字并发送广播数据包 udpSocketSend new QUdpSocket this udpSo
  • 我刚刚在哪个适配器上收到此 UDP 数据包?

    我正在尝试用 C 编写一个 BOOTP 服务器 我正在接收并解析来自客户端的 BOOTP 数据包 我需要回复我的服务器 IP 地址 问题是 计算机可以有多个网络适配器 客户端还没有 IP 地址 有什么方法可以查出 UDP 数据包是在哪个适配
  • 为什么我们可以将 sockaddr 转换为 sockaddr_in

    我明白为什么强制转换很有用sockaddr to sockaddr in 但我不明白这怎么可能 据我所知 它们的大小相同sockaddr in添加了sin zero使其大小相同 我想知道编译器如何知道从哪里获取信息sockaddr in如果
  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • 接收UDP数据包

    假设我的程序通过网络 UDP 发送 1000 字节 它是否保证接收方将 一批 接收 1000 个字节 或者他可能需要执行多次 读取 直到收到完整的消息 如果后者为真 我如何确保同一消息的数据包顺序不会 混淆 按顺序 或者协议可能保证这一点
  • Rails 是否支持侦听 UDP 套接字的简洁方式?

    在 Rails 中 集成更新模型某些元素的 UDP 侦听过程的最佳方式是什么 特别是向其中一个表添加行 简单的答案似乎是在同一进程中使用 UDP 套接字对象启动一个线程 但不清楚我应该在哪里执行适合 Rails 方式的操作 有没有一种巧妙的
  • 在 PowerShell 中通过 UDP 发送和接收数据

    我正在尝试编写一个脚本来使用 PowerShell 进行测试和应用 测试应包括通过 UDP 向远程服务器发送字符串 然后读取该服务器的响应并对结果执行某些操作 我需要的唯一帮助是脚本的中间两个步骤 发送字符串 然后 接收响应 在端口 UDP
  • P2P网络游戏/应用程序:类似“战网”匹配服务器的不错选择

    我正在制作一个网络游戏 1v1 游戏中是 p2p 不需要游戏服务器 然而 为了让玩家能够 找到彼此 而不需要在另一种媒介中协调并输入IP地址 类似于网络游戏的现代时代 我需要有一个协调 匹配服务器 我无法使用常规网络托管 因为 客户端将使用
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock

随机推荐

  • 网页复制文字时弹出(唯有注册登录才能复制)的窗口的解决方法

    复制网页内容的时候总是弹出让你登录注册页面 如何解决 下面教你一个方法 此方法仅在能选中内容文字的情况下有效 第一步 按F12 在审查元素中选择Elements 右侧选择Event Listeners 如图 第二步 点开下面的copy的三角
  • Console口登录的三种认证方式介绍及演示

    本文实验采用的交换机是H3C模拟器 下载地址如下 http forum h3c com forum php mod viewthread tid 109740 highlight H3C E6 A8 A1 E6 8B 9F E5 99 A8
  • 自动化python的简单使用

    文章目录 环境配置 定位 1 Link text定位超链接 2 混合元素定位 3 Xpath定位 通常 4 css定位 事例 操作 1 实现输入框自动输入 2 清空输入框 3 上传文件 4 自动化执行javaScript方法 5 浏览器窗口
  • 永久开启或关闭某些iptables开机自启规则

    昨天早上突然发现我的xshell突然不能连接我的某一台虚拟机的linux了 于是就开启了我漫漫的找问题之路 第一反应是不是vmware的相关服务被关闭了 因为之前出现过vm死活连不上网的情况 果断去计算机服务里面看 果然没有开启 全部全部开
  • Access to XMLHttpRequest at xxxx from origin ‘null‘ has been blocked by CORS policy:

    使用前后端分离的方式创建web项目的时候出现问题 这是因为 ajax 请求的对应的域在本地的一个文件路径 比如在D盘的某个文件夹 这里存放的都是前端文件 但是对应的服务器是 localhost 的一个域名 虽然请求可以到达服务端 服务端也可
  • Win7下vs2013打开鼠标不能用,鼠标失灵

    以下是有效的解决方法 昨天重装了office2007出现这样的问题 如题 只要一进vs 鼠标变失灵 以下是网友提供的方法 Win7下vs2013打开鼠标不能用 解决办法 1 先打开vs2013 这时鼠标就用不了了 2 此时用 Ctrl Al
  • Android 退出整个应用程序解决方案

    1 通过广播 相信有过项目经验的同学都遇到过这样的问题 就是设计 退出 功能时可能会遇到有些界面不能关闭的问题 当然如果你的项目所有的界面都在打开另一个界面时被关闭就不存在这个问题了 但大多数情况下这样是很不合理的 因为每次要查看这个界面都
  • 利用matlab实现卷积实验报告,实验五 使用matlab实现卷积的运算

    实验五 使用matlab实现卷积的运算 一 实验目的 1 2 二 实验内容 学习MATLAB语言的编程方法及熟悉MATLAB指令 深刻理解卷积运算 利用离散卷积实现连续卷积运算 1 完成f1 t 与f2 t 两函数的卷积运算 其中 f1 t
  • 购买服务器及宝塔部署环境指南

    服务器购买宝塔部署环境指南 为什么程序员都需要一个自己的服务器 作为一个程序员 必须要发布自己的网站和项目 联系linux 自己的远程长裤 远程数据库 远程tomcat 搭建在服务器上 练习 Linux进行任意的环境部署操作 Window下
  • Spring Cloud的断路器模式是什么?如何使用断路器?Spring Cloud的配置管理是怎样实现的?

    1 Spring Cloud的断路器模式是什么 如何使用断路器 Spring Cloud的断路器模式是一种应对微服务架构中潜在故障的解决方案 在微服务架构中 不同的服务相互依赖 当某个服务出现故障或响应缓慢时 可能会导致级联故障 影响整个系
  • ELK技术栈实践(一)

    通常 日志被分散的储存不同的设备上 如果你管理数十上百台服务器 你还在使用依次登录每台机器的传统方法查阅日志 这样是不是感觉很繁琐和效率低下 当务之急我们使用集中化的日志管理 例如 开源的syslog 将所有服务器上的日志收集汇总 集中化管
  • C语言中低位存放,C语言 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时 我们经常会发现一个很奇怪的现象 什么现象呢 例如下面这段代码 int main int i 1 return 0 数据在内存中的存放方式似乎和我们想象的顺序不太一样 在我们的常规认知不一样 在我们的
  • [UPC] 2021秋组队17

    目录 A Quality Adjusted Life Year B Gwen s Gift C Forest for the Trees D H Index E Driving Lanes F Treasure Spotting G Nei
  • 测试第一年

    2018年 无心插柳柳成荫 终于进入了软件测试这一行 经过各种磕磕绊绊 进入了一家不足五十人的小私企 工资待遇和工作环境都不算好甚至可以说是略差 但在合肥这座对应届生极其不友好的城市 能找到一家公司做自己想做的事情已实属不易 作为一名初出茅
  • VS_VS2015或者VS2017出现跳过:1或者Skiped:1

    问题如下 解决办法 把绿色的部分全部勾上即可解决问题
  • 事务回滚,同时记录异常信息

    事务回滚 同时记录异常信息 需求 实现原理 实现 1 依赖HTTP重新发送请求 2 开启新事务 插入异常信息 需求 在发生异常时 回滚对数据库的操作 同时在数据库中插入一条异常信息 实现原理 开启新的事务 进行异常信息的数据库操作 实现 1
  • Linux中重要的目录有哪些?分别有何作用?

    当我们学习Linux知识时 除了要学习各种各样的命令之外 我们还需要了解Linux各个目录的功能 那么Linux中重要的目录有哪些 在Linux系统中 有两个非常重要的目录 bin与sbin 接下来我们详细的介绍一下 Linux重要的目录分
  • [C++]访问者模式

    在访问者模式 Visitor Pattern 中 我们使用了一个访问者类 它改变了元素类的执行算法 通过这种方式 元素的执行算法可以随着访问者改变而改变 这种类型的设计模式属于行为型模式 根据模式 元素对象已接受访问者对象 这样访问者对象就
  • 计算机视觉领域不同的方向:目标识别、目标检测、语义分割等

    计算机视觉任务 图像分类 image classification 图像分类 根据图像的主要内容进行分类 数据集 MNIST CIFAR ImageNet 目标检测 object detection 给定一幅图像 只需要找到一类目标所在的矩
  • 计算机网络知识点总结——第五章传输层

    目录 一 传输层概述 二 UDP协议 三 TCP协议 TCP报文段首部格式 重点 TCP连接管理 TCP可靠传输 TCP流量控制 重点 TCP拥塞控制 重点 拥塞控制四种算法 一 传输层概述 只有主机之间才会有的层次 传输层的功能 传输层提