前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TCP的漫想

TCP的漫想

原创
作者头像
mariolu
修改于 2019-06-13 19:37:24
修改于 2019-06-13 19:37:24
1.5K0
举报

一、一个数据包

路是通的, 而且是双向通的。所以会有tcp的三次握手确认包。一次客户端的syn+一次客户端ack包 = 客户端到服务端的路是通的,反过来亦是如此。TCP涉及阶段:CLOSED, LISTEN, SYN-RECEIVED, SYN-SENT.

1.1 syn包丢失

如果意外情况发生呢。假设客户端到服务端syn包丢失呢。(tcp状态机 切换有个超时时间)。重发间隔有多长,这个时间是数据的ACK包能在这个时间内返回。但是不同的网络环境这个时间也不一样。所以TCP实现的是一个动态的计算时间。每次发包都会计算RTT和偏差值。

1.1.1重传间隔

设定的重发时间间隔会比RTT+偏差的上限略高点。网络包的RTT偏差或者抖动其实是由分段经过不同的路径到达。

如果最初的没有计算,会有个初始值,一般是6s(在哪里查看?)。同时unix的一般最少是0.5s的整数倍。

1.1.2 重传次数和时间限制

问题又来了,如果重发也没用,或许网络真的故障了,那一直按这个时间间隔重传,或者有最多的retry次数吗?后续等待应答的重传时间是以指数级增长,并且有一定最多次数,毕竟超过这个最大限制,网络基本大概率就是不可用的状态。

1.1.3 syn flood攻击

tcp握手完成至此已经建立连接。并处以establiched状态,可能如果syn包在路上丢失呢,如果客户端收到故意不回呢?(syn flood攻击)。因为这个连接标识着(是否在双方机器都有维护一个状态。)tcp连接维护的开销在内核中。

1.2 ack(确认syn)包丢失

假如syn包到底服务端,服务端发送ack包给客户端呢。丢失呢,服务端发送ack包给客户端。第三个握手包(ACK)只关乎是否已经收到第二个握手的syn包,所以只要后面带数据的ack,能ack到syn包,应该没问题

1.2.1 TCP FAST OPEN

. 那既然能发ack,为什么不和后面的数据包一起发送呢,这样相当于2个RTT之后就进入数据传输阶段。如果开启了TCP fast open确实可以这样。但是这是一个可选功能。

1.2.2 伪造ack序列号或者缺失序列号

TCP:遇到非法、伪造的syn的ack包,会做什么处理。或者没有携带序列号,或者序列号不对,这些协议栈都是不会建立连接的。

1.2.3 四次握手

还有个问题服务端的SYN和ACK可以分开发吗。比如这种双方都主动打开,当然也是有可能的,这个就是四次握手。

四次握手
四次握手

1.3 连接创建后:

1.3.1 URG位需要紧急处理的数据

URG对应的URG数据指针,从数据部分的首位到紧急指针所指向的位置为止都为紧急数据。那么应用一般什么情况会触发紧急数据呢,一般在暂停通信的场合用的多,比如浏览器的停止按钮,telnet的ctrl+c

二、多个数据包

2.1 大数据包分组

如果是大数据包怎么办,TCP数据还是得依托IP层发送,所以IP层的分组是有控制的,分片太小容易引人多余的IP头带宽开销,所以这个最大消息长度(MSS,Max Segment Size)就是以IP层分片载荷的最大大小。

这个MSS在TCP建连协商中会进行沟通。双方会取最小值。

每个数据包大小也不一样。无限长或者不知道长度的数据包怎么办?联想到http的chunk协议。同样地tcp也是用基本单位来确定 数据包。每次读到MSS(Max Segment Size)。每片MSS带有唯一的序号,在发送或者数据丢失重发是最小的单位。MSS多大呢,当然得是同时满足双方的最大要求,这得益于双方syn包建立创建的协商双方协商的最小。

2.2 有序

多个数据包肯定是有序的(后面发送的内容 接收端不能提前到)。方法是给每个数据包编号。

2.2.1 一次发送一次ACK

接下来怎么保证有序性呢,最简单的想法就是一次发送,一次ack,这样保证前面的肯定是已经确认发送成功的数据。这个就有个问题了,假设双方的通信距离很长,那么一次发送一个分片数据,至少等一个RTT。发送端发完数据包,就是无尽的等待ack的到来。

2.2.2 滑动窗口

改善的窗口,一次可以发送多个分片数据,并且最快只需要等待接近一个RTT的时间确认这一坨多片数据全部被接收到。问题来了,如果窗口内数据乱序怎么办,如果数据部分丢失怎么办(tcp接收端源码是怎么实现的,控制这个逻辑)

增强型的部分ack,窗口内的数据只需要传输最大的那片ack。最大的那片ack代表以前的序号全部被接收完全。

2.3 丢失保障

2.3.1快速重传机制

如果某个包丢失了,那么当tcp收到的包不是他期待的那个序号,那么他会发一个期待的ack给发送端(此时应该是第二遍发送这个序号的包了,第一次这个序号是正常的,不包括这次算3次,乱序和重传的差别,为什么是3次,有可能是乱序造成的重传,2次必定是乱序)。那么发送端如果连续两次,会重发吗,为什么会,为什么不会?如果继续收到

2.3.2 乱序

由于接收端性能原因,丢包或者乱序,或者应用程序延迟响应,数据丢失造成带宽浪费。所以有一种机制让发送端发送接收端所能接收的数据流。流控制。窗口大小包,更新窗口大小值。窗口探测包。

2.3.3 其他手段:

慢启动解决拥塞问题。

ngeal算法,延迟确认应答,捎带应答

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《计算机网络传输层 TCP协议》
每个TCP报文段由固定的20Byte头部组成,TCP报文头部 选项可以跟在固定标头之后。 带有标头,使其最多可以标记 65535 个数据字节。
梅花
2021/11/11
7210
《计算机网络传输层 TCP协议》
33 张图详解 TCP 和 UDP :打通网络和应用的中间人
前面说过,传输层的作用是建立应用程序间的端到端连接,为数据传输提供可靠或不可靠的通信服务。传输层有两个重要协议,分别是 TCP 和 UDP。TCP 是面向连接的可靠传输协议,UDP 是无连接的不可靠传输协议。
程序员小富
2021/07/15
1.4K0
33 张图详解 TCP 和 UDP :打通网络和应用的中间人
TCP协议详解
小到基于应用层做网络开发,大到生活中无处不在的网络。我们在享受这个便利的时候,没有人会关心它如此牢固的底层基石是如何搭建的。而这些基石中很重要的一环就是tcp协议。翻看一下“三次握手”和“四次挥手”,本以为这就是tcp了,其实不然。它仅仅解决了连接和关闭的问题,传输的问题才是tcp协议更重要,更难,更复杂的问题。回头看tcp协议的原理,会发现它为了承诺上层数据传输的“可靠”,不知要应对多少网络中复杂多变的情况。简单直白列举一下:
kinnylee
2020/10/15
1K0
TCP协议详解
面试必备!TCP协议经典十五连问!
TCP协议是大厂面试必问的知识点。整理了15道非常经典的TCP面试题,希望大家都找到理想的offer呀
捡田螺的小男孩
2021/07/19
1.4K0
面试反客为主 TCP
承接上文 HTTP,数据经过应用层就到传输层,但数据到传输层之前需要先获得服务端的 IP 地址,这就涉及到 DNS 域名解析。
sowhat1412
2022/09/20
3260
面试反客为主 TCP
tcpip四次握手三次挥手_tcp四次挥手的全过程
After IP adds a header to the TCP segments the resulting IP datagrams are sent one-by-one to the “Ethernet layer”. Note that TCP/IP are part of operating system, while most functionality of Ethernet is implemented on the NIC(Network Interface Card).
全栈程序员站长
2022/11/15
3730
tcpip四次握手三次挥手_tcp四次挥手的全过程
TCP/IP第四层--传输层TCP和TPC数据报文详解
与UDP不同的是,TCP提供了一种面向连接的、可靠的字节流服务。TCP是如何实现可靠连接?
黄规速
2022/04/14
3.6K0
TCP/IP第四层--传输层TCP和TPC数据报文详解
一文带你搞定TCP面试(一)
TCP是面向连接的(只能一对一)、可靠的(确保每一个报文都能到达接收端)、基于字节流(保证字节的有序性,自动去除重复字节)的传输层通信协议。
shysh95
2021/12/09
6650
一文带你搞定TCP面试(一)
1万字30张图说清TCP协议
TCP(Transmission Control Protocol 传输控制协议)是一种基于IP的传输层协议,TCP协议面向连接、正面确认与重传、缓冲机制、流量控制、差错控制、拥塞控制,可保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。
网络工程师笔记
2021/05/17
1.6K0
1万字30张图说清TCP协议
【Linux】: 传输层协议 TCP
🔥 之前在这篇文章 传输层协议 UDP 中已经说过关于传输层的部分内容,现在我们来了解一下传输层 TCP 的内容吧
IsLand1314
2025/02/20
4130
【Linux】: 传输层协议 TCP
【网络协议】万文长篇,带你深入理解 TCP;场景复现,掌握鲜为人知的细节(上)
传输控制协议(TCP,Transmission Control Protocol) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的 RFC 793 定义;
sidiot
2023/08/31
2.8K0
【网络协议】万文长篇,带你深入理解 TCP;场景复现,掌握鲜为人知的细节(上)
图解TCP,UDP,流量控制,拥塞控制,一次看懂
TCP 发送方的发送窗口大小 = Math.min(自身拥塞窗口大小, TCP 接收方的接收窗口大小)
入门笔记
2022/11/14
6740
图解TCP,UDP,流量控制,拥塞控制,一次看懂
深入理解TCP
TCP是面向连接的传输层层协议,可以为应用层提供可靠的数据传输服务。所谓的面向连接并不是真正意思上的连接,只不过是在发送数据之前,首先得相互握手,也就是说接收方知道你要发数据给它了。
Helloted
2022/06/06
5330
深入理解TCP
简单聊聊TCP协议的流程图解
TCP是面向连接的协议,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立确保数据传输的参数。它有以下几个特点:
烂猪皮
2021/12/04
2K0
简单聊聊TCP协议的流程图解
在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP
如果对网络工程基础不牢,建议通读《细说OSI七层协议模型及OSI参考模型中的数据封装过程?》
周陆军
2018/11/14
1.6K0
网络知识扫盲:扒开 TCP 的外衣,我看清了 TCP 的本质
从阅读和在看数来看,大家对这个系列还是比较期待的,所以这周我全身心地投入本篇文章的编写,用了整整 4个晚上的时间梳理了这篇关于 TCP 的重点知识,另外还参考 小林 coding 的文章配图,用了一天的时间自己制作了 TCP 三次握手和四次挥手的图解,对你理解 TCP 连接一定会有帮助。
Python进阶者
2021/01/25
7650
网络知识扫盲:扒开 TCP 的外衣,我看清了 TCP 的本质
TCP 技术白皮书
AIMD :Additive Increase Multiplicative Decrease 加性增,乘性减
利又德智能感知
2022/12/28
5760
告别 TCP!
我第一次写 TCP 文章是这篇:硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
小林coding
2022/04/07
8180
告别 TCP!
万字图解 | 深入揭秘TCP工作原理
大家好,我是「云舒编程」,今天我们来聊聊计算机网络面试之-(传输层tcp)工作原理。
公众号 云舒编程
2024/01/25
1.5K0
万字图解 | 深入揭秘TCP工作原理
【RL-TCPnet网络教程】第12章 TCP传输控制协议基础知识
本章节为大家讲解TCP(Transmission Control Protocol,传输控制协议),通过本章节的学习,需要大家对TCP有个基本的认识,方便后面章节TCP实战操作。
Simon223
2018/09/04
4360
【RL-TCPnet网络教程】第12章  TCP传输控制协议基础知识
相关推荐
《计算机网络传输层 TCP协议》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档