计网传输层

1. 传输层功能

传输层功能:

  1. 传输层提供进程与进程之间的逻辑通信
  2. 复用和分用
  3. 传输层对收到的报文进行差错检测

2. 传输层的寻址与端口

复用:应用层所有的应用进程都可以通过传输层再传输到网络层
分用:传输层到网络层收到数据后交付指名的应用程序

逻辑端口/软件端口:端口是传输层的SAP,表示主机中的应用进程。
端口号只用本地意义,在因特网中不同计算机的相同端口是没有联系的。
端口号长度为16bit,能表示65536个不同端口号。

端口号划分:
此处输入图片的描述

3. UDP协议

3.1 UDP的主要特点

  1. 此协议是无连接的,即发送数据之前不需要建立连接;
  2. 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制;
  3. 是面向报文的,没有拥塞控制,很适合多媒体通信的要求;
  4. 支持一对一、一对多、多对一和多对多的交互通信;首部开销小,只有八个字节。域名解析就是使用此协议。TCP20个字节
  5. UDP无拥塞控制,适合很多实时应用。

3.2 UDP首部格式

此处输入图片的描述

3.3 UDP校验

此处输入图片的描述
伪首部只有在计算机校验时才出现,不想下传送也不向上提交
17:封装UDP报文的IP数据包首部协议字段是17。
UDP长度:UDP首部8B+数据部分长度(不包括伪首部)。
此处输入图片的描述

  • 在发送端:
    1.填上伪首部
    2.全0填充检验和字段
    3.全0填充数据部分(UDP数据报要看成许多4B的字串接起来)
    4.伪首部+首部+数据部分采用二进制反码求和
    5.把和求反码填入检验和字段
    6.去掉伪首部,发送
  • 在接收端:
    1.填上伪首部
    2.伪首部+首部+数据部分采用二进制反码求和
    3.结果全为1则无差错,否则丢弃数据报/交给应用层附上出差错的警告。

4. TCP协议

4.1 TCP协议的特点

  1. TCP是面向连接(虚连接)的传输层协议;
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
  3. TCP提供可靠交付的服务;
  4. TCP提供全双工通信。
  5. 面向字节流。

4.2 TCP首部格式

此处输入图片的描述

  1. 源端口:16位的源端口。源端口和源IP地址的作用是标示报文的返回地址。
  2. 目的端口:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。
  3. 序列号:占32位,一次TCP通信(建立到断开)过程中某一个传输方向上的字节流的每个字节的编号,它保证了TCP通信的有序性,解决网络包乱序的问题,由于有了这个编号,接收端可以根据这个序号进行确认,可以保证每个分段在原始数据包中的位置,初始序列号由自己定,而后绪的序列号由对端的ACK决定:SN_x
    = ACK_y (发送包的序列号=上一确认包的应答号)。
  4. 应答号(确认号):占32位,接收方对发送来的TCP报文段的确认响应号,其值是收到的TCP报文段的序号+1,也是对端下一次发报文段过来的序号,期望对端以这个序号开始发送自己的分组。这样可以保证发送过来的报文是有序的,否则发送端不能确认之前的报文是否被收到,而要决定是否重传。
  5. 数据偏移:占4位,记录数据域的地址偏移,数据偏移每+1代表4字节,所以最大可表示60字节偏移,即头部的选项域最大可以有40字节。
  6. 标志:6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。
    • 标记位URG=1表示在传输数据报时不需要排队,不管缓存中有多少数据。
    • 标记位ACK=0表示确认号是无效的(在接收数据后其值为1,但是如果还没有发送数据,那当然就是0)。
    • 标记位SYN=1表示同步,也就是这个数据报的发送需要建立一个会话。
    • 标志位PSH=1表示接收端在将接收到的数据组装的时候不排序。
    • 标志位RST=1表示TCP会话出现了严重的问题,需要重新建立连接。比如我们对某个打开但是会没有完全打开时,点击关闭,则会出现这种情况。
    • 标志位FIN=1表示数据传输已经完毕了,需要释放连接。
  7. 窗口:占两个字节,比如此时有两个主机A、B。A在发送数据时可以缓存的字节为65530个字节,于是需要将这个窗口发送给B,看B的接收缓存是不是能够满足最大的窗口字节,需要统一。同样,当B向A发送数据时也需要统一窗口。
  8. 校验位:16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值结果完全一样,从而证明数据的有效性。
  9. 紧急指针:只有在标志位URG=1的情况下才有作用,这表示TCP报文中数据部分中前面的多少个字节需要紧急处理。
  10. 选项:长度不定,但长度必须以字节。如果 没有 选项就表示这个一字节的域等于0。
  11. 填充:不定长,填充的内容必须为0,它是为了数学目的而存在。目的是确保空间的可预测性。保证包头的结合和数据的开始处偏移量能够被32整除,一般额外的零以保证TCP头是32位的整数倍。

4.3 TCP连接建立(三次握手)

此处输入图片的描述

  • ROUND 1:
    客户端发送连接请求报文段,无应用层数据。
    SYN=1, seq=x(随机)
  • ROUND 2:
    服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。
    SYN=1, ACK=1, seq=y(随机), ack=x+1
  • ROUND 3:
    客户端为该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据。

4.3 TCP连接释放(四次挥手)

此处输入图片的描述

  • ROUND 1:
    客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。
    FIN=1, seq=u

  • ROUND 2:
    服务器端回送-一个确认报文段,客户到服务器这个方向的连接就释放了——半关闭状态。
    ACK=1, seq=v, ack =u+1

  • ROUND3:
    服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。
    FIN=1, ACK=1, seq=w, ack =u+1

  • ROUND 4:
    客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL (最长报文段寿命)后、连接彻底关闭。

4.4 TCP可靠传输

  • 校验
    与UDP校验一样,增加伪首部
  • 序号
  • 确认
  • 重传
    确认重传不分家,TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。
    超时重传重传时间
    TCP采用自适应算法,动态改变重传时间RTTs (加权平均往返时间)。
    冗余ACK (冗余确认)
    每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。
    发送方已发送1,2,3, 4, 5报文段
    接收方收到1,返回给1的确认(确认号为2的第一个字节)
    接收方收到3,仍返回给1的确认(确认号为2的第一个字节)
    接收方收到4,仍返回给1的确认(确认号为2的第一个字节)
    接收方收到5,仍返回给1的确认(确认号为2的第一个字节)
    发送方收到3个对于报文段1的冗余ACK一认为2报文段丟失, 重传2号报文段快速重传

4.5 TCP流量控制

A向B发送数据,连接建立时,B告诉A:“我的rwnd=400字节”,设每一个报文段100B,报文段初始值为1
此处输入图片的描述
TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值。
若窗口仍然是0,那么发送方就重新设置持续计时器

4.6 TCP拥塞控制

出现资源拥塞的条件:对资源需求的综合大于可用资源

假定:

  1. 数据单方向传送,而另一方向只能传输确认
  2. 接收方总是有足够大的缓存空间,因而发送窗口的大小取决于拥塞程度
    发送窗口=Min{接收窗口rwnd,拥塞窗口cwnd}

4.6.1 拥塞控制&流量控制

  • 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
  • 流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得急接收。

4.6.2 慢开始和拥塞避免

此处输入图片的描述
说明:刚开始的时候速度增长是以2的倍数增加,当达到慢开始门限后,则是每次增加1的速度增加。当速度达到24时发现出现了拥塞,于是则要计算一个新的慢开始门限(新的门限值=出现网络拥塞时的cwnd/2),即此时速度的一般12,如果还是拥塞,则继续计算新的慢开始门限,之后则又开始慢慢增长,同时注意,此时的慢开始门限就是12了,而不是最开始的16。
注意:拥塞避免并非指完全能够避免拥塞。而是在说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。这是最开始的拥塞控制方法,之后又出现了新的方法,即快重传和快恢复。

4.6.3 快重传和快恢复

  • 快重传:
    比如此时发送端向接收端发送了1、2、3、4、5这样一个数据段,但是在发送的过程中第三个数据丢失了,根据之前讲的累积确认,此时还是必须等到第4、5个数据接收到之后才发送确认号,但是要知道只要收到的数为1、2、4,发送端就已经知道丢包了,于是此时会向发送端连续发送三个相同的确认号,让其发送第三个数据报,这就是快重传。
  • 快恢复:
    如上,丢失第三个数据报可能是因为拥塞,于是发送端会降低拥塞窗口,比如此时减小到了1,但是对于接收端发送的三个相同的确认号,此时却都收到了,这标明此时网络又是很好的,不再拥塞了,此时就不会向之前那样先指数再线性这样增长了,而是让拥塞窗口快速恢复到12,然后线性增长,这是相对慢开始来说的。

此处输入图片的描述

-------------本文结束感谢您的阅读-------------