0x5 传输层

导图

传输层概述

传输层是只有主机才有的层次,为应用层提供通信服务,使用网络层的服务。

传输层的功能

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

传输层的两种协议

  1. 面向连接的传输控制协议TCP
    传送数据之前必须建立连接,数据传送结束后要释放连接。不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销:确认、流量控制、计时器及连接管理等。
    可靠,面向连接,重质量的,时延大,面向字节流,适用于大文件。
  2. 无连接的用户数据报协议UDP
    传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认。
    不可靠,无连接,重速度的,时延小,面向报文,适用于小文件。

传输层的寻址与端口

  • 复用:应用层所有的应用进程都可以通过传输层再传输到网络层。

  • 分用:传输层从网络层收到数据后交付指明的应用进程。

  • 逻辑端口/软件端口:是传输层的SAP,标识主机中的应用进程。

    端口号只有本地意义,在因特网中不同计算机的相同端口是没有联系的。

    端口号长度为16bit,能表示65536个不同的端口号。

  • 按范围端口号分类:

    1. 服务端使用的端口号:

      熟知端口号:给TCP/IP最重要的一些应用程序,让所有用户都知道。0~1023

      登记端口号:为没有熟知端口号的应用程序使用的。1024~49151

    2. 客户端使用的端口号:仅在客户进程运行时才动态选择的端口号。49152~65535

    应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP
    端口号 21 23 25 53 69 80 161
  • 套接字Socket

    在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。

    套接字Socket = (主机IP地址,端口号)

UDP协议

用户数据报协议(User Datagram Protocol)只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能。

UDP的主要特点

  1. UDP是无连接的,减少开销和发送数据之前的时延。
  2. UDP使用最大努力交付,即不保证可靠交付
  3. UDP是面向报文的,适合一次性传输少量数据的网络应用。
  1. UDP无拥塞控制,适合很多实时应用
  2. UDP首部开销小8B,TCP首部20B。

UDP首部格式

UDP校验过程

TCP协议

传输控制协议(Transmission Control Protocol)

TCP协议的特点

  1. TCP是面向连接(虚连接)的传输层协议。
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  3. TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序、不丢不重
  4. TCP提供全双工通信。
    发送缓存:准备发送的数据&已发送但尚未收到确认的数据。
    接收缓存:按序到达但尚未被接受应用程序读取的数据&不按序到达的数据。
  5. TCP面向字节流
    TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流
    流:流入到进程或从进程流出的字节序列。

TCP报文段首部格式

  • 序号:在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文段所发送数据的第一个字节的序号

  • 确认号期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已正确收到。

  • 数据偏移(首部长度):TCP报文段的数据起始处距离TCP报文段的起始处有多远,以4B位单位,即1个数值是4B。

  • 6个控制位

    1. 紧急位URG:URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。
    2. 确认位ACK:ACK=1时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1。
    3. 推送位PSH:PSH=1时,接收方尽快交付接收应用进程,不再等到缓存填满再向上交付。
    4. 复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。
    5. 同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文。
    6. 终止位FIN:FIN=1时,表明此报文段发送方数据已发完,要求释放连接。
  • 窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量。

  • 检验和:检验首部+数据,检验时要加上128伪首部,第四个字段为6。

  • 紧急指针:URG**=1时才有意义,指出本报文段中紧急数据的字节数。

  • 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认。

TCP连接管理

TCP连接传输三个阶段:连接建立→数据传送→连接释放。

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。

假设运行在一台主机(客户)上的一个进程想与另一台主机(服务器)上的一个进程建立一条连接,客户应用进程首先通知客户TCP,他想建立一个与服务器上某个进程之间的连接,客户中的TCP会用以下步骤与服务器中的TCP建立一条TCP连接:

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

SYN洪范攻击

SYN洪泛攻击发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。

TCP的连接释放

参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结東后,主机中的“资源”(缓存和变量)将被释放。

  1. ROUND 1
    客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。
    FIN=1、seq=u。
  2. ROUND 2
    服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了一一半关闭状态。
    ACK=1、seg=v、ack=u+1。
  3. ROUND 3
    服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。
    FIN=1、ACK=1、seq=w、ack=u+1。
  4. ROUND 4
    客户端回送一个确认报文段,再等到时间等待计时
    器设置的2MSL(最长报文段寿命)后,连接彻底关闭。
    ACK=1、seg=u+1、ack=w+1。

TCP可靠传输

发送方发送321报文,接收方接收后回复首部确认字段为4的报文,表示4之前的都收到了期待4。

发送方收到确认报文删除321报文备份,发送654报文和87报文但是654丢失了。接收方收到87报文,但没收到654报文,继续回复首部确认字段为4的报文。

发送方一直没收到654的确认报文,超时重传。

冗余ACK可以在超时事件发生之前就知道有没有丢失报文段。

TCP流量控制

流量控制:让发送方慢点,要让接收方来得及接收。

TCP利用滑动窗口机制实现流量控制。

在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值。

可以避免相互等待

TCP拥塞控制

出现拥塞的条件:对资源需求的总和 > 可用资源。

网络中有许多资源同时呈现供应不足—网络性能变坏—网络吞吐量将随输入负荷增大而下降。

拥塞控制:防止过多的数据注入到网络中。全局性

拥塞控制四种算法
假定

  1. 数据单方向传送,而另一个方向只传送确认。

  2. 接收方总是有足够大的缓存空间,因而发送窗口大小取决于拥塞程度。

\[ 发送窗口=Min(接收窗口rwnd,拥塞窗口cwnd) \]

接收窗口:接收方根据接受缓存设置的值,并告知给发送方,反映接收方容量。
拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。

  • 慢开始和拥塞避免

  • 快重传和快恢复

posted @ 2021-07-02 14:16  Treasure_lee  阅读(191)  评论(0编辑  收藏  举报