zoukankan      html  css  js  c++  java
  • TCP协议基础(一)

    TCP为应用层提供的服务

    1. 提供进程和进程之间的通信

      答: 怎么区分服务目的主机上的哪个进程呢? 通过提供端口号(well-known port),

      如Telnet 23,DNS 53, HTTP 80, SMTP 25, FTP 21 22(数据,控制)

    2. 提供了面向连接的服务

      答: 区别于UDP的面向报文,UDP是一个报文一个报文地传输到目的IP上,两端并不会

      建立任何的连接,所以也是不可靠的,也是无序的,先后到达的顺序无法控制,也不会考虑

      接收端的接收缓存,和应用进程的读取速度等等,很可能因为缓存溢出的丢弃到达的UDP报文,

      所以不可靠!!!

      TCP的面向连接,并不是建立一条真实的连接。而是建立一条虚链路! 并不是物理链路。

      可以通过这条虚链路,进行有序的面向字节的传输,也就是一个字节一个字节这样的有序传输过去,

      而且因为有序,所以当接收方因为期望收到的序号与接收到的序号不匹配,就说明有丢失,所以可以通过

      这条虚链路实现 重传! 而UDP无法做到,所以可靠!

    3. 缓存机制

      运行了TCP的两端,都有各自的发送缓存和接受缓存,可以模拟成一个环形的缓存。

      发送缓存: 比如有三个字节是已发送的,后面的4个字节是已从应用进程中接收到但未发出去的,再后面的指针指向应用进程要写入的下一个空白区域(空的缓存块)。

      当发送方收到已发送出去的报文的ACK确认后,就把那片缓存清空(回收),是可循环利用的空间。

      问:是不是一发送出去就可以清空这片缓存?

      答:不是?因为要保存这个副本,等待这段数据的ACK的确认,因为TCP具有重传机制,就是靠的这个缓存机制。

      接受缓存:比如四个字节是已收到但未读取,并且有个指针指向下一个等待读取的缓存位置上。然后最后还有一个指针指向下一个要接收的位置。

    4. 全双工,就是两边都有发送缓存和接受缓存,所以两端可以同时进行发送和接收,是异步的,而不用同步停止等待。

    5. 分段传输

      答:TCP的分段的概念就是,从缓存中读取字节出来组成一个报文段,加上首部,封装起来,传给IP层,加上IP首部发过去。因为不可能是每次一个字节这样发过去,效率太慢了,所以组成报文段。

    6. 复用和分用

    TCP的特点

    编号系统

    1. 序号

      注意:TCP为每个要传输的字节进行编号,虽然传输的时候,是传输的报文段,但是实际上是根据字节来编号,而不是根据报文段来进行编号。

      而且:一开始的序号是从0-65535中随机抽取一个数作为开始的数作为第一个字节的序号,

      所以当接收方发来的确认号为4396,并不代表他已经接收了4395个字节,因为第一个字节序号是随机的!

    2. 确认号

      接收方发送的确认号是指 接收方期待收到的下一个字节的编号。

      并且是累积计算的,比如ACK_NUM = 4396, 表示已经收到了一开始到4395号字节,并对这一堆字节进行确认。而不是对第4395个字节的确认!

    流量控制

    依靠这个编号系统,可以使得 接收方能够对发送方进行流量的控制。

    差错控制

    差错控制使得TCP是可靠的,并且TCP提供的是面向字节的差错控制。

    拥塞控制

    发送方允许发送的数据受 接收方的缓存的影响,还要受到当前网络堵塞状况的影响

     

     

  • 相关阅读:
    spring bean的作用域
    Web前端开发CSS规范总结
    前端技术都包含哪些?
    Web安全常见问题及解决方法
    如何让手游更省带宽,耗电量更少?TBR渲染架构解析!
    新手学Java,有哪些入门知识点?
    如何让手游内存占用更小?从内存消耗iOS实时统计开始
    动作游戏老是卡?试试从这些方面提升流畅度
    开发者必知!2020年大前端发展趋势解读
    游戏编程入门! 想成为专业的游戏开发程序员需要掌握哪些?
  • 原文地址:https://www.cnblogs.com/zhanp/p/10931267.html
Copyright © 2011-2022 走看看