天天看点

阿龙的学习笔记---计算机网络知识点总结---五、传输层

1. 传输层概述

  • 网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。
  • 传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实 体之间有一条端到端的逻辑通信信道。
    阿龙的学习笔记---计算机网络知识点总结---五、传输层
  • 传输层主要两种协议:UDP和TCP。

2. 用户数据报协议 UDP(User Datagram Protocol)

  • UDP是无连接的,尽最大可能交付,没有拥塞控制,面 向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 不分段,无会话,不可靠,无流量控制。
  • UDP只添加了首部,首部格式:
    阿龙的学习笔记---计算机网络知识点总结---五、传输层
    • 蓝色部分是UDP数据报的首部,一共只有8个字节。源端口、目标端口、长度为整个UDP包的长度,检验和要用到伪首部。
    • 伪首部是用来计算UDP头部检验和用的,是从IP数据报首部中提取了一部分信息,一共12字节。0是固定的全0的一个字节,17是UDP协议号。检验和将伪首部+首部+数据一起计算出检验和。
  • 用处:
    • DNS域名解析;
    • 例如QQ视频、QQ发消息:只要求实时性,而不要求可靠传输。
    • 数据包广播、多播。

3. 传输控制协议 TCP(Transmission Control Protocol)

  • TCP是面向连接的,提供可靠交付,有流量控制, 拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大 小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。要点:可靠传输;流量控制;避免拥塞。
  • TCP的可靠传输:

    • 最根本的原理就是自动重传请求,每个数据包都需要对方的确认,确认后再发送之后的。
    • 为了提升效率,采用发送滑动窗口,窗口中的都发出去,接收到几个确认就向前滑动。
    • 为了提升效率,还可以累计确认的方式。
  • TCP的首部:

    阿龙的学习笔记---计算机网络知识点总结---五、传输层
    • 20字节固定首部+可变首部。一般都是固定20字节。
    • 目标端口和源端口:占4个字节。
    • 序号:占四个字节,表示本次发送的数据段的第一个字节是整个文件的第几个字节。
    • 确认号:接收方确认时发送,表示下一个要接收的序号(比如接收到了4,则确认后填写5,发送给发送方)。
    • 数据偏移 :数据偏移 * 8 表示首部的长度,即数据在TCP整个段的偏移。
    • URG(Urgent)、PSH(Push): 表示此数据包是否排队。
    • ACK确认(Acknowledgment): 确认号,除了第一次申请建立连接时是0,建立连接过后,这个位都要置1,如果是0则是无效的。
    • SYN同步:在建立连接时表示,申请建立时SYN=1, ACK= 0,确认申请时SYN=1,ACK=1。
    • FIN结束(Final): 释放连接时,表示我这里发送完成了,可以释放。在第一次和第三次握手中置1。
    • 窗口:表示自己的接收窗口有多大,让对方的发送窗口也设置一样大。
  • TCP建立连接的三次握手

    • TCP采用客户-服务器方式,主动发起的进程是客户端,被动等待连接的进程是服务器。
    • 阿龙的学习笔记---计算机网络知识点总结---五、传输层
    • 首先,服务端处于监听状态,等待客户端的连接。
    • 第一次:客户端发送一个数据包,SYN置位1,ACK位置0,序号设置x;
    • 第二次:服务器接收到连接请求,返回一个数据包,其中SYN置1,ACK置1,确认号ack设为x+1,序号设置为y;
    • 第三次:客户端再发送一个数据包,SYN置0了,ACK置1,序号为x+1,确认号y+1。
    • ※ 为什么要有三次:
      • 第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开多个连接。
      • 假如客户端第一次发送的有网络延迟,他又重传了一次。服务器端接收到了两次请求,那么则会打开两个连接。
      • 如果需要第三次握手,那么服务器端会等待第三次握手,才算成功。
  • TCP断开连接的四次挥手

    阿龙的学习笔记---计算机网络知识点总结---五、传输层
    • 依然是客户端请求断开。
    • 这里ACK一直是1不再赘述,除了第一次客户断请求建立时,ACK是0,在建立了连接之后都是1。序号、确认号也还是原先的规则,也不再赘述。
    • 第一次挥手:客户端请求关闭。FIN置1;
    • 第二次挥手:服务端收到请求,应答一下。ACK为1。但是还没有要关闭,处于半关闭状态,只能服务器发送,把剩下的数据发完,到了CLOSE-WAIT状态下。
    • 第三次挥手:服务器发送完成后,也说我可以关闭了。所以FIN置1,ACK还是1。
    • 第四次挥手:客户端回复说收到了,关闭吧。ACK 是 1。
    • ※四次挥手的原因
      • 客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态 是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
    • ※TIME_WAIT状态的原因

      客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个计时器设置的时间 2MSL。这么做有两个理由:

      • 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放 请求报文,A 等待一段时间就是为了处理这种情况的发生。
      • 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接 不会出现旧的连接请求报文。
  • TCP的滑动窗口

    • 滑动窗口是来存放字节流,接收、发送都有一个。代表允许发送和接收的数量。
    • 发送方窗口内包括:已发送但还没确认 + 还没发送。接到确认就往前移动。
    • 接收方窗口内包括: 已接收但未按序 + 还未接收。 确认号是接收窗口的第一个。按序接收到了之后则往前移动。
  • TCP的流量控制

    • 通过控制滑动窗口的大小来控制流量,目的是控制发送方的速率,保证接收方来得及接收。所以由接收方定,在首部的窗口那个位置。
  • TCP的拥塞控制

    • 如果网络拥塞,那么分组就丢失,然后重传又加重网络拥塞。所以也要控制发送方的发送速率。
    • TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
    • 拥塞控制需要维护一个拥塞窗口cwnd,拥塞窗口只是一个状态变量,假设以报文段为单位,表示能发送多少个报文段。而真正决定发送速率的还是发送滑动窗口。
      阿龙的学习笔记---计算机网络知识点总结---五、传输层
    • 上图解释了这四个机制:
      • 慢开始:在刚开始传输时,拥塞窗口的值指数增加,由1,2,4,8这样变化,直到慢开始门限。
      • 拥塞避免:到达慢开始门限时,开始拥塞避免阶段,拥塞窗口的值线性增加。
      • 如果出现了超时,那么将慢开始门限设置为一半,重新从慢开始阶段继续。
      • 快重传:当我在一直发送时,收到连续三个一样的确认号,那么基本上就是下一个报文段丢失。那么快速重传下一个报文段。
      • 快恢复: 在快重传的情况下,网络拥塞应该不至于,所以将慢开始门限缩小一半,然后将拥塞窗口值设置为缩小后的慢开始门限。

继续阅读