计算机网络笔记 --- 5. 传输层

5. 传输层

TCP(可靠传输) — 分段、编号、流量控制、建立会话
UDP(不可靠传输) — 一个数据包就能完成数据通信 、不建立会话、多播

传输层和应用层的之间的关系

http = TCP+80
https = TCP +443
ftp=TCP+21
SMTP = TCP +25
POP3 = TCP+110
RDP=TCP+3389
共享文件夹=TCP+445
SQL=TCP+1433

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

服务运行后在 TCP 或 UDP 的某个端口侦听客户端请求

防火墙不能拦截木马程序

windons IPSec 控制流量

传输层协议和网络层协议的主要区别

  • IP 协议的作用范围是提供主机之间的逻辑通信
  • TCP 和 UDP 协议的作用范围是提供进程之间的逻辑通信

传输层的主要功能:

  • 为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)
  • 传输层还要对收到的报文进行差错检测
  • 传输层提供面向连接和无连接的服务

TCP 与 UDP

  • UDP在传输数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认,虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式
  • TCP 则提供面向连接的服务。TCP 不提供广播可多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源

TCP 协议的概述

  1. tcp 是面向连接的传输层协议

  2. 每条 tcp 连接只能有两个端点(endpoing),每一条 tcp 连接只能是点对点的(一对一)

    tcp 把连接作为最基本的抽象
    每一条 tcp 连接都有两个端点
    tcp 连接的端点不是主机,不是主机的 ip 地址,不是应用进程,也不是传输层的协议端口。
    tcp 连接的端点叫做 套接字(socket)
    端口号拼接到 ip 地址即构成了套接字。

  3. tcp 提供可靠的交付服务

  4. tcp 提供全双工通信(发送端和接收端都在不断的相互响应)

  5. 面向字节流(视频:p111)

TCP 协议的特点

  1. TCP 如何实现可靠传输

    可靠传输的工作原理———停止等待协议

    ​ 无差错情况:

    1. 发送端等待接收端的确认信息
    2. 发送端收到确认后发送后面的数据

    ​ 超时重传:

    1. 发送端没有收到接收端的确认消息
    2. 等一会重新传数据

    ​ 确认丢失:

    1. 接收端的确认信息在传输的过程中丢失了,发送端没有收到
    2. 超时重传

    ​ 确认迟到:

    1. 在一断时间没有收到确认信息,重传
    2. 在后面再接收到确认消息时不做处理

    使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。

    这种可靠传输协议常称为自动重传请求 ARQ(Automatic Repeat reQuest)

    ARQ 表明重传是请求是自动进行的,接收方不需要请求方发送重传某个出错的分组。

    停止等待协议的优点是简单,但缺点是信道利用率太低。
    提高信道利用率:

    流水线传输

    发送方可连续发送多个分组,不必每发完一个分组就停下来等待对方的确认信息。由于信道上一直有数据不间断的传送,这种传输方式可获得很高的信道利用率。

    连续 ARQ 协议(流水线)

    发送方维持发送窗口(比如是5)
    每收到一个确认信息,窗口就向后移一位,后面进入到发送窗口的数据组开始发送。

    累积确认(流水线)

    当发送方收到第 n 个组的确认信息后,第 n 个之前的确认信息就不用再发了。

  2. TCP 协议如何实现流量控制

    TCP 首部报文

    计算机网络笔记 --- 5. 传输层_第1张图片

    URG:当 URG =1 时,表示发送的是紧急报文,在发送端的缓存区不排队等待,当当前数据报文发送完毕后立即发送该报文。

    ACK :表示前面的确认号字段是否有效。ACK=1,表示前面的确认号字段有效。也就表示该 tcp 会话建立成功。

    PSH:告诉对方收到该报文后是否应该立即推送给上层。当 PSH=1时,表示对方接收到报文时,在缓存区不等待,直接接收。

    RST:当 RST=1时,说明你与主机的连接出现了严重的错误,必须释放连接,然后再重新建立连接。或者说明你上次发送给主机的数据有问题,主机拒绝响应。

    SYN:在建立连接时用来同步序列号。当 SYN=1 ACK=0时,表示这是一个请求建立连接的报文,当 SYN=1 ACK =1时,表示对方同意建立连接,当 SYN=1时,表示这是一个建立连接的请求或同意建立连接的请求。只有在前两次握手中 SYN 才会设置为1。

    FIN:标记数据是否发送完毕。当 FIN=1时,相当于告诉对方:我的数据已经发送完毕,你可以释放连接了。
    数据窗口:表示可以接收的数据量,发送方根据该设置自己数据的发送量。

    校验和:计算时与 UDP 类似。

    紧急指针:指向紧急数据的最后一个字节的位置。

    选项部分

    选项部分的应用:
    MSS最大报文段长度(Maxium Segment Size):指明数据字段的最大长度,数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS值指示自己期望对方发送TCP报文段时那个数据字段的长度。通信双方可以有不同的MSS值。如果未填写,默认采用536字节。MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中。
    窗口扩大选项(Windows Scaling):由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项。

    SACK选择确认项(Selective Acknowledgements):用来确保只重传缺少的报文段,而不是重传所有报文段。比如主机A发送报文段1、2、3,而主机B仅收到报文段1、3。那么此时就需要使用SACK选项来告诉发送方只发送丢失的数据。那么又如何指明丢失了哪些报文段呢?使用SACK需要两个功能字节。一个表示要使用SACK选项,另一个指明这个选项占用多少字节。描述丢失的报文段2,是通过描述它的左右边界报文段1、3来完成的。而这个1、3实际上是表示序列号,所以描述一个丢失的报文段需要64位即8个字节的空间。那么可以推算整个选项字段最多描述(40-2)/8=4个丢失的报文段。

    时间戳选项(Timestamps):可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文。

    NOP(NO-Operation):它要求选项部分中的每种选项长度必须是4字节的倍数,不足的则用NOP填充。同时也可以用来分割不同的选项字段。如窗口扩大选项和SACK之间用NOP隔开。

  3. TCP 协议如何避免网络堵塞
    TCP 的流量控制———在给定的发送端和接收端之间的点对点通信量的控制,它所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

    TCP 的拥塞控制-------拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素

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

    • 慢开始和拥塞避免

      发送方维持拥塞窗口
      发送方控制拥塞窗口的原则是:

      1. 只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去
      2. 只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数

      拥塞避免是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

      "拥塞避免"并非完全能够避免拥塞。

    • 快重传和快恢复

      快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。

      当发送端收到连续三个重复的确认时,就执行"乘法减小"算法,把慢开始门限 ssthresh 减半,但拥塞补钙品 cwnd 现在不设置为1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(加法增大),使用拥塞窗口缓慢地线性增大。

  4. TCP 传输连接管理
    传输连接有三个阶段:连接建立,数据传送,连接释放
    TCP 连接的建立都是采用客户服务器方式
    主动发起连接建立的应用进程叫做客户端
    被动等待连接建立的应用进程叫做服务器

    建立连接:三次握手

    计算机网络笔记 --- 5. 传输层_第2张图片

    连接释放:四次挥手

    1. 数据传输结束后,通信的双方都可释放连接。客户端应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
    2. 客户端把连接释放报文段首部的 FIN=1,其序列号 seq=u,等待服务器的确认。
    3. 服务器发出确认,确认号 ack=u+1,而这个报文段自己的序列号 seq=v,TCP 服务器进程通知高层应用进程,从客户端到服务器这个方向的连接就释放了,TCP 连接处于半关闭状态。服务器发送数据,客户端仍会接收。
    4. 若服务器没有要向客户端发送的数据,其应用进程就通知 TCP 释放连接。
    5. 客户端收到连接释放报文段后,必须发送确认
    6. TCP 连接必须经过时间 2msl 后才真正释放掉。

计算机网络笔记 --- 5. 传输层_第3张图片

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