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

目录

传输层概述和功能

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♪(・ω・)ノ

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 17:38:05       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 17:38:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 17:38:05       45 阅读
  4. Python语言-面向对象

    2024-07-21 17:38:05       55 阅读

热门阅读

  1. https和http有哪些区别?

    2024-07-21 17:38:05       18 阅读
  2. stable diffusion Sampler 的选择

    2024-07-21 17:38:05       18 阅读
  3. 读书记 | 《李光耀观天下》

    2024-07-21 17:38:05       16 阅读
  4. resultMap

    2024-07-21 17:38:05       16 阅读
  5. Python编程防止计算机休眠,保持唤醒状态

    2024-07-21 17:38:05       14 阅读
  6. 力扣题解(盈利计划)

    2024-07-21 17:38:05       18 阅读
  7. Mysql在linux安装报错

    2024-07-21 17:38:05       17 阅读
  8. 大型网站核心架构要素

    2024-07-21 17:38:05       15 阅读
  9. 看过来!看过来!python九大数据类型大整合!

    2024-07-21 17:38:05       15 阅读
  10. centos软件安装

    2024-07-21 17:38:05       20 阅读