TCP传输控制协议

TCP传输控制协议

内容参考《TCP/IP详解卷1》version2
快速看了一遍,其中关于拥塞控制的相关算法还得进一步学习 😄

引言与TCP概述

单个信道,通信媒介可能会丢失或改变被传递的信息,处理差错的两种方式,使用差错校正码(添加一些冗余的比特,使得即使某些比特被毁,真实的信息也可以被恢复过来)来纠正通信问题;另一种是尝试重新发送直到信息最终被接收,被称为自动重复请求(Automatic Repeat Request,ARQ)

  • ARQ和重传

    简单停-等协议

    允许多个分组同时进入网络会使事情变得复杂。发送方必须决定什么时间注入一个分组到网络中,还要考虑注入多少个,怎么样维护定时器,必须要保存每个还没确认的分组的一个副本以防需要重传。接收方需要一个更复杂的ACK机制:区分哪些分组已经收到,哪些还没有;需要一个缓存机制,维护次序杂乱的分组。其他问题,接收方和发送方的速率不匹配…

  • 分组窗口和滑动窗口

    解决多个分组同时进入网络引发的问题。
    滑动窗口协议:发送方:记录哪些分组可被释放,哪些分组正在等待ACK,以及哪些分组还不能被发送。接收方:记录哪些分组已经被接收和确认,哪些分组是下一步期望的,以及哪些分组即使被接收也将会因内存限制被丢弃。

    问题:窗口应该多大?接收方或网络处理不过来发送方的数据率时会发生什么?

  • 流量控制和拥塞控制

    为了处理当接收方相对发送方太慢时产生的问题,在接收方跟不上时会强迫发送方慢下来,流量控制

    基于速率的流量控制、基于窗口的流量控制。保护接收方

    拥塞控制——保护中间网络涉及发送方减小速度不至于压垮其与接收方之间的网络。

  • 设置重传超时

    让协议去估计,往返时间估计(round-trip-time estimation),这是一个统计过程。总的来说,选择一组RTT样本的均值是最有可能的。注意这个平均值自然会随时间而改变,因为通信穿过的网络的路径可能会改变。

TCP提供了一种面向连接的、可靠的字节流服务。面向连接的是指使用TCP的两个应用程序必须在它们可交换数据之前,通过相互联系来建立一个TCP连接。

TCP头部和封装

基本TCP头部(20字节),头部长度字段以32位字为单位给出头部的大小(最小值是5)。带阴影的字段(确认好、窗口大小、以及ECE位和ACK位)用于与该报文段的发送端关联的相反方向上的数据流

在这里插入图片描述

8位flags

  • CWR——拥塞窗口减(发送方降低它的发送速率)
  • ECE——ECN回显(发送方接收到一个更早的拥塞通告)
  • URG——紧急
  • ACK——确认(连接建立以后一般都是启用状态)
  • PSH——推送(接收方应尽快给应用程序传送这个数据——没被可靠地实现或用到)
  • RST——重置连接(连接取消,经常是因为错误)
  • SYN——用于初始化一个连接的同步序列号
  • FIN——该报文段的发送方已经结束向对方发送数据

最常见的选项字段是“最大段大小”选项,MSS。指定该选项的发送者在相反方向上希望接收到的报文段的最大值。

总结:TCP提供一种可靠、面向连接、字节流、传输层的服务。TCP把应用程序数据组包成报文段、发送数据时设置超时、确认被其他端点接收到的数据,给次序杂乱的数据进行重新排序,丢弃重复的数据,提供端到端的校验和。辅助TCP的功能,滑动窗口,流量控制,拥塞控制。

TCP连接管理

一个TCP连接由一个4元组构成,两个IP地址和两个端口号,即一对套接字(IP地址,端口号)。

一个TCP连接分为3个阶段:启动、数据传输(连接已建立)和退出(关闭)。

  • TCP连接建立

    三次握手,不仅让通信双方了解一个连接正在建立,还在于利用数据包的选项来承载特殊的信息,交换初始序列号。

  • TCP连接关闭

    四次挥手

在这里插入图片描述

  • TCP半关闭

    “我已经完成了数据的发送工作,并发送一个FIN给对方,但是我仍然希望接收来自对方的数据直到它发送一个FIN给我”

    调用shutdown()函数来代替基本的close()函数,就能实现半关闭操作。

  • 同时打开与关闭

  • 初始序列号

    如何避免序列号重叠问题?应用层利用CRC或校验和保证所需数据在传输过程中没有出现任何错误。普遍用于大文件的传输。

    这也体现TCP的脆弱性:如果选择合适的序列号、IP地址、端口号,那么任何人都可以伪造一个TCP报文段,从而打断TCP的正常连接。

  • 连接建立超时

    客户端连接一个不可达的服务端,频繁发送SYN报文段,指数回退。系统可以配置发送初始SYN的次数。Linux系统中,系统配置变量net.ipv4.tcp_syn_retries表示了在一次主动打开申请中尝试重新发送SYN报文段的最大次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值