当前位置: 首页 > 工具软件 > Reliable > 使用案例 >

计算机网络笔记之 25 TCP:可靠(reliable)传输服务

公羊信厚
2023-12-01

三大网络层传输的遗留问题:

  • 丢失
  • 乱序
  • 延时

transmission control protocol (TCP)

TCP建立一种逻辑连接,是传输层的协议,提供可靠的传输服务

特点:

  • 完全可靠(无重复,不丢包) (每个报文都有编号不会乱序)
  • 面向连接 (通信前先建立连接,建立后,data顺着连接源源不断地传输)
  • 全双工流的传输服务 (双向+异步)
  • 端到端的通信协议 (两个进程直接通信:end to end,point to point)
  • 流接口(流:有序号,不会乱序)
  • 可靠的连接启动与关闭 (三次握手四次挥手)(发完数据就会关闭连接不占用带宽)

底层硬件并不支持物理连接。传输层使用网络层IP地址来构建逻辑连接。

连接

  • 物理连接:专门有一条线路实现两端的直接通信
  • 逻辑连接:两端只是逻辑上可达(间接的物理连接)

TCP数据报

TCP借助IP来传输数据。
每一个TCP数据报都会被封装到一个IP数据报中,然后发送到Internet中。
IP不会读取/改变TCP数据报的内容。(整个TCP报文都作为IP数据报的payload)

实现可靠性

可靠性的最大的问题在于:

  • 底层硬件传输时未必可靠的。
  • PC重启

包丢失和重发

通过实现一个重传方案
接收端:
接收端收到IP报文,回送源端一个响应报文(ACK)作为确认
源端:
TCP程序重传丢失的IP报文

  • 条件:超时没有收到响应报文 超时:2台通信主机之间的TCP协议来定时间(动态调整,根据某个算法)
    传输过程中:每一条信息的传输都会有一个ack回复

重传时间的确定

  • 确定的重传时间T
  • 2的指数级确定方式
  •   按照2的指数作为重传时间,超时,重传时间加倍。 如果最近三个数据报文的发送-响应时间小于Ti/2,那下次的Ti就会减半。
    
  • 按照一定统计算法迭代调整
  •   根据一段时间内的发送-响应周期的分布,调整重传时间为一段时间内的统计结果Ts和前一段重传时间Ti的加权值。 T(i+1)=aTi+bTs
    

自适应重传

TCP监视时延(发送时记下时间,收到响应时提取时间)
调整重传时间来适应变化的情况。

缓冲 流量控制与窗口

TCP使用窗口机制来控制数据流量。

当连接建立起来的时候,连接的每一端都会分配出一个buffer用于存放发来的数据,然后发送当前缓冲区的尺寸来告诉另一端尚可接受数据的大小。
window:当前时间下buffer可用的空间。

三次握手(TCP建立全双工的连接) 解决可靠性

tcp的运输链接

  • 连接建立
  • 数据传送
  • 连接释放
    连接建立的三大问题:
  1. 要使彼此得知对方的存在
  2. 要使双方协商一些参数(最大报文长度,最大窗口大小,服务质量等等)
  3. 能够对运输实体资源(缓存大小,连接表中的项目等等)进行分配
    TCP连接的建立采用:Client(主动建立连接的应用进程)-Server方式(被动等待连接建立的应用进程)(CS模式)
三次握手
  1. client端发出SYN的TCP报文请求建立连接 (seq=x)
  2. server端发出ACK,SYN报文,确定收到建立起c->s的单工通信的同时,发出报文中的SYN=1也是向client端请求建立全双工的另一半连接 (seq = y ack = x+1)
  3. client端发出ack确认报文,TCP连接正式建立 (ack = y+1)
    注意这三者的seq值。
    然后即可进行数据传输,这一部分可以参考计算机网络实验TCP通信的代码:
    Viende:TCP计网实验代码

四次挥手断开连接

数据传输结束后,通信双方都可以释放连接

  1. Client首先对Server发出连接释放报文FIN=1 seq=u。停止数据的发送(之后只会发送通信状态确认的报文,不会再发送有效数据信息)等待B的确认
  2. Server端发出确认报文,ack=u+1,seq= v。TCP服务器端告知高层应用进程,此时Client->Server这一半的通信就已经释放了。TCP连接处于半关闭状态。但server若要发送给client数据,client仍然要接受。
  3. Server端发出FIN=1 ack=1的结束连接报文请求。seq = w ack=u+1
  4. client端收到释放连接报文时,发出确认ack = w+1,经过一段时间(2ms,保证client发送的最后一个ack报文能够到达B,本连接持续时间内的所有报文段都从网路中消失),双方断开tcp连接,释放连接上的所有资源(buffer,port,带宽)

拥塞(congestion)控制技术

在现代互联网中,丢包更可能被网络拥塞导致,而不是硬件上的错误
TCP使用丢包率来衡量网络的拥塞程度。通过减少包丢失率来控制拥塞
三种控制拥塞的技术

  • 慢启动
  • 加速递减
  • 拥塞避免

TCP的报文格式(不能叫帧格式。那是数据链路层的术语)

源端口 (2B) 目的端口(2B)+seq (4B)+ack(4B)+headlen(4位)+后续(滑动窗口buffermax :2B 所以是65535个存储单元)

FIN:释放连接
ACK:确认报文 ack字段是否有效
SYN:连接报文

 类似资料: