计算机网络---传输层

文章目录

  • [1. 传输层提供的服务](#1. 传输层提供的服务)
    • [1.1 要点概述](#1.1 要点概述)
    • [1.2 服务介绍](#1.2 服务介绍)
  • [2. UDP](#2. UDP)
    • [2.1 UDP数据报](#2.1 UDP数据报)
    • [2.2 UDP校验](#2.2 UDP校验)
  • [3. TCP](#3. TCP)
    • [3.1 TCP报文段](#3.1 TCP报文段)
    • [3.2 TCP连接管理](#3.2 TCP连接管理)
    • [3.3 可靠传输 & 流量控制](#3.3 可靠传输 & 流量控制)
    • [3.4 拥塞控制](#3.4 拥塞控制)
      • [3.4.1 慢开始 & 拥塞避免](#3.4.1 慢开始 & 拥塞避免)
      • [3.4.2 快重传 & 快恢复](#3.4.2 快重传 & 快恢复)

1. 传输层提供的服务

1.1 要点概述


强调:

  • 复用(从上到下):在发送数据的时候,同一台主机上的多个进程可以使用同一个传输层协议
  • 分用(从下到上):在接收数据的时候,传输层可以把数据正确交付到目的进程

1.2 服务介绍


  • 网络层实现了"主机到主机"的通信。网络层在IP数据报的首部,指明源IP地址、目的IP地址
  • 传输层实现了"端到端"(进程到进程)的通信。传输层在TCP(或UDP)报文段的首部,指明源端口、目的端口
  • 开发中只限制熟知端口号不被使用

2. UDP

2.1 UDP数据报

  • UDP首部很小,只占8B
  • UDP每次传输一个完整的报文,不支持报文自动拆分、重装
  • UDP是无连接的、不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制
  • UDP支持一对一(封装成单播IP数据报)、一对多传输(封装成广播/多播IP数据报)

简单对比TCP:

  • TCP首部更大,占20~60B
  • TCP支持报文自动拆分、重装,因此可以传输长报文
  • TCP是有连接的、可靠的、支持拥塞控制
  • TCP仅支持一对一传输(因为通信双方的传输层必须先建立连接)
  • UDP首部长度固定为8B,数据是指携带的数据部分(也可以没有)
  • UDP必须携带一个完整的报文,不支持报文的拆分和重组
  • UDP校验和部分是校验整个UDP数据报(包含首部和数据部分)
  • UDP没有明确指明首部大小的字段,但是却可以通过其他方式间接得出

对比IP数据报的格式:

  • IP数据报首部部分最短为20B,最大为60B(可变部分0~40B)
  • IP数据报首部长度字段只指首部长度的大小
  • IP数据报首部校验和只校验首部


小结:

2.2 UDP校验



小结:

3. TCP

3.1 TCP报文段


强调:

  • TCP并不强制要求每个TCP报文段都满载数据,只要不超过MSS就行

具体介绍:

强调:

  • 序号 --- --- 序号字段的值指的是本报文段所发送的数据的第一个字节的序号(该序号表示的字节还没被接收)。 如:一报文段序号字段为301,而携带数据为100B,则本报文段数据的最后一个序号为400,那么下一个报文段的数据序号应从401开始,表示我现在发送的是从401开始的数据
  • 确认号 --- --- 是期望收到对方下一个报文段的第一个数据字节的序号。 若确认号为N,则表明到序号N-1为止的所有数据都已正确收到
  • 序号不一定从0开始
  • 只有ACK=1时,确认号才有效
  • 只有握手①的ACK=0,其他都是ACK=1



  • 数据偏移 --- --- 反映的是首部长度大小。 偏移的含义是指:数据起始序号 - 报文起始序号(末 - 初)
  • 可以类比快递,URG=1是卖方加急发送快递,快把这个快递发给驿站,PSH=1是驿站收到快递后,加急送到买方手中,然后买方马上确认快递收到(发送确认报文段)
  • 紧急指针要搭配URG使用,只有URG=1,紧急指针才有效,表示的含义是本报文段中紧急数据共有多少字节。延伸:数据从第一个字节到紧急指针所指字节就是紧急数据,如下图



注意:(常考小题)

  • 只有握手①、握手②的SYN=1,其他所有TCP报文段都是SYN=0
  • 只有挥手①、挥手③的FIN=1,其他所有TCP报文段都是FIN=0


强调:

  • 窗口的单位是字节




强调:

  • 握手①、握手②中协商MSS
  • MSS的值是指一个TCP报文段最多携带多少数据 (首部不算在内)


3.2 TCP连接管理

很重要的一个图:




强调:

  • TCP全程中,只有握手①、握手②的SYN=1
  • TCP全程中,只有握手①的ACK=0,其他均为ACK=1
  • 握手①、握手②不能携带数据,但必须消耗一个序号,正如上图标注所示
  • 握手③可以选择携带数据与否,携带则需消耗序号,不携带则不要






强调:

  • 只有挥手①、挥手③的FIN=1
  • 挥手①、挥手②、挥手③均可携带数据,但携带数据要消耗对应的序号
  • 挥手①、挥手③不携带数据也得消耗一个序号,也就是说挥手①、挥手③必定会消耗一个序号
  • 挥手④不可以携带数据
  • 收到挥手③进入时间等待期,是为了防止挥手④在传输过程中丢失,如果丢失,则一定会在2MSL时间内再次收到挥手③,此时计时器需重置

小结:

3.3 可靠传输 & 流量控制





  • (1)经过三次握手建立连接
  • (2)发送方发送数据,接收方返回确认号等信息
  • (3)发送方在发送缓冲区中移出已经确认收到的数据

注: 已经收到确认的信息就应及时移出发送缓冲区

  • (1)发送方连续发出两个报文段,并被服务器收到后,经累计确认,只返回一个确认信息
  • (2)再收到新数据,接收区满了,清空后,然后返回新接收窗口等确认信息

  • (1)捎带确认
  • (2)客户也可以捎带确认
  • (3)不一定要缓冲区满了才交付数据

  • (1)发送方发送数据中出错
  • (2)发送方超时重传

  • (1)服务器ACK丢失
  • (2)发送方计时器超时,进行重发
  • (1)引入快重传,假设623缺失
  • (2)接收方连续收到3个冗余ACK后,进行重传


小结:

注意: 发送窗口"框住"的是发送缓冲区中,已发送但尚未收到确认的数据,以及可以发送但尚未发送的数据

3.4 拥塞控制

3.4.1 慢开始 & 拥塞避免



强调:

  • 流量控制:控制端到端的数据发送量,是**"局部的"**
  • 拥塞控制:控制整个网络中每台主机的数据发送量,降低路由器负载,是**"全局的"**


强调:

  • 慢开始:每收到一个ACK,就让cwnd+1
  • 拥塞避免:在一个RTT内,只能让cwnd+1




3.4.2 快重传 & 快恢复


强调:

  • 快重传 --- --- 收到连续三个冗余ACK,就立即重传
  • 快恢复 --- --- 发生快重传,将阈值、cwnd设为当前cwnd的一半,然后执行"拥塞避免"

至此,第五章就结束了,内容不是很多,重点就是TCP,理解后记忆的遗忘反倒成了难点。要弄清楚三次握手和四次挥手时TCP首部字段(如序号,ACK,确认号等)的变化,以及每次握手、挥手后接收方和发送方各会进入什么状态,掌握如何进行流量控制、可靠传输、拥塞避免,区分流量控制与拥塞避免的不同之处,这些很容易考小题。

参考:《王道计算机考研 计算机网络》

https://www.bilibili.com/video/BV19E411D78Q/?share_source=copy_web

相关推荐
三毛20042 小时前
玳瑁的嵌入式日记---0928(ARM--UART)
网络·arm开发
比特森林探险记2 小时前
Golang GMP 模型深度解析
网络·算法·golang
_清浅2 小时前
计算机网络【第二章-物理层】
服务器·网络·计算机网络
init_23612 小时前
IS-IS 与 OSPF 路由汇总机制:边界、应用与核心差异深度分析报告
网络·智能路由器·php
1688red2 小时前
实现VLAN间通信
网络
chem41112 小时前
协议 NTP UDP 获取实时网络时间
网络·网络协议·udp
歪歪1003 小时前
如何在项目中选择使用HTTP还是WebSocket?
网络·websocket·网络协议·计算机网络·http·网络安全
甄心爱学习3 小时前
计算机网络4
网络
^Moon^3 小时前
websocket网络通信协议
网络·websocket·网络协议