• 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提供的是面向字节的差错控制。

    拥塞控制

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

     

     

  • 相关阅读:
    【原创】编程题练习:反转字符串中的单词
    【最近的学习安排】
    【转载】判断两个链表是否相交、一个链表是否有环
    获取字符串字节长度
    如何找到GridView里的控件,建立GridViewRow对象
    Flex和.NET协同开发利器FluorineFx Flex与.NET互操作
    两款基于Visual Studio开发Flex的插件
    Mysql:向信号量添加给定计数将导致其超出它的最大计数错误
    Sql Server数据库触发器实例
    国外一些知名ASP.Net开源CMS系统
  • 原文地址:https://www.cnblogs.com/zhanp/p/10931267.html
Copyright © 2020-2023  润新知