传输层协议

传输层

  1. socket->传输密切相,传输层负责 端到端之间的传输,只关注起点和终点。

  2. 源ip/源端口 -> 目的ip/目的端口

  3. ip地址:是一个32位的整数。ip协议中来描述的.

    端口号:区分一台主机上的那个程序。是一个16位整数(0-65535)

    知名端口号:0-1023

    ssh服务器:22

    ftp服务器:21

    telnet服务器:23

    http服务器:80

    https服务器:443

协议(UDP/TCP)

  • UDP

    1. 应用层:HTTP:1.1 200 OK\nContent-length…

    2. 传输层:源端口+目的端口+UDP长度(上限是64kb) +UDP校验和+HTTP:1.1 200 OK\nContent-length…

    3. UDP的校验和使用了一种很简单的CRC校验:

      • 取每个字节,把每个字节的数据依次循环相加,得到最终的一个数字,就是校验和。

      • 接收端按照同样的规则再次计算校验和,和发送端的校验和进行对比,如果数据达成一致,就可以认为数据没有发生错误。

    4. UDP与TCP对比:

      UDPTCP
      无连接有连接
      不可靠可靠传输
      面向数据报面向字节流
      全双工全双工
  • TCP

    1. TCP的设计核心

      1. 可靠性:发送者能知道自己发送是否成功。
        • 确认应答(ACK):

          保证可靠性的核心机制,为了区分当前是应答哪个数据,需要引入序号和确认序号概念,序号是给每个字节都编了号,确认序号表示的是当前序号之前的数据都已经收到了,同时也意味着向发送端索要当前确认序号开始的数据。

        • 超时重传:

          也是可靠传输中最核心的机制,传输一条数据没有确认应答的时候,等待一段时间,然后重新传,重传可能会重复若干次,重传次数越多,丢包的概率越低,重传的等待时间间隔也越来越久。

        • 连接管理:

          三次握手建立连接,四次挥手断开连接。

          三次握手建立连接
          1. 建立连接的意义:双方各自试探对方,确认是否适合建立连接(双方的读写数据能力)。
          2. 双方可以在建立连接过程中协商一些必要的数据(TCP序号的基准值)。
          3. 三次握手具体过程:客户端先发起一个建立连接请求(SYN同步报文段),服务器端收到SYN之后会立刻返回一个确认报文段(ACK),返回这个ACK也是一个SYN,客户端收到ACK后再回复一个ACK。
            在这里插入图片描述
          4. 涉及到的重要状态:
            • Listen状态,服务器端状态,表示手机开机,信号良好,随时可以有人和你建立连接。
            • ESTABLISHED状态:表示别人给你打电话,你接通了,连接已经建立完成,随时可以开始通信。
          四次挥手断开连接
          1. 1
          2. 涉及到的重要状态:
            • CLOSE_WAIT:等待程序调用Close来完成最终的断开连接过程。如果一个服务器上出现大量的CLOSE_WAIT, 说明代码中有bug,代码里的close方法忘记调用了,或者没有执行到。
            • TIME_WAIT:虽然此时程序已经结束了,但是还是要保持连接为TIME_WAIT,因为发送的最后一个ACK可能会丢包。TIME_WAIT等待时间:2MSL(MSL为成为网络上两个主机数据传输的理论最大时间,Centos7 上默认是60s)
              在这里插入图片描述
      2. 传输效率:可靠性的前提下尽量提高传输效率。
      • 滑动窗口
        1. 窗口:不等待ACK的情况下批量发送多少数据
          1. 滑动:每次收到一个ACK之后,就依次发送下一条数据,等待ACK数据区间就在往后移动。窗口越大,传输效率就越高。
          2. 可靠性:如果窗口无限大,那么接收端就有可能处理不过来,网络环境也可能承载不了。
          3. 如果在滑动窗口过程中丢包了:
          • 如果是ACK丢了:没有影响,确认序号表示的含义是当前序号之前的数据都收到了,后一个ACK可以涵盖前一个ACK
          • 如果是数据丢失了,接收端就会反复尝试索要该丢失的数据,重复若干次之后,发送端就会认为丢包,并重传该丢失的数据,而对于以发送成功的数据,则没必要再重新传输一遍。
      • 流量控制:
        1. 限制滑动窗口大小的一种机制,根据接收端的处理能力来进行限制。
          1. 接收缓冲区剩余空间越大,接收端处理能力越强;接收缓冲区剩余空间越小,接收端处理能力越弱;接收缓冲区
      • 拥塞控制:根据网络的拥堵情况,来限制发送端的发送速率

        ​ 试探式的方式:刚开始的时候是用比较小的滑动窗口,如果这个时候没有丢包,说明网络比较畅通,增大滑动窗口;如果发生丢包,说明网络可能拥堵了,减小滑动窗口。

      发送端真实的滑动窗口大小=min(流量控制中的窗口大小,拥塞窗口)。

      • 延时应答:提高传输效率的方式

        尽可能地提高窗口大小,延时应答导致延时时间中,接收端的程序已经处理了一部分的数据,此时ACK中的滑动窗口就更大了。

      • 捎带应答。延时应答的基础上,再提高传输效率

CK中的滑动窗口就更大了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值