韩立刚计算机网络——第五章:传输层

目录

    • 1、传输层协议概述
      • (1)传输层两个协议的应用场景
      • (2)传输层和应用层之间的关系
      • (3)传输层的端口
      • (4)windows 防火墙的作用
    • 2、用户数据协议 UDP
      • (1)UDP 的报文格式
    • 3、传输控制 TCP 协议概述
      • (1)TCP报文的首部格式
            • 1、分析控制位字段
            • 2、分析窗口字段
            • 3、抓包分析TCP帧头:
      • (2)TCP 协议的主要特点
            • 1、我们主要关注:
    • 4、要关注的3个问题
      • (1)TCP 如何实现可靠传输
            • 1、停止等待协议
            • 2、以字节为单位的滑动窗口技术
      • (2)拥塞控制
            • 1、慢开始算法原理
            • 2、快重传举例
            • 3、快恢复
      • (3)TCP 的传输连接管理
            • 1、三次握手建立TCP连接
          • 2、TCP 的连接释放

回顾:
网络层:IP协议

  • 选择最佳路径的协议:RIP、OSPF、BGP,这些协议统称为 IP 协议
  • ICMP:控制报文协议,传递网络是什么故障的协议。网络通不通、主机是否可达、路由是否可用等网络本身的消息
  • IGMP:IP组播协议
  • ARP/RARPIP地址和MAC地址之间的转化

传输层:

  • TCP协议:建立连接,可靠传输
  • UDP协议:不建立连接

应用层:http、https、ftp、DNS、SMTP、RDP、SMTR


探讨什么是服务器,什么是客户端?

  • 从本质上来说:都是计算机都包含计算机的 5 大基本部分。(所以任何一台计算可以充当服务器
  • 只是这两个计算机的应用服务不同
  • 客户端:主要是索取服务,相当于一个客户。(浏览器、迅雷、网易云邮箱、音乐等等)
  • 服务器:提供客户对应的服务。(web、邮件、文件下载、远程连接、数据库、等等)
    韩立刚计算机网络——第五章:传输层_第1张图片
    韩立刚计算机网络——第五章:传输层_第2张图片

1、传输层协议概述

(1)传输层两个协议的应用场景

TCP:可靠传输

  • 编号:会将整个数据包进行分段,并且进行编号,然后按照顺序进行传输
  • 传输过程当中,如果有数据丢失,要求重新传输。
  • 流量控制:利用滑动窗口机制,让数据传输端传输的速率不要太快,让数据接收端来得及接收。
  • 建立会话:在传输之前,必须建立一个会话,保证通道是通的。就像打电话一样不能直接拨号就说话。(windows 通过 netstat -n,可以查看所有会话)

UDP:不可靠传输

  • 不进行编号:一个数据包就能完成数据通信。(所以只有一个数据包时候,建议使用UDP)
  • 不建立会话
  • 传输效率很高

分析例子:

动作 协议 分析
QQ聊天 UDP 一句话一个数据包就够了不需要建立会话
QQ传文件 TCP 文件比较大,一个数据包不够, 需要将文件编号,分段一个一个传输
QQ聊天、在线视频、网络语音电话 UDP 即时通讯,速度要求高,但是出现偶尔断续不是太大问题,不需要重发机制
访问网站 TCP 一个网址里面有很多图片,图片也很大,一个数据包也不够用
tftp TCP 下载文件的时候,文件也很大
接受邮件、远程登录 TCP 准确高要求高、但是速度可以相对慢

(2)传输层和应用层之间的关系

应用层 = 传输层 + 端口号 (端口号就是为了标识这个协议

应用层 传输层
http TCP + 80端口(说明是访问网址)
https TCP + 443端口
ftp TCP + 21端口
SMTP TCP + 25端口
POP3 TCP + 110 端口
RDP (远程桌面) TCP + 3389端口
共享文件夹 TCP + 445端口
SQL TCP + 1433端口
DNS(域名解析) UDP + 53端口 or TCP+53端口

(3)传输层的端口

应用层协议和服务之间的关系:

(1)服务器有哪些服务:Web服务(http)、ftp服务(下载)、smtp服务(邮件)、pop3服务(邮件)。

  • 服务器只有一个IP地址,这不同的服务使用端口号来进行区分
  • 服务器即便没有人连接,他时刻也在端口处监听。如果有请求发来,立马返回。

(2)应用层协议和服务之间的关系: 上述服务运行之后,在TCP或UDP的某个端口,侦听客户端的请求

  • 服务分为对内服务和对外服务,只有对外服务服务器才会被监听。

(3)相关的命令

命令 含义
netstat -an 查看自己计算机侦听的端口
telnet IP地址 + 端口 测试远程计算机打开的端口

安装 telnet 客户端:
韩立刚计算机网络——第五章:传输层_第3张图片

命令 含义
telnet 192.168.1.1 80 表示访问这个 192.168.1.1 地址计算机的 web 服务
telnet 192.168.1.1 3389 表示访问这个 192.168.1.1 地址计算机的远程桌面服务

总结:ip 地址代表计算机,端口号:代表这台计算机的不同的服务。


端口扫描工具的使用:可以扫描出指定地址范围内,谁打开了哪些端口
韩立刚计算机网络——第五章:传输层_第4张图片
更改端口增加服务器安全,为什么可以增加安全性?
黑客喜欢攻击 80 端口,也就是服务器的 web 服务,如果我们将 web 服务的端口更改为 21 端口,黑客就无法进行攻击了。

关闭某个端口

如果我们计算机安装了很多服务,但是我们只想其他人访问web服务,我们可以通过防火墙来打开一个固定的端口,将其他端口关闭。

案例:有一台服务器,我们只想提供 web 服务,但是此时如果所有对外的服务都打开,我们的服务器其他服务就有可能被占用,从而拉低我们整体的访问速度。

缕一缕流程
韩立刚计算机网络——第五章:传输层_第5张图片

(4)windows 防火墙的作用

我们有一台服务器放在了互联网上面,有自己的公网 IP ,别人都可以进行访问,我们如何增加服务器的安全性呢?

  • 对于没有使用的服务,将他的端口关掉。(只提供 web 服务,就只打开80端口)
  • 通过防火墙,就可以关闭计算机的端口

防火墙:给网卡加了一把锁
在这里插入图片描述

韩立刚计算机网络——第五章:传输层_第6张图片

  • 1、单向关闭端口:我们可以通过某个端口,主动向外发送数据。但是在别人看来,我们端口是关闭的,他们不能主动访问我们的端口。(不拦截出去的流量,只拦截进来的流量)
  • 2、动态开关端口:当我们主动访问其他 web 服务的时候,这时候我们的端口会短暂的打开,用来接收响应数据包

防火墙不能防控,灰鸽子木马程序
一般的病毒是:客户端攻击服务连接服务器,但是如果服务器打开防火墙,客户端就无法进行攻击。

木马程序:服务器主动去访问客户端,这时候打开防火墙,就不能进行防控了。

区分正常 web 流量和 木马流量:
韩立刚计算机网络——第五章:传输层_第7张图片

我们如果设置只允许 web 流量特点的流量出入。 (去查资料,看怎么进行windows 流量控制)


2、用户数据协议 UDP

(1)UDP 的报文格式

韩立刚计算机网络——第五章:传输层_第8张图片
韩立刚计算机网络——第五章:传输层_第9张图片
每个 UDP 报文分为 UDP 报头UDP 数据区两部分。

  • 报头由 4 个 16 位长(2 字节)字段组成。 8 个字节组成
  • 分别说明该报文的 源端口目的端口报文长度校验值
  • 因为UDP一个数据包就搞定了,所以不需要进行编号。
字段 说明
源端口 接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,如果不写入端口号,则把这个字段设置为 0。这样,接收端的应用程序就不能发送响应了
目的端口 接收端计算机上 UDP 软件使用的端口
长度 表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度,因为 UDP 报文头长度是 8 个字节,所以这个值最小为 8。
校验值 可以检验数据在传输过程中是否被损坏。

3、传输控制 TCP 协议概述

(1)TCP报文的首部格式

  • 必须要有的固定字节:20个字节。 还有一个可变部分。
  • 一般来说我们的数据包,20个字节就足够了, 但是有些特殊的数据包,可能不够。
  • 一行有 4 个字节,所以20个字节需要5行
    韩立刚计算机网络——第五章:传输层_第10张图片
名称 大小 作用
源端口 2字节 指定 发送端端口
目标端口 2字节 指定 接收端端口
序列号 4字节 指发送数据的位置。每发送一次数据,就会累加一次该数据字节的大小
确认应答号 4字节 表示期望收到数据的开始序列号。(比如B收到了1、2、3,希望收到第4个数据包,这时候这里填4)
数据偏移 4bit 计算出的TCP报文段,第多少个字节就是真正的数据。 4bit 最大是15,但是光固定长度就有20个字节,所以数据偏移的单位是 4 个字节。(所以最大值为 15*4 =60)
保留 4bit 一般为0
控制位 1字节 长度8位,从左到右分别为 CWR、ECE、URG、ACK、PSH、RST、SYN、FIN
窗口大小 2字节 表示从确认号开始,本报文的发送方可以接收的字节数,即接收窗口大小
检验和 2个字节 与UDP相似,区别在于无法关闭。
紧急指针 2个字节 只有在URG控制位为1时有效。该字段的数值表示本报文段中紧急数据的指针。
1、分析控制位字段

控制位的分类

  • URG标志,表示紧急指针(urgent pointer)是否有效。
  • ACK标志,表示确认号是否有效。我们称携带ACK标识的TCP报文段为确认报文段。(ACK=0,确认号无效)
  • PSH标志,提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会一直停留在TCP接收缓冲区中)。
  • RST 标志,表示要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段。
  • SYN 标志,表示请求建立一个连接。我们称携带SYN标志的TCP报文段为同步报文段
  • FIN 标志,表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段。

分析 SYN ,ACK 标志位的作用
韩立刚计算机网络——第五章:传输层_第11张图片

分析利用 TCP 协议的,建立会话机制攻击病毒 (SYN 攻击器)
韩立刚计算机网络——第五章:传输层_第12张图片
可以看到都是一些建立会话的请求,而且源地址都是瞎编的。
韩立刚计算机网络——第五章:传输层_第13张图片

分析 URG 设置为1的时候的意义:
韩立刚计算机网络——第五章:传输层_第14张图片
分析:
比如在传输文件:

  • 发送端,一开始先将数据放到 TCP 缓存当中,排好队,然后一个一个传输。
  • 突然发送端不想传输了,按下了 CTRL + C。生成一个截至命令的数据包。
  • 如果 URG = 0,这个 截至命令的数据包 就得一个一个进行排队,直到缓冲区中它前面的数据发完才能发出去。
  • 如果 URG = 1,这个 截至命令的数据包 就可以插队,直接插到最前面

分析 PSH 设置为1的时候的意义:(提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间)
韩立刚计算机网络——第五章:传输层_第15张图片

  • 可以看到接收端的TCP 缓冲区,排了一些数据。应用程序依次读取
  • 如果 PUSH = 0,那么这个数据包必须得乖乖排队
  • 如果 PUSH = 0,这个数据包就可以进行插队,让应用程序先读取它

2、分析窗口字段

韩立刚计算机网络——第五章:传输层_第16张图片

窗口:表示从确认号开始,本报文的发送方可以接收的字节数,即接收窗口大小
韩立刚计算机网络——第五章:传输层_第17张图片

理解:

  • 1、缓存分为接收缓存发送缓存
  • 2、A 给 B 发送数据的时候,A 会告诉 B,它的缓冲区里面可以接收多少个字节

分析:当我们访问一个网站的时候,抓取的数据包,前面3个是 建立连接的数据包

  • (1)主机发送给网址服务器的数据包
    韩立刚计算机网络——第五章:传输层_第18张图片
    MSS :最大数据包的数据大小。
    window size:TCP 接收缓存的大小。说明我们电脑的缓冲区是:65535。

  • (2)接下是网址服务器返还给我们电脑主机的数据包


  • MSS :最大数据包的数据大小。
    window size:TCP 接收缓存的大小。说明网址服务器的缓冲区是:64240。


3、抓包分析TCP帧头:

韩立刚计算机网络——第五章:传输层_第19张图片
流程:
第一步:ARP 协议:访问外网,就需要解析网关的 MAC 地址
第二步:UDP 协议:进行域名解析。
第三步:TCP 协议:进行数据传输。

TCP协议建立的会话,访问一个网址,可能建立多个会话

韩立刚计算机网络——第五章:传输层_第20张图片
可以看出:
1、先进行ARP地址解析
2、DNS 服务器解析域名
3、TCP 建立连接
在这里插入图片描述
访问百度的时候,TCP建立连接的3个数据包:(3次握手)
在这里插入图片描述

  • 可以看出建立连接的三个数据包,不仅仅是为了测试网络是否联通,而且还约定了一些东西
  • syn:表示请求建立连接
  • MSS:Maximum Segment Size ,TCP提交给IP层最大分段大小。 (1460)
  • win = 64240:窗口缓存大小为 64240个字节。

接下的数据包就是正常通讯的数据包
在这里插入图片描述
韩立刚计算机网络——第五章:传输层_第21张图片
韩立刚计算机网络——第五章:传输层_第22张图片

怎么理解序号、和确认号呢?

韩立刚计算机网络——第五章:传输层_第23张图片
第一次:客户端——> 服务器

  • 序号 = 1 :说明后面的数据,是 客户端发送给服务器的第一个字节
  • 确认号 = 1:说明客户端还没有收到服务器返回的数据,希望他可以返回第一个字节的数据
  • 数据大小:203 个字节

第二次:服务器——> 客户端

  • 序号 = 1 :说明后面的数据,是 服务器发送给客户端的第一个字节。 (但是实际上没有)
  • 确认号 = 204 :说明服务器已经收到了客户端发送的 203 个字节数据,希望返回第 204 个字节数据
  • 数据大小:0 个字节

第三次:服务器——> 客户端

  • 序号 = 1 :说明后面的数据,是 服务器发送给客户端的第一个字节。 (但是实际上没有)
  • 确认号 = 204 :说明服务器已经收到了客户端发送的 203 个字节数据,希望返回第 204 个字节数据
  • 数据大小:1460 个字节

第四次:服务器——> 客户端

  • 序号 = 1461 :说明后面的数据,是 服务器发送给客户端的第 1461 个字节。 (但是实际上没有)
  • 确认号 = 204 :说明服务器已经收到了客户端发送的 203 个字节数据,希望返回第 204 个字节数据
  • 数据大小:593 个字节

第五次:客户端——> 服务器

  • 序号 = 204 :说明后面的数据,是 客户端发送给服务器的第 204 个字节
  • 确认号 = 2054:说明客户端已经收到了服务器发送的 2053 个字节,希望他可以返回第 2054 个字节的数据
  • 数据大小:0 个字节

(2)TCP 协议的主要特点

适用于:数据包很大,分段传输,数据包进行编号,丢包之后进行重新传输。

  • TCP是面向连接的传输层协议。(在传输之前进行三次握手)
  • 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)
  • TCP提供可靠交付的服务, 流量控制,避免网络拥塞
  • TCP 提供全双工通信,面向字节流。

怎么理解TCP的全双工通信?
即便是单方向的下载文件,发送端在发送一段时间后,也会向


TCP 协议如何以字节流的方式来传输数据:

传输的时候,一个字节为一个数据包是不确定的。
韩立刚计算机网络——第五章:传输层_第24张图片
数据包在进入接收方TCP缓存之后,帧头就会被去掉
接收方,应用从TCP缓存里面读取数据包的时候,可以随意的读取,因为帧头已经去掉了。
韩立刚计算机网络——第五章:传输层_第25张图片

  • 首先将文件,分成一个一个字节。字符文件(文本)本来就是一个字节,二进制文件(图片,音频)8bit、8bit来进行划分。
  • 发送方和接收方都有一个 TCP 缓存,应用层每次加载到缓存的字节数目不一定

TCP 的连接

  • TCP把连接作为最基本的抽象, 每一条TCP连接有两个端点
  • TCP连接的端点不是主机不是主机的IP地址不是应用进程也不是传输层的协议端口TCP 连接的端点叫做套接字(socket)
  • 端点 = 套接字(socket) = IP地址 + 端口号
  • 一个TCP 连接 = 2个套接字 = 2个IP地址 + 2个端口号
    韩立刚计算机网络——第五章:传输层_第26张图片
    韩立刚计算机网络——第五章:传输层_第27张图片

1、我们主要关注:
  • TCP 协议如何实现 可靠传输
  • TCP 协议如何实现 流量控制
  • TCP 协议如何避免 网络拥塞

4、要关注的3个问题


(1)TCP 如何实现可靠传输

1、停止等待协议

分析:
网络层:只管传输,不管丢包怎么办,相当于快递公司。
传输层:TCP 协议要实现可靠传输。相当于用户。

韩立刚计算机网络——第五章:传输层_第28张图片

无差错情况

  • A先发送 M1之后,必须先等待B的通知,不能自己贸然发送 M2。
  • B收到 M1 之后,反过来给 A 一个 ack,告诉 A M1已经收到了,你可以继续发送 M2 了。
  • 依次类推。

超时重传情况

  • A先发送 M1之后,必须先等待B的通知,不能自己贸然发送 M2。
  • 此时网络层出现丢包,B没有收到,所以就不能给A发送 ack
  • 等待一段时间,A 没有收到B 的ack,此时 A 会继续重新发送 M1 .(因为认为这个包已经丢了)

韩立刚计算机网络——第五章:传输层_第29张图片

确认丢失:(B给A 的 ack 丢失了

  • B 给A 的 ack 丢失之后,A 照样收不到B的响应,所以只能重新发送 M1。
  • B 会重复接收一个 M1,此时 B 将重复的M1丢掉,然后重新发送一个 ack

确认迟到:(B给A的 ack 很晚才到

  • 确认迟到之后,A 会认为 B 的ack 已经丢失了,继续重新发送 M1。
  • 等 A 再次收到 ack ,然后将这个重复的 ack 丢掉。

韩立刚计算机网络——第五章:传输层_第30张图片
停止等待协议的缺点:信道利用率低

在这里插入图片描述
如何提高信道利用率:流水线传输 (不等待确认就直接传输,现在大部分用这个)
韩立刚计算机网络——第五章:传输层_第31张图片
疑问:流水线传输如何实现可靠传输呢
韩立刚计算机网络——第五章:传输层_第32张图片
韩立刚计算机网络——第五章:传输层_第33张图片

韩立刚计算机网络——第五章:传输层_第34张图片
再次进行提高效率:累计确认
没有出现丢包:返回最后收到那个数据包的 ack
韩立刚计算机网络——第五章:传输层_第35张图片

出现丢包:返回丢包之前那个数据包的 ack
韩立刚计算机网络——第五章:传输层_第36张图片

2、以字节为单位的滑动窗口技术

(1)A 的发送窗口:是由B的接收窗口决定的
韩立刚计算机网络——第五章:传输层_第37张图片
TCP 建立连接的时候:
B 给 A 发送数据包,告诉A自己的接收窗口是20,则A发送数据的时候,会将自己的发送窗口设置为20。

(2)分析滑动窗口的作用
分析发送过程:A 给 B发送数据的过程

  • 发送第一个数据包,大小为3个字节。
  • 不需要等待B的回应,继续发送剩下的数据包。 (等待回应的时间太长了)
  • 发送窗口当中的数据全部发送完之后,没有接受到回应的话,缓存就不能删除,窗口就不能滑动

韩立刚计算机网络——第五章:传输层_第38张图片

  • 此时B连续收到两个数据包,123 和 456,这时候只需要返回一个确认信息就够了
  • B给A返回确认信息, ACK == 1, 确认号返回 7。

韩立刚计算机网络——第五章:传输层_第39张图片
韩立刚计算机网络——第五章:传输层_第40张图片

  • A 收到确认号之后,A 就确保B已经成功收到了,前两个数据包。
  • A 就可以从发送缓存当中,删除前两个数据包的内容,A 的窗口就可以进行滑动
  • 同理,当 B确认之后,B的接收窗口也可以进行滑动
  • 窗口当中新添加进来的数据包,就可以继续进行发送。
    韩立刚计算机网络——第五章:传输层_第41张图片
  • 当数据包被 B 确认接收好之后,应用程序就可以对接受好的数据包进行读取。
  • 依次类推,重复以上步骤。

韩立刚计算机网络——第五章:传输层_第42张图片

(3)传输过程当中,如果有数据包丢失了怎么办?

  • 收到第一个数据包和第三个数据包,中间第二个数据包丢失了。
  • 那么B返回的确认号是哪一个呢?
    韩立刚计算机网络——第五章:传输层_第43张图片
  • 返回的确认号是: 7
  • 之前:ACK = 1 ,确认号 = 7,A 就会重新发送标号为 7 以后的所有数据包
  • 选择性确认:SACK = 1,确认号 = 7,告诉A计算机只丢失了第二个计算机,所以A就只发送第二个数据包

(4)重传超时时间的选择:

原理:TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段


(2)拥塞控制

提问:网络堵塞是由两个计算机造成的,还是由一堆计算机造成的呢

答案:就像是堵车一样,是所有车造成。
韩立刚计算机网络——第五章:传输层_第44张图片
定义:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞

举例:比如我们网线的传输带宽是 50M ,但是所有人传输的总和已经大于 50M,所以一定会发生堵塞。

吞吐量:吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。

韩立刚计算机网络——第五章:传输层_第45张图片
假如路由器的处理带宽是 1秒钟100字节, 路由器内部也是有操作系统的,也有 CPU ,也有内存,如果我们1秒钟传输 500 个字节,就会直接将路由器堵死机,发生死锁吞吐量为0

当输入的负载到达一定程度 吞吐量不会增加,即一部分网络资源会丢失掉

  • 理想情况:(绿色)k=1,斜率等于1, 输入多少数据,就可以成功传输多少数据。
  • 无拥塞控制:(红色)超出带宽的时候,吞吐量不会增加,发生死锁。
  • 实际情况:(蓝色) TCP有拥塞控制,可以避免出现网络吞吐量为0的情况
1、慢开始算法原理
  • 第一轮,先发送 1 个,没有丢包说明网络良好,下次增加数据包数量。
  • 第二轮,再发送 2 个,没有丢包说明网络良好,下次增加数据包数量。
  • 第三轮,再发送 4 个,没有丢包说明网络良好,下次增加数据包数量。
  • 第四轮,再发送 8 个,没有丢包说明网络良好,下次增加数据包数量。
  • 每次增加,以2倍的数量进行增加。
  • 如果出现丢包,则停止增加。
    韩立刚计算机网络——第五章:传输层_第46张图片

  • 传输轮次:第几次发送的意思, 拥塞窗口:一次发送数据包的个数。
  • 可以看出,第4次达到了 16 个数据包(因为它从第0次开始计算)

慢开始门限值:这个值以后的数据包增长个数,一个一个进行增长

  • 此处慢开始门限值为:16,所以之后的是 17,18,19,20
  • 当一次输出24个数据包的时候,发生了丢包,也就是网络堵了。

当出现拥塞的时候,发送超时重传的时候,发送丢包的时候。有两个动作。

  • 1、将ssthresh的值更新为发生拥塞时的cwnd的一半;(24 变成了 12)
  • 2、将cwnd的值减少为1,并重新开始执行慢开始算法。

然后从 1 在开始增长。

  • 指数型增长:1、2、4、8、(本应该是 16,因为门限值为12),所以就在12停留
  • 加法增大:(一个一个增大),12、13、14、15、16

韩立刚计算机网络——第五章:传输层_第47张图片

韩立刚计算机网络——第五章:传输层_第48张图片


“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的
“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞
韩立刚计算机网络——第五章:传输层_第49张图片


2、快重传举例

快重传:顾名思义,传输丢包,发送方快速重新传送

假设一次发送 5 个数据包。
韩立刚计算机网络——第五章:传输层_第50张图片
当接收方,成功接收到第3个数据包的时候,就可以确定是中间 第 2 个已经丢包了。

原本传输的情况:(发5个数据包之后,才会有累计确认)

  • 没有快重传的话,就必须等到,第五个传输完毕,才可以让发送方重新传输。
  • 其实后面就没有必要了,因为确认号为 2 ,发送方会将 2、3、4、5 都重新传输一下

快速重传:

  • 拥有快速重传,直接不进行等待,后面4个数据包都认为有没有收到,都直接返回 2 。
  • 不进行等待,所以会提高效率。

3、快恢复

韩立刚计算机网络——第五章:传输层_第51张图片
韩立刚计算机网络——第五章:传输层_第52张图片
快恢复:
发生网络拥塞的时候,拥塞窗口不会变为1,而是直接进入 “加法增大” 的情况。


(3)TCP 的传输连接管理

可以参考这边博客:https://blog.51cto.com/jinlong/2065461
传输连接有三个阶段:

  • 1、连接建立
  • 2、数据传输
  • 3、连接释放

TCP连接的建立都是采用客户服务器方式。

怎么区分客户端和服务器:

(1)主动发起连接建立的应用进程叫做客户(client)
(2)被动等待连接建立的应用进程叫做服务器(server)

1、三次握手建立TCP连接

韩立刚计算机网络——第五章:传输层_第53张图片

第一次握手:

  • TCP首部标记位: SYN = 1,ACK = 0,说明这个数据包是一个同步数据包,而且没有确认号
  • seq = x,x代表任意一个数值。(由A计算机指定:代表计算机A给B发送第y个字节)
  • B 计算机收到这样一个数据包的时候,就明白了有个计算机想要和他建立连接

第二次握手

  • TCP首部标记位: SYN = 1,ACK = 0,说明这个数据包是一个同步数据包,有确认号
  • seq = y,y代表任意一个数值。(由B计算机指定:代表计算机B给A发送第y个字节)
  • ack = x+1, 代表B计算机已经收到了 x 个字节,B 想让A计算机发送第 x + 1个字节

第三次握手:

  • SYN没有做要求
  • ACK = 1:说明有确认号
  • seq = x+1 :说明A已经收到B的确认号,准备给B发送第 x + 1个字节。
  • ack = y+1 :说明 A 渴望收到 B 的第 y + 1个字节

三次握手过程当中的状态变化:

韩立刚计算机网络——第五章:传输层_第54张图片

没有握手之前:都是 closed ,关闭状态。
第一次握手:A 变成了 syn-send (代表发送方), B为 listen 。
第二次握手:A 仍然为 syn-send ,B变为 syn-rcvd (代表接收方)。
第三次握手:A 和B都变为了 establish ,建立连接的状态。

访问一个不存在的网址:所以客户端会一直处于 send 状态,但是过一会就没有了。
韩立刚计算机网络——第五章:传输层_第55张图片
SYN 攻击,使用伪造地址来和服务器进行连接,但是服务器找不到这个ip地址。
韩立刚计算机网络——第五章:传输层_第56张图片
可以看出这些地址都是瞎写的。


本来两个数据包就可以验证是否有丢包,告诉对方自己的窗口有多大。为什么要有第三次的确认?

假设一个情况:客户A第一次握手的时候,选择了一个比较远的路由,导致客户A进行重新传输。

两次握手

  • 只是超时重传,并没有丢包,只是B会晚一点接收到。
  • 第一次进行握手的时候,B就会发送响应,等待 A 传输数据。
  • B会发送两个响应,因为有一个接收的比较晚,所以同理也会等待两个数据传输
  • 但是A只会响应一个,所以造成了 B 的资源浪费。

三次握手

  • B在等待A回应之后,才会等待传输数据,所以会避免资源浪费。

举例:
韩立刚计算机网络——第五章:传输层_第57张图片


2、TCP 的连接释放

什么情况会进行释放:访问网页的时候,页面已经全部显示,不需要传输了,需要释放连接。

韩立刚计算机网络——第五章:传输层_第58张图片
韩立刚计算机网络——第五章:传输层_第59张图片

第一次挥手

  • TCP首部标记位: FIN = 1,ACK = 0,说明这个数据包是一个结束数据包,而且没有确认号
  • seq = u,u代表任意一个数值。(由A计算机指定:代表计算机A给B发送第u个字节)
  • B 计算机收到这样一个数据包的时候,就明白了有个计算机想要和他断开连接

第二次挥手:(数据传输阶段)

  • 此时只是A发送了 FIN = 1 的信号,说明 A 的发送端已经关闭,但是B还能给A发送。
  • ACK = 1,seq=v,ack = u+1

第三次挥手

  • TCP首部标记位: FIN = 1,说明这个数据包是一个结束数据包
  • ACK = 1,说明有确认号
  • seq = v,v代表任意一个数值。(由A计算机指定:代表计算机A给B发送第v个字节)
  • ack = u+1

第四次挥手

  • ACK = 1,seq=u+1,ack = w+1

等待两份钟:客户端进行 closed 状态

  • 防止服务器没有收到,客户端的第四次挥手。
  • 万一服务器没有收到,客户端还可以进行重新响应,重新发送第四次挥手

你可能感兴趣的:(计算机网络,网络)