| |
|
开发:
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 :传输控制协议 1.协议格式:
2.协议特性:2.1 面向链接面向链接:通信双方建立连接之后才能进行通信,—>确保通信双方都据有数据收发能力 TCP的链接管理:三次握手建立链接,四次挥手断开链接。 2.1.1三次握手建立连接客户端向服务端请求建立连接: 2.1.1四次挥手断开连接相关问题和知识点:1. 握手为啥三次,挥手是四次?三次握收:双发都需要确定对方是否具有数据收发能力。两次不安全—只能确定服务端在线,客户端可能发送完SYN请求后就下线了。四次没必要—SYN和ACK都是报文中的标志位,分开发送没太大意义,直接将这两个标志位都置为1同时发送即可。 2. 三次握手失败两端是如何处理的?握手失败情况: 3. SYN泛洪攻击是怎么回事?黑客伪造ip不断向服务端发送SYN,但是不进行ACK回复,服务端新创建套接字会不断占用资源,直至枯竭崩溃。所以listen(sockfd,backlog)接口中有backlog参数–新建连接队列–队列满了就不会再新建套接字。处理方法:防火墙–同一ip频繁发送数据则拉黑名单。 4. 一台主机上出现了大量CLOSE_WAIT状态链接是什么原因?CLOSE_WAIT状态是被动关闭方收到FIN请求并进行ACK回复之后进入到的状态。一旦自己发送了FIN(close操作后就会发送FIN)则会进入下一个LAST_ACK状态,因此有大量CLOSE_WAIT,意味着代码中可能没有对连接断开的套接字进行close操作。解决方案就是检查代码。 5. TIME_WAIT状态有什么作用?
6. 一台主机上出现大量TIME_WAIT链接,什么原因,怎么解决?TIME_WAIT是主动关闭方最后一次发送ACK产生的。 7. TCP的保活机制(心跳探测)默认情况:通信双方7200s没有通信,则服务端每隔75s会向客户端发送一个保活探测数据包,要求客户端进行回复,连续9次没有进行回复则认为连接断开。 2.2 可靠传输2.2.1 安全有序传输(保证数据可靠到达对端并且有序进行交付)面向链接(前提):首先确保双方都具有数据收发能力 1. 确认应答机制实现丢包检测功能,接收方针对接收的每一条数据都应该进行确认回复。 2. 超时重传机制发送方等待超时没有得到确认回复,则会对数据包重新传输。超时等待时长会随着网络环境的不同, 是有差异的.如果超时时间设的太长, 会影响整体的重传效率;如果超时时间设的太短, 有可能会频繁发送重复的包; 3. 协议字段中的序号(th_seq)和确认序号(th_ack)进行包序管理,实现有序交付利用==协议字段中的序号(th_seq)和确认序号(th_ack)==进行包序管理,实现有序交付。 4. 协议字段中的校验和校验数据一致性。数据不一致则丢弃,丢弃则无针对此数据的确认回复,对方收不到确认回复则重传此数据;也可直接发送重传请求。 2.2.2 避免没必要的丢包丢包情况:
1. 滑动窗口机制依赖于协议字段中的窗口大小字段实现,避免发送方发送数据过多,接收方来不及处理,缓冲区溢出之后所产生的丢包。 相关概念:
相关协议:
2. 滑动窗口机制拥塞窗口机制:解决网络突然变差产生大量丢包的问题。 2.2.3 提高一些传输性能tcp为了实现可靠传输,牺牲了传输性能,而在传输过程中,有些性能上的损失是没有必要的。 1. 确认序号确认序号标识序号之前的数据都已经收到了,为了避免因为确认应答丢失导致的重传。 2. 快速重传协议在传输过程中,若接收方接收到的数据并非是接收窗口后沿数据,则有理由认为前边发送的数据丢失了,这时候每收到一条数据就会发送一条后沿数据的重传请求,一旦发送方连续收到三条(三条是为了避免数据延迟到达的情况)相同重传请求,则直接对这条数据(确认序号的数据)进行重传。丢包后不用完全等待超时重传,节省时间。 3. 捎带应答机制:接收方对接收到的每一条数据都需要进行确认回复,然而确认回复最主要的信息就是确认序号,因此每一条确认回复都是一个tcp传输,至少是一个空报头(没有实际数据)的传输。如果收到数据后刚好要给对方发送数据,则将及即将要发送的数据和确认回复放到一起进行发送(在要发送的数据报头中加入确认序号)。 4. 延迟应答机制接收方对接收到的每一条数据都需要进行确认回复,其中包含有当前窗口大小字段,如果立即进行回复,窗口大概率是不断减小的,因此延迟进行确认回复,有可能上层将数据取出,维持窗口大小。通过这种方式保证传输吞吐量不会降低。 5. 延迟发送机制tcp传输过程中,如果对每次send的数据直接封装报头进行发送,若发送的数据比较小,但是次数较多,则io次数比较多,效率低。因此延迟发送,将数据在发送缓冲区中先堆积起来,再合适的时候一次性发送,减少了io次数,提高效率。 2.3 面向字节流传输面向字节流传输:可靠的,有序的,双向的,基于连接的,以字节为单位的传输方式。传输时,并不限制上层(send \ recv)发送或者接收的数据大小。tcp延迟发送数据在缓冲区中积攒,基于mss取出合适大小数据进行发送。 3 对应用层编程影响
问题:tcp和udp协议的区别?实现上的区别:协议格式,协议字段不一样。 tcp如何实现可靠传输
udp如何实现可靠传输ud协议本身没有实现可靠传输,需要在应用层手动实现类似tcp的可靠传输机制:确认应答机制,超时重传机制,包序管理。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 2:34:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |