IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Tcp特点及相关问题 -> 正文阅读

[网络协议]Tcp特点及相关问题

TCP协议有什么特点?

TCP协议是有序的、面向连接的、可靠的字节流传输层协议。

什么是有序?

数据在分组的时候,每一个分组数据会有编序列号,正是因为有序列号,当分组数据合成在一起的时候才能完整的拼在一起。

什么是面向连接?

使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写,TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放资源。

可靠传输通过什么来保证?

1、三次握手建立连接
2、有应答机制,也就是将数据发送给对方后,对方必须回应是否发送成功(应答确认和超时重传)
3、使用窗口滑动机制,根据网络的好坏,控制对方发送的分组数据的大小。

三次握手发生在什么时候?

三次握手发生在客户端执行connect()的时候,该步返回成功,则说明三次握手已经建立。

为什么是三次握手两次不可以是两次?

不可以。举个反例:假设可以是两次握手,客户端在发送一个连接请求报文段之后,此报文段并没有直接到达服务器端,而是在某个网络节点长时间的逗留了,系统会认为它已经失效,此时客户端重新发送请求,当新的请求、连接释放之后,第一次发送的请求又到达了服务器端,此时服务器端会认为是客户端又发起了新的连接请求,会给客户端发送确认报文段,而客户端其实并没有发送这个请求,而是前面滞留的,所以客户端对服务器发送过来的确认报文段不予理睬,也不会发送数据,而服务器端却认为连接已经建立成功,并等待客户端发送过来的数据。这样一来,服务器端的很多资源就会白白浪费。
若采用三次握手,则可以避免上述情况,客户端如果对确认请求不予理睬,服务器端由于收不到确认信息,就知道客户端并没有要建立连接,从而不会白白等待,造成资源的浪费。

三次握手时会出现什么攻击?

比较典型的是syn泛洪攻击,或叫syn溢出攻击。
syn溢出攻击,是出现在第二个阶段,如果客户机伪造出大量第一次sys同步报文,服务器端就会一次消耗很多资源来保存客户端的信息,并进行确认,实际确认是会失败的,但是失败需要一定的时间,因为服务器端会连续多次进行第二次握手确认后才认定失败。那么短时间有大量syn同步报文永祥服务器端,服务器端资源可能会被耗尽,就可能导致正常的客户端得不到响应而连接失败。

四次挥手的过程可以用三次完成吗?

可以。一般在cli端发送请求报文段之后,ser端可以同时发送出SYN+ACK报文,其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,ser端在接收到cli端的请求关闭连接的报文之后,可能不会立即关闭,而是要等到ser端的报文全部发送完成之后才会发送Fin报文,此时只会发送一个ACK报文,因此需要四步挥手。但是,如果在本端关闭连接的同时,恰好又收到了对方的Fin报文,此时就可以把本端的Fin和确认ACK合在一起发送给对方,就可以实现三次挥手。

四次挥手时,会受到什么样的攻击?

详解:https://blog.csdn.net/plokmju88/article/details/103918001.

“滑动窗口机制”工作原理

当网络不好导致数据丢失时

数据每丢失一次,分组字节数减为以前的二分之一。

当网络恢复时

如果目前分组大小<最初大小的二分之一,每成功发送一个字节,字节数增加1倍。
如果目前分组大小>=最初大小的二分之一时,没成功发送一次,分组字节数只增加1字节,增加减缓了,直到恢复到最初分组大小。

什么是应答确认?

当发送端将数据发出之后会等待对短的确认应答。如果有确认应答,说明数据已经成功到达对端,反之,则数据丢失的可能性很大。TCP将每个字节的数据都进行了编号,即为序列号。每一个序列号都带有对应的确认序列号,意思是告诉发送者,我已经受到了哪些数据,下次你从哪里发。

什么是超时重传?

重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过了这个时间仍未收到确认应答,发送端将进行数据重发。
详解:https://blog.csdn.net/qq_43669007/article/details/105460858.

字节流是什么?

流可以看做是一个输出管道,字节流的意思就是说,将由多个字节组成的数据放入到这个管道之中,而且数据分组发送时,分组数据的大小可以以字节为单位进行调整。

为什么要调整分组数据的字节数?该怎样调整?

1、我们前面说过,分组数据的大小是根据网络的好坏来调整的,那么当网络不好时,如果还一昧的发送字节数很大分组数据,就很容易出错。(这就好比道路状况本来就差,却还大量的涌入车辆,就很容易出现交通事故,所以当交通道路状况很差时,就应该及时减少车辆的流入,当路况好时,再增加汽车流量。)
2、TCP在通信时,如果检测到网络不佳,就会减少分组数据的字节数(把分组数据变少),网络状况好转时再逐步增加字节数,总之会根据网络的好坏来调整字节数,这个调整的机制被称为“滑动窗口机制”

什么是TCP粘包?

TCP粘包就是指发送方发送的若干数据到达接收方是粘在了一起,从接受缓冲区来看,后一数据的头紧接着前一数据的尾。
详解:https://blog.csdn.net/weixin_41047704/article/details/85340311.

参考:https://blog.csdn.net/qq_43648751/article/details/105924221.

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:17:32  更:2021-09-30 12:17:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:43:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码