计算机网络【传输层】

目录

传输层提供的服务

传输层的功能(与网络层对比记忆)

传输层寻址与端口

无连接服务和面向连接服务

UDP协议

UDP 数据报

UDP 校验

TCP协议

TCP 特点

TCP 连接管理

TCP 可靠传输

TCP 流量控制

TCP 拥塞控制


传输层提供的服务

  • 传输层的功能(与网络层对比记忆

  1. 传输层提供相互通信的应用进程之间的逻辑通信(即端到端的通信);而网络层提供的是主机之间的逻辑通信。
  2. 复用和分用。传输层的复用是指发送方不同的应用程序都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。而网络层的复用是指发送方不同协议的数据都可以封装成 IP 数据报发送出去;分用是指接收方的网络层在剥去首部后把数据交付给相应的协议
  3. 传输层还要对收到的报文进行差错检测(首部和数据部分);而网络层只检查 IP 数据报的首部,不检查数据部分。
  4. 提供两种不同的传输协议,即 TCP 和 UDP。而网络层无法同时实现两种协议(即要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报)
  • 传输层寻址与端口

  1. 端口的作用:端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。
  2. 端口号:应用进程通过端口号进行标识,端口号只具有本地意义,不同计算机的相同端口号是没有联系的。
    常用端口号:FTP-21,TELNET-23,SMTP-25,DNS-53,TFTP-69,HTTP-80,SNMP-161.
  3. 套接字:唯一地标识网络中的一台主机和其上的应用进程。套接字 = (主机 IP 地址, 端口号)
  • 无连接服务和面向连接服务

  1. 面向连接服务:在通信双方进行通信前,必须建立连接,通信结束后释放连接,如 TCP。
  2. 无连接服务:需要通信时,直接将信息发送到 “网络” 中,让该信息的传递在网上尽力而为地往目的地传送,如 UDP。

UDP协议

  • UDP 数据报

  1. UDP 仅在 IP 的数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测。
    UDP 常用于一次性传输较少数据的网络应用。
    UDP 提供尽最大努力的交付,即不保证可靠交付,也就是说可靠性由应用程序的需要来灵活控制。
    UDP 是面向报文的,报文不可分割是 UDP 数据报处理的最小单位。
  2. UDP的优点用来回答为什么更适合 UDP ,而不使用 TCP ):
    a)UDP 无须建立连接,没有连接延时。试想如果 DNS 运行在 TCP 上而非 UDP 上,那么 DNS 域名解析的速度会慢很多,还有qq聊天、老师屏幕广播等。
    b)无连接状态。不跟踪很多参数,如接收和发送缓存、拥塞控制参数、序号与确认号的参数,所以有些专用服务器使用 UDP 时,一般都能支持更多的客户机。
    c)分组首部开销小。TCP 有 20B 的首部开销,而 UDP 只有 8B。
    d)应用层能更好地控制要发送的数据和发送时间,UDP 没有拥塞控制,网络中的拥塞不会影响主机的发送效率。某些实时应用要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而 UDP 正好满足这些要求。
  3. IP 数据报和 UDP 数据报的区别:
    IP 数据报是在网络层要经过路由器存储转发的;而 UDP 数据报在传输层的端到端的逻辑信道中传输,封装成 IP 数据报在网络层传输时, UDP 数据报的信息对路由是不可见的。
  • UDP 校验

  1. 在计算校验和时,在 UDP 数据报之前增加 12B 的伪首部,伪首部既不向上传送也不向下传送。
  2. 校验时,若 UDP 数据报部分的长度不是偶数个字节,则需填入一个全0字节,但此字节和伪首部一样,是不发送的。
  3. 如果 UDP 校验和校验出 UDP 数据报是错误的,那么可以丢弃,也可以上交,但要附上错误报告。
  4. 通过伪首部,不仅可以检查源端口号、目的端口号、UDP 用户数据报的数据部分,还可以检查 IP 数据报的源 IP 地址和目的地址。

TCP协议

  • TCP 特点

      需要将要传输的文件分段,面向连接的传输,建立会话,可靠传输,流量控制。如qq传文件,发邮件,下载文件...

  1. TCP 是面向连接的传输层协议。
  2. 每条 TCP 连接只能有两个端点,每条 TCP 连接只能是点对点的(一对一)
  3. TCP 提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。
  4. TCP 提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此 TCP 连接两端都有发送缓存和接收缓存。
  5. TCP 是面向字节流的,即 TCP 协议从缓存中组装数据包。

     TCP 和网络层虚电路的区别:
     TCP 报文段在传输层抽象的逻辑通信中传输,对路由器不可见;虚电路所经过的交换结点都必须保存虚电路状态信息。在网络层采用虚电路方式。则无法提供无连接服务;而传输层采用 TCP 不影响网络层提供无连接服务。

  • TCP 连接管理

      发起主动请求的是Client,被动打开的是Server。

  1. 连接的建立
    a)第一次握手:Client 将标志位 SYN 置为1,随机产生一个序号 seq=x, 并将该数据包发送给 Server,Client 进入SYN_SENT 状态,等待 Server 确认。
    b)第二次握手:Server 端收到数据包后由标志位 SYN=1 得知 Client 请求建立连接,Server 端将标志位 SYN 和 ACK 都置为1,ack=x+1,随机产生一个序号 seq=y,并将数据包发送给 Client 以确认连接请求,此时 Server 端进入 SYN_RCVD 状态。
    c)第三次握手:Client 收到确认后,检查 ack 是否为 x+1,ACK 是否为1,如果正确则将标志位 ACK 置为1,ack=y+1,并将该数据包发送给 Server,Server 检查ack是否为y+1,ACK 是否为1,如果正确则建立连接成功,Client 和 Serve r都进入ESTABLISHED 状态。



    值得注意的是:Server 端的资源是在完成第二次握手时分配的,而 Client 端的资源是完成第三次握手时分配的,这就使得服务器易于受到 SYN 洪泛攻击。
    SYN洪泛攻击就是 Client 在短时间内伪造大量不存在的 IP 地址,并向 Server 不断地发送 SYN 包,Server 则回复确认包,并等待 Client 确认,由于源地址不存在,因此 Server 需要不断重发直至超时,这些伪造的 SYN 包将长时间占用未连接队列,导致正常的 SYN 请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。
    为什么要三次握手,两次不行吗?
    主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

    在两次握手的情况下:Client 发送了第一个请求连接并且没有丢失,只是在网络中滞留时间太长。这时,由于 Client 迟迟没能收到 Server 的确认,以为 Server 没有收到,于是又发了一个建立连接的请求并完成了两次握手,传输数据,然后关闭连接。然而这时第一个请求到达了 Server 端,由于两次握手的机制,Server 端立即建立起连接,这将导致不必要的错误和资源浪费。
    三次握手的情况下:就算第一次的请求到达 Server,Server 发送 SYN 和 ACK 并不能使 Client 回复确认,由于 Server 收不到确认,就知道 Client 并没有请求连接。

  2. 连接的释放
    a)第一次挥手: Client 发送一个 FIN,seq=u,关闭 Client 到 Server 的数据传输,Client 进入 FIN_WAIT_1 状态。
    b)第二次挥手: Server 收到 FIN 后,发送一个 ACK 给 Client,ack=u+1,seq=v,Server 进入 CLOSE_WAIT 状态。此时从 Client 到 Server 这个方向的连接就释放了,TCP 连接处于半关闭状态。Client 收到这个确认后,进入 FIN_WAIT_2 状态,等待 Server 释放连接。
    c)第三次挥手:当 Server 不再有数据需要发送时,发送一个 FIN 和 ACK,seq=w,ack=u+1,用来关闭 Server 到 Client 的数据传输,Server 进入 LAST_ACK 状态。
    d)第四次挥手: Client 收到 FIN 后,Client 进入 TIME_WAIT 状态,接着发送一个 ACK,seq=u+1,ack=w+1,此时TCP 连接还未释放,必须等待 2MSL 后才进入 CLOSED 状态。Server 收到确认后,进入 CLOSED 状态。



    为什么要延时等待 2MSL ?
    保证Client最后一个发送的ACK报文能够到达Server端,如果中途丢失,Server会超时重传FIN和ACK报文。而Client能在2MSL时间内收到这个重传的报文,接着Client重传一次确认报文ACK,并重启计时器再计时2MSL。如果不等待而直接进入CLOSED状态,那么Server端很有可能就无法正常关闭。

    为什么建立连接是三次握手,而关闭连接则是四次挥手?
    因为服务端在 LISTEN 状态下,收到建立连接请求的 SYN 报文后,把 ACK 和 SYN 放在一个报文里发送给客户端。ACK 报文是用来应答的,SYN 报文是用来同步的。
    而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但还是可以接收数据的,服务端未必在这个时候都把数据发完了,等待数据都发完时再发送 FIN 报文给对方来表示同意关闭连接。因此,服务端一般会把 ACK 和 FIN 分开发送。
    为什么不采用 “三次挥手” ?
    这个问题与延时等待 2MSL 的回答是一样的! 

  • TCP 可靠传输

  1. TCP 的任务是在 IP 层不可靠的、尽力而为服务的基础上建立一种可靠数据传输服务。TCP 使用了校验、序号、确认和重传等机制来达到这一目的。
  2. 检验。TCP 的校验机制与 UDP 校验一样。
  3. 序号。TCP 首部的序号字段是用来保证数据能有序提交给应用层。
  4. 确认。TCP 首部的确认号是期望收到对方的下一个报文段的第一个字节的序号。默认使用累计确认,即 TCP 只确认数据流中至第一个丢失字节为止的字节。
  5. 重传。超时和冗余 ACK 会导致 TCP 对报文段进行重传。
    超时:TCP 每发送一个报文段,就对这个报文段设置一次计时器,计时器设置的重传时间到期但还未收到确认时重传。
    冗余 ACK:超时触发重传存在的一个问题是超时周期往往太长,导致时延增加,所以发送方通常可在超时事件发生之前通过注意冗余 ACK 来较好地检测丢包情况。如发送方发送了序号1,2,3,4,5的 TCP 报文段,其中 2号 报文段丢失,因此当接收端接收到了3,4,5的失序报文段,每收到一个失序报文段向发送方发送一个冗余 ACK。当发送方收到对同一报文段的 3个冗余 ACK 时,就可以认为该报文段丢失,立即对该报文段进行重传,这种技术通常称为快重传。
  6. 假定在一个互联网中,所有链路的传输都不出现差错,所有结点也都不会发生故障,试问在这种情况下,TCP 的 “可靠交付” 功能是否是多余的?
    不是多余的。TCP 的 “可靠交付” 功能在以下情况下是必不可少的:
    a)每个 IP 数据报独立得选择路由,因此在到达目的主机时有可能出现失序。
    b)由于路由选择的计算出现错误,导致 IP 数据报在互联网中转圈,最后数据报首部的生存时间(TTL)数值下降为零,这个数据报在中途就消失了。
    c)某个路由器突然出现很大的通信量,以致路由器来不及处理到达的数据报,因此有的数据报丢失。
  • TCP 流量控制

  1. TCP 提供流量控制服务来消除发送方使接收方缓存区溢出的可能性。采用滑动窗口协议,在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口 rwnd,即调整 TCP 报文段首部中的 “窗口” 字段值,来限制发送方向网络注入报文的速率,同时,发送方根据其对当前网络拥塞程序的估计而确定窗口值,这称为拥塞窗口 cwnd。
  2. 如果接收端发送的划窗调整报文丢失怎么办?
    ----发送端会定时向接收端发送了解接收端划窗信息的报文,解决一直等待的问题。
  3. 传输层与数据链路层的流量控制的区别:
    ----传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制,另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化。
  • TCP 拥塞控制

      所谓拥塞控制,就是防止过多的数据注入网络,保证网络中的路由器或链路不至于过载。

  1. 拥塞控制与流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通信量的控制,即接收端控制发送端发送数据的速率,以便使接收端来得及接收。(直观一点的例子:某个链路的传输速率为 10Mb/s,某主机以 1Mb/s 的速率发送数据,显然网络的带宽足够大,不存在拥塞问题,但如此高的发送速率将导致 PC 来不及接收,因此我们需要流量控制。但有 100W 台主机在此链路上以 1Mb/s 的速率发送数据,则现在就要考虑网络的负载能力了。)
  2. 发送窗口的上限 = min[ rwnd, cwnd ]。
  3. 慢开始和拥塞避免
    a)拥塞窗口执行慢开始算法由1指数增长到慢开始门限
    b)只要网络未出现拥塞,执行拥塞避免算法,加法增大拥塞窗口
    c)一旦网络出现拥塞,慢开始门限 ssthresh 立即变为出现拥塞时窗口的一半,拥塞窗口 cwnd 变为1,执行慢开始算法。
     


    拥塞避免并非完全能够避免拥塞,利用以上的措施要完全避免网络拥塞还是不可能的。
    拥塞避免是说在拥塞避免阶段吧拥塞避免窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
  4. 快重传和快恢复:
    如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认(冗余 ACK )。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。重新设置慢开始门限 ssthresh 为当前拥塞窗口的一半,与慢开始不同之处是拥塞窗口 cwnd 不是设置为 1,而是比 ssthresh 稍大一点,然后执行拥塞控制算法,使拥塞窗口缓慢得线性增大。
     

  5. 快重传和快恢复 FRR 的优势:
    在 TCP/IP 中,快速重传和恢复( Fast Retransmit and Recovery,FRR )是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了FRR,就不会因为重传时要求的暂停被耽误。 当有单独的数据包丢失时,快速重传和恢复( FRR )能最有效地工作。
  6. 为什么超时时间发生时 cwnd 被置为 1,而受到 3个冗余 ACK 时 cwnd 减半?
    比较网络拥塞程度,显然,超时时连 ACK 报文都传输不了了,网络拥塞更严重,所以发送方更应该最大限度地抑制数据发送量。

     
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值