TCP基础知识总结_tcp交互储存数据(1)

TCP与UDP一样,都是传输层的协议,但是提供的服务却大不相同,UDP为上层应用提供的是一种不可靠、无连接的服务,而TCP则提供一种面向连接、可靠的字节流传输服务,TCP让两个主机建立连接的关系,应用数据以数据流的形式进行传输。
TCP先后发出的数据在网络中虽然也是互不相干的传输,但是这些数据本身携带的信息却是紧密联系的,TCP协议会给每个传输的字节进行编号,当然,两个主机方向上的数据编号是独立的,在传输的过程中,发送方把数据的起始编号与长度放在TCP报文中,在接收方将所有数据按照编号组装起来,然后返回一个确认,当所有数据接收完成之后才将数据递交到应用层中。

2. TCP的特性

2.1 连接机制

TCP是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一个连接,否则将无法发送数据,一个TCP连接必须有双方IP地址端口号

2.2 确认与重传

一个完整的TCP传输必须有数据的交互,接收方在接收到数据之后必须进行正面确认,向发送方报告接收的结果。
而发送方在发送数据之后必须等待接收方的确认,同时发送的时候会启动一个定时器,在指定超时时间内没有收到确认,发送方会认为发送失败。然后进行重发操作,这就是重传报文。
TCP提供可靠的传输层,但它依赖的是IP层的服务,IP数据报的传输是无连接、不可靠的,因此它要通过确认来知道接收方确实已经收到数据了。但数据和确认都有可能会丢失,因此TCP通过在发送时设置一个超时机制(定时器)来解决这种问题,如果当超时时间到达的时候还没有收到对方的确认,它就重传该数据。

2.3 缓冲机制

在发送方想要发送数据的时候,由于应用程序的数据大小、类型都是不可预估的,而TCP协议提供了缓冲机制来处理这些数据。如在数据量很小的时候,TCP会将数据存储在一个缓冲空间中,等到数据量足够大的时候再进行发送数据,这样能提高传输的效率并且减少网络中的通信量。在数据发送出去的时候并不会立即删除数据,还是让数据保存在缓冲区中,因为发送出去的数据不一定能被接收方正确接收,它需要等待到接收方的确认再将数据删除。同样的,在接收方也需要有同样的缓冲机制,因为在网络中传输的数据报到达的时间是不一样的,而且TCP协议还需要把这些数据报组装成完整的数据,然后再递交到应用层中。

2.4 全双工通信

TCP协议是一个全双工的协议,在TCP连接建立后,那么两个主机就是对等的,任何一个主机都可以向另一个主机发送数据,数据是双向流通的。
一般来说,TCP协议的确认是通过捎带方式来实现的,即接收方把确认信息放到反向传来的数据报文中,不必单独为确认信息申请一个报文,捎带机制减少了网络中的通信流量。

2.5 流量控制

TCP提供了流量控制服务(flow-control service)以消除发送方使接收方缓冲区溢出的可能性。流量控制是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读取速率相匹配。TCP协议中使用滑动窗口的流量控制方法。
TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制,它用于给发送方一个提示:接收方还能接收多少数据,接收方会将此窗口值放在TCP报文的首部中的窗口字段,然后传递给发送方,这个窗口的大小是在发送数据的时候动态调整的。

2.6 差错控制

除了确认与重传之外,TCP协议也会采用校验和的方式来检验数据的有效性,主机在接收数据的时候,会将重复的报文丢弃,将乱序的报文重组,发现某段报文丢失了会请求发送方进行重发,因此在TCP往上层递交的数据是顺序的、无差错的完整数据。

2.7 拥塞控制

如果一个主机以很大的流量给另一个主机发送数据,但是其中间的路由器通道很小,无法承受这样大的数据流量的时候,就会导致拥塞的发生,这样就导致了接收方无法在超时时间内完成接收(接收方此时完全有能力处理大量数据),而发送方又进行重传,这样就导致了链路上更加拥塞。
因此发送方必须实现一定的自适应机制,在网络中拥塞的情况下调整自身的发送速度,这种形式对发送方的控制被称为拥塞控制

3. 端口号的概念

TCP协议的连接是包括上层应用间的连接,简单来说,TCP连接是两个不同主机的应用连接,而传输层与上层协议是通过端口号进行识别的,端口号的取值范围是0~65535,这些端口标识着上层应用的不同线程。一个主机内可能只有一个IP地址,但可能有多个端口号,每个端口号表示不同的应用线程。
TCP协议常用的端口号如下表所示:

端口号协议说明
20/21FTP文件传输协议
23Telnet终端远程登录
25SMTP简单邮件传输协议
69TFTP普通文件传输协议
80HTTP超文本传输协议
110POP3邮局协议版本3

4. TCP报文段结构

4.1 TCP报文段的封装

TCP报文段依赖IP协议进行发送,因此TCP报文段封装在IP数据报中,IP数据报封装在以太网帧中,TCP报文段经过了两次的封装,然后发送出去,具体见下图:

TCP报文段的封装

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

、实战项目、大纲路线、讲解视频,并且后续会持续更新**

需要这份系统化的资料的朋友,可以点击这里获取!

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值