[计网04] 传输层和应用层 笔记 总结 万字详解

news2024/9/22 9:29:19

目录

传输层概述和功能

URL 和URI

端口号划分

套接字Socket

UDP(User Datagram Protocol)

UDP首部

UDP伪首部

TCP 三报文握手和四报文挥手

TCP(Transmission Control Protocol)

TCP首部报文格式

TCP流量控制

cwnd(Congestion Window)

RTT(Round-Trip Time)

TCP拥塞控制

慢开始和拥塞避免

快重传和快恢复

三个重复确认

超时检测

应用层概述和功能

HTTPS

SSL证书

DNS


传输层概述和功能

传输层主要负责提供端到端的数据传输服务。它使用端口号标识不同的应用程序,为应用层提供数据可靠性、流量控制和错误恢复等功能。常用的传输层协议包括 TCP(传输控制协议)和 UDP(用户数据报协议)。

进程间的逻辑通讯
主机端的层次

网络层:校验数据首部,传输层校验数据内容 也就是差错检测了

URL 和URI

URI: /api/login

URL: https ://domain: port/api/login
https ://domain: port/projectName/api/login

端口号划分

服务端

熟知端口号

  • 范围:0到1023
  • 这些端口号被IANA(互联网数字分配机构)分配给了常见的服务和应用。
  • 由于这些端口与特定的服务紧密相关,它们通常需要管理员权限才能在服务器上进行绑定。
  1. FTP (File Transfer Protocol)

    • 控制(命令)端口:21
    • 数据端口:20(用于主动模式的数据传输)
  2. TELNET (Teletype Network)

    • 端口:23
    • 用于远程登录到计算机系统。
  3. SMTP (Simple Mail Transfer Protocol)

    • 端口:25
    • 用于发送电子邮件。
  4. DNS (Domain Name System)

    • 端口:53
    • 用于将域名解析为IP地址。
  5. TFTP (Trivial File Transfer Protocol)

    • 端口:69
    • 简化版的文件传输协议,不提供FTP的许多高级功能。
  6. HTTP (Hypertext Transfer Protocol)

    • 端口:80
    • 用于在Web浏览器和服务器之间传输网页。
  7. SNMP (Simple Network Management Protocol)

    • 端口:161
    • 用于网络管理的协议,允许网络管理员通过IP网络对设备进行管理和监控。

登记端口号 (Registered Ports):

  • 范围:1024到49151
  • 这些端口不是由IANA分配给特定服务的,但是用于那些不需要熟知端口号的服务。应用程序通常会在这个范围内注册一个端口用于通信。
  • 这些端口通常不需要特殊权限就可以绑定,因此它们是用户级别的服务和应用的理想选择。

客户端

动态端口号或私有端口号 (Dynamic or Private Ports):

  • 范围:49152到65535
  • 这部分端口号通常被客户端用于与服务器的短暂通信。当客户端程序发起到服务器的连接时,会从这个范围内选择一个未使用的端口作为源端口。
  • 这些端口不需要预先注册,也通常不会永久绑定到任何服务。

套接字Socket

在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。
套接字Socket=(主机IP地址,端口号)

UDP(User Datagram Protocol)

1.UDP是无连接的,减少开销和发送数据之前的时延。
2.UDP使用最大努力交付,即不保证可靠交付。
3.UDP是面向报文的,适合一次性传输少量数据的网络应用。
面向报文也就是说他不会对应用层下来的报文进行任何处理 直接加上UDP头部传输给下一层

UDP首部

UDP首部仅包含四个字段,总共8个字节:

  1. 源端口(Source Port):这是发送方的端口号,用于接收方回复数据。如果不需要回复,该字段可设置为零。
  2. 目的端口(Destination Port):这是接收方的端口号,指定了数据包应被送达的目标应用程序。
  3. 长度(Length):这是UDP数据报的长度,包括首部和数据。它的最小值是8字节(仅首部)。
  4. 校验和(Checksum):用于错误检测的校验和,它包括首部和数据。如果发送方不想进行校验,可以将其设置为零。

UDP伪首部

只负责校验数据 不向上递交, 也不向下传输

虽然UDP本身的首部非常简单,但在进行校验和计算时,它会使用一个称为“伪首部”的概念,该伪首部不是UDP数据报的一部分,而是在进行校验和计算时临时添加的。

伪首部包括以下字段:

  1. 源IP地址:发送方的IP地址。
  2. 目的IP地址:接收方的IP地址。
  3. :一个8位字段,填充为0,表示这是一个UDP数据包。
  4. 协议:一个8位字段,表示传输层的协议,对于UDP,该字段的值是17。
  5. UDP长度:这是整个UDP数据报的长度,与UDP首部中的长度字段相同。

伪首部的目的是使校验和能够检测到数据报在网络传输过程中由于IP层的错误而导致的源地址和目的地址的变化。
虽然伪首部不是UDP数据报的一部分,也不会随UDP数据报一起传输,但它在计算校验和时被添加到数据报的前面,以提供额外的错误检测能力。

当接收方收到UDP数据报时,它会使用相同的伪首部进行校验和计算。如果计算结果与数据报中的校验和值不符,接收方就知道在传输过程中发生了错误,并会丢弃该数据报。

TCP 三报文握手和四报文挥手

待续

TCP(Transmission Control Protocol)

TCP首部报文格式

  • 序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号。

  • 确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。

  • 数据偏移(首部长度)):TCP报文段的数据起始处距离TcP报文段的起始处有多远,以4B位单位,即1个数值是4B。
    控制位

  • 紧急位URG: URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。

  • 确认位ACK: ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1。

  • 推送位PSH: PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。

  • 复位RST: RST=1时,表明TcP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。

  • 同步位SYN: SYN=1时,表明是一个连接请求/连接接受报文。

  • 终止位FIN: FIN=1时,表明此报文段发送方数据已发完,要求释放连接。

其他

  • 窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量。

  • 检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6。

  • 紧急指针: URG=1时才有意义,指出本报文段中紧急数据的字节数。

  • 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认.…

TCP流量控制

接收窗口(rwnd)

接收窗口(rwnd)是接收方用来告知发送方它还能接收多少字节的数据,而不会造成缓冲区溢出。在TCP连接建立期间,接收方会在SYN段中声明其接收窗口的大小,之后每个ACK段都会更新这个值。

发送窗口

发送窗口是发送方基于接收到的rwnd值设定的,它限制了在等待确认之前可以发送多少数据。发送窗口随着ACK的接收而向前滑动,这也称为窗口滑动。

滑动窗口实现流量控制

在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。

累计确认机制

TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值。

动态窗口调整(TCP窗口缩放选项)

由于原始的TCP窗口大小字段只有16位,最大值为65535字节,这对于高速网络来说可能太小。因此,RFC 1323定义了一个可选的窗口缩放选项,允许窗口大小向左移动若干位(最多14位),从而使窗口大小最大可达1GB,以适应更高的网络传输速率。

cwnd(Congestion Window)

cwnd,即拥塞窗口(Congestion Window),是TCP协议中用于控制发送方在确认接收方成功接收数据之前可以发送多少数据的一种机制。其主要目的是为了避免网络拥塞。cwnd 的大小取决于网络的拥塞程度,它是TCP拥塞控制算法的一部分。

当一个TCP连接开始时,cwnd 通常会从一个很小的值开始,如TCP初始拥塞窗口(initial congestion window, IW),然后根据网络的响应动态调整。例如,在经典的TCP拥塞控制算法中,如TCP Tahoe和TCP Reno,cwnd 会在没有遇到网络拥塞迹象时逐渐增大(慢启动和拥塞避免阶段),但如果检测到丢包(如通过超时或接收到重复的ACK),cwnd 会减小,这是因为丢包被视为网络拥塞的信号。

RTT(Round-Trip Time)

RTT,即往返时延(Round-Trip Time),是指一个数据包从发送方发送到接收方,然后接收方确认该数据包返回发送方所需要的时间。在TCP连接中,RTT 是一个重要的性能指标,因为它直接影响到数据传输的延迟以及拥塞控制算法的工作效率。

TCP使用RTT来动态计算重传超时时间(RTO,Retransmission Timeout),这个超时时间用于确定何时认为一个数据包因为在网络中丢失而需要重传。由于RTT可以随着网络条件的变化而变化,TCP通常使用一种自适应的方案来估计RTT,例如通过计算一个平滑后的RTT(Smoothed RTT, sRTT)和RTT变化量(RTT Variation, RTTVAR)。

TCP拥塞控制

和流量控制不同的是 这个是全局问题 ,流量控制是端到端的问题

出现拥塞的条件: 对资源需求的总和>可用资源

网络中有许多资源同时呈现供应不足一>网络性能变坏一>网络吞吐量将随输入负荷增大而下降

拥塞控制:
防止过多的数据注入到网络中。全局性

假定
1.数据单方向传送,而另一个方向只传送确认
2.接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度

发送窗口=Min{接收窗口rwnd,拥塞窗口cwnd}
接收窗口接收方根据接受缓存设置的值,并告知给发送方,反映接收方容量。拥塞窗口
发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。

慢开始和拥塞避免

慢开始(Slow Start)

  • 当一个TCP连接刚建立时,它不知道网络的承载能力,因此开始时会将cwnd(拥塞窗口)设置为一个很小的值(如2个MSS,其中MSS是最大段大小)。
  • 每当收到一个ACK(确认),cwnd就增加一个MSS,这样就在每个RTT(往返时间)内将cwnd加倍。
  • 这个指数增长会持续到cwnd达到一个阈值(ssthresh,慢启动阈值)或者出现丢包。

拥塞避免(Congestion Avoidance)

  • cwnd达到慢启动阈值ssthresh后,算法进入拥塞避免阶段。
  • 在此阶段,每个RTTcwnd的增长会变成线性增长,而不是像慢开始阶段那样的指数增长。
  • 如果发生了丢包,TCP会假定这是由于网络拥塞引起的,并减小ssthreshcwnd,然后重新进入慢开始或快速恢复。

快重传和快恢复

快重传(Fast Retransmit)

  • 快重传算法是用来降低因为丢包导致的网络吞吐量下降情况。
  • 当发送方接收到三个重复的ACK,它不会等待重传计时器到期,而是立即重传那个被认为丢失的包。
  • 这个机制能够快速响应丢包事件,不必等待定时器的超时。

快恢复(Fast Recovery)

  • 当执行快重传之后,TCP实施快恢复算法。
  • 而不是像慢开始那样将cwnd减少到1,快恢复会将ssthresh设置为当前cwnd的一半,并将下一个cwnd设置为当前cwnd的一半。
  • 对于后续收到的每一个重复ACK,cwnd增加1个MSS,这反映了网络仍然可以传输数据。
  • 一旦收到新的ACK,确认新的数据被对端接收,TCP退出快恢复阶段,将cwnd设置为ssthresh(即新的拥塞窗口),然后进入拥塞避免阶段。

三个重复确认

当发送方发送一个数据包后,它期望从接收方得到一个确认(ACK)。如果接收方收到一个乱序的数据包,它会重复发送最后接收的按序数据包的确认。如果发送方收到三个重复的ACK,这通常意味着一个数据包已经丢失了,因为接收方期待的数据包没有按顺序到达。

此时

  • ssthresh的变化ssthresh通常会被设置为当前cwnd的一半,但不会小于一个数据包的大小。
  • cwnd的变化:在执行快速重传后,被设置为当前cwnd的一半,不会小于一个数据包的大小。

超时检测

超时检测是TCP用来识别丢包的另一种机制。每当TCP发送一个数据包,它都会启动一个重传计时器,期望在计时器到期之前收到一个确认。如果计时器到期都没有收到确认,TCP会假定该数据包已经丢失,然后重传该数据包。

  • ssthresh的变化ssthresh同样会被设置为当前cwnd的一半,最小是一个数据包的大小。
  • cwnd的变化:超时后,cwnd通常会被重置为1个MSS的大小,这意味着TCP连接会进入慢开始阶段。在慢开始阶段,cwnd成指数增长,直到它再次达到ssthresh的值,之后进入拥塞避免阶段。

应用层概述和功能

提供了用户直接使用的网络应用服务。它包括各种应用协议,如 HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等。应用层协议定义了数据交换的格式和规则,使用户能够访问网络资源和进行通信。

HTTPS

对称加密:加密解密使用同一个密钥
非对称加密: 加密解密不使用同一个密钥

拥有私钥加密的数据只能使用 公钥解密
拥有公钥加密的数据只能使用 私钥解密

公钥: X
X * A X * B

  • 画图 待续

破解方法
假冒客户端AB 获取AB 私钥 这就是中间人攻击

SSL证书

解决中间人攻击

DNS

DNS(Domain Name System)是一种分布式命名系统,它用于将域名(例如"example.com")转换为对应的 IP 地址(例如 192.0.2.1)。它充当了互联网中的“电话簿”,将易于记忆的域名映射到计算机网络中的实际 IP 地址。

DNS 的主要功能有两个方面:

  1. 域名解析:当用户在浏览器中输入域名时,DNS 将负责将域名解析为对应的 IP 地址。这个过程涉及到 DNS 服务器的查询和响应,以确定与域名对应的 IP 地址。客户端设备通常会首先查询本地 DNS 缓存,如果缓存中没有找到对应的记录,则会向上级 DNS 服务器发送查询请求,直至找到对应的 IP 地址。
  2. 域名注册和管理:DNS 还作为一个分层的命名系统,管理域名的注册和分配。域名注册机构负责注册和管理顶级域名(如.com、.org 等),而域名所有者可以在注册机构处注册自己所需的域名,并配置与之相关联的 DNS 服务器。

DNS 的分布式特性使得它能够有效地处理大量的域名解析请求,并提供高可用性和容错性。它采用层次化的命名空间结构,并通过域名服务器进行管理和查询,以提供快速和准确的域名解析服务。


 哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞捏
Thanks♪(・ω・)ノ

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

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

相关文章

如何在 C# ASP.NET MVC 项目中实现 Memcached?

一.介绍 在现代 Web 应用程序中,性能和可扩展性至关重要。提高性能的有效方法之一是使用缓存。Memcached 是一种开源、高性能、分布式内存缓存系统,被广泛使用。本文将引导您在 C# ASP.NET MVC 项目中实现 Memcached。 二.什么是 Memcached?…

SpringBoot面试高频总结01

1. 什么是SpringBoot? SpringBoot是一个基于Spring框架的快速开发框架,它采用约定大于配置,自动装配的方式,可以快速地创建独立的,生产级别的,基于Spring的应用程序。 相比于传统的Spring框架,S…

真实测评,霍尼韦尔、希喂、352宠物空气净化器性能对比

在快节奏的社会生活中,人们越来越注重精神需要,许多年轻人纷纷选择拥抱宠物,作为生活中的温馨伴侣。宠物们治愈心灵的同时也要付出一定“代价”,日常养护,如清理猫毛、管理气味以及保持宠物环境的清洁,都是…

Agent类型解析:AIGC在不同领域的应用与影响

目录 引言 垂直智能体(Vertical Agent) 水平智能体(Horizontal Agent) 混合智能体(Hybrid Agent) 结论 引言 在人工智能(AI)领域,智能体(Agent&#xf…

更加深入Mysql-04-MySQL 多表查询与事务的操作

文章目录 多表查询内连接隐式内连接显示内连接 外连接左外连接右外连接 子查询 事务事务隔离级别 多表查询 有时我们不仅需要一个表的数据,数据可能关联到俩个表或者三个表,这时我们就要进行夺标查询了。 数据准备: 创建一个部门表并且插入…

JavaWeb day01-HTML入门

Web前端 课程安排 HTML、CSS简介 HTML快速入门 实现标题排版 新闻标题样式

Docker核心技术:Docker的基本使用

云原生学习路线导航页(持续更新中) 本文是 Docker核心技术 系列文章:Docker的基本使用,其他文章快捷链接如下: 应用架构演进容器技术要解决哪些问题Docker的基本使用(本文)Docker是如何实现的 3…

Spark调优特殊case- Task倾斜

首先我们观察下上面的stage5, Task MaxTime2.4Min, 但是stage5的整体耗时竟然可以达到55Min, 其实分区1000, 300个executor, 按照最大的TaskTime2.4Min来估算所有Task运行完成时间, 那么时间应该是- 2.4Min * 3 2.4Min 9.6Min 也就是最慢也就跑10分钟就…

【时时三省】(C语言基础)函数和数组

山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 函数 跟数学里面的函数很相似 数组 一组相同类型的元素的集合 比如把5个整形1-5存起来 int arr[10]={1,2,3&#x…

StyleGAN——定制人脸生成思路

定制人脸生成思路 控制生成码 ( Z ) 的分布范围:适合粗略控制生成图像的主要特征(如性别、人种、年龄),方法简单但精度较低。特定维度特征的替换:适用于细致控制图像的特征(如皮肤颜色、发型)&…

贪吃蛇超精讲(C语言)

前言 如果你还是个萌新小白,那么该项目的攻克过程一定会十分艰难。虽然作者已经将文章尽可能写的逻辑清晰,内容详细。但所谓“纸上得来终觉浅”,在讲到陌生结构和函数时,大家请一定自己动手去敲一遍代码,这很重要&…

Opencv学习项目3——人脸识别

之前我们获取了一张图像的人脸信息,现在我们来使用特征点分析来匹配两张lyf照片的相似度 获取两张图片的人脸信息 import cv2 import face_recognition# 加载图像文件 img1 face_recognition.load_image_file(lyf1.png) img2 face_recognition.load_image_file(l…

昇思25天学习打卡营第13天 | 模型训练

深入理解模型训练的关键步骤 在深入学习深度学习模型训练的过程中,我获得了宝贵的经验和理解,尤其是在构建数据集、定义模型、调整超参数以及实际的训练和评估过程中。以下是我对这些关键步骤的一些心得体会。 1. 构建数据集 数据集的构建是模型训练成…

(11)Python引领金融前沿:投资组合优化实战案例

1. 前言 本篇文章为 Python 对金融的投资组合优化的示例。投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程,目的是最大限度地提高回报和降低风险。 投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程,目的是最大限度地提高回报…

第四周:机器学习笔记

第四周学习周报 摘要Abstract机器学习任务攻略1.loss on training data1.1 training data的loss过大怎么办?1.2 training data的loss小,但是testing data loss大怎么办? 2. 如何选择一个中最好的模型?2.1 Cross Validation&#x…

前端调试技巧:动态高亮渲染区域

效果: 前端界面的渲染过程、次数,会通过高亮变化来显示,通过这种效果排除一些BUG 高亮 打开方式 F12进入后点击ESC,进入rendering,选择前三个即可(如果没有rendering,点击橘色部分勾选上&…

docker compose 容器 编排分组

遇到问题:执行docker compose up -d 后docker compose 创建的容器们 在desktop-docker 中都在docker下一堆 搜索想着能不能把这个docker名字改一下,但是都没有找到这样的一个方案; 最后发现,我执行docker compose up -d 命令所在…

昇思25天学习打卡营第26天 | GAN图像生成

学习心得:GAN 图像生成 在最近完成的项目中,我利用生成对抗网络(GAN)进行了图像生成的实践学习。通过这一过程,我不仅加深了对GAN的理解,而且对于深度学习在图像处理领域的应用有了更实际的把握。以下是我…

Android屏幕适配度量单位px、ppi、dpi、dp、sp等

目录 0 前言1 屏幕尺寸2 像素 px3 分辨率4 每英寸像素数ppi5 屏幕密度 dpi6 密度无关像素 dp7 缩放无关像素sp 0 前言 我以iphone13举例,说来挺有意思,我们这做Android开发的只有一位平常用的是Android手机。 可以看到下面有6.1英寸、分辨率、ppi等。接…

MQTT micro-ROS:构建高效的机器人应用

什么是 micro-ROS? 在之前的 MQTT & FreeRTOS:打造你的远程控制实时应用 中,我们介绍了如何在 FreeRTOS 中构建你的 MQTT 应用。 FreeRTOS 主要应用在对实时性要求较高的场景中,但这类 RTOS 专注于提供实时任务调度和同步机…