码迷,mamicode.com
首页 > 其他好文 > 详细

TCP协议基础(一)

时间:2019-05-27 16:22:13      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:报文   nbsp   模拟   丢失   期望   实现   端口号   链路   区别   

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

拥塞控制

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

 

 

TCP协议基础(一)

标签:报文   nbsp   模拟   丢失   期望   实现   端口号   链路   区别   

原文地址:https://www.cnblogs.com/zhanp/p/10931267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!