| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> ?TCP、UDP、HTTP带你玩个明白,适合初学者?? -> 正文阅读 |
|
[网络协议]?TCP、UDP、HTTP带你玩个明白,适合初学者?? |
目录 ? ? ? ? 窗口数据的计算过程:?????????????????? 简介本文章是我自己在自学网络方面所记录的笔记,现在分享给大家,有不懂或没学过的以及想学习了解网络这方面的知识的猿友们,可以耐心的看看这篇文章,主要讲解TCP、UDP、HTTP三个协议。 TCPTCP的三次握手? ? ? ? 握手是为了建立连接,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 TCP的Flags
TCP的主要流程详解? ? ? ? 流程图???????? ? ? ? ? ? ?主要流程? ? ? ? ? ? ? ? 第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; ? ? ? ? ? ? ? ? 第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; ? ? ? ? ? ? ? ? 第三次握手:客户端收到武器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHEN(established)状态,完成 三次握手。 为什么需要三次握手才能建立起连接?? ? ? ? 为了初始化Sequence Number的初始值。 首次握手的隐患----SYN超时的原因及防护措施。? ? ? ? 问题起因分析:? ? ? ? ? ? ? ? Server收到Client的SYN。回复SYN-ACK的时候未收到ACK确认,Server不断充实直至超时,Linux默认等待63秒才断开连接。Liunx默认重发次数为5次,重发次数时间翻倍。? ? ? ? ? ? ? ? ? 1s-->2s-->4s-->8s-->16s:31s;第五次还需要等待32s。 ? ? ? ? 针对SYN Flood 的防护措施:? ? ? ? ? ? ? ? SYN队列满后,通过tcp_syncookies参数回发SYN Cookie(原地址端口+目标地址端口+时间戳),Sequence Number简称SYN Cookie。 ? ? ? ? ? ? ? ? 若为正常连接则Client会回发SYN Cookie,直接建立连接。 建立连接后,Client出现故障怎么办?? ? ? ? 保活机制:向对方发送保活探测报文,如果未收到相应则继续发送尝试次数达到保活探测数仍未收到响应则中断连接。 TCP四次挥手? ? ? ? 挥手是为了终止连接。 ? ? ? ? 流程图???????? ? ? ? ? ?主要流程? ? ? ? ? ? ? ? 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态; ? ? ? ? ? ? ? ? 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为 收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态; ? ? ? ? ? ? ? ? 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态; ? ? ? ? ? ? ? ? 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 为什么会有TIME_WAIT状态?? ? ? ? 原因: ? ? ? ? ? ? ? ? 确保有足够的时间让对方收到ACK包; ? ? ? ? ? ? ? ? 避免新旧连接混淆。 为什么需要四次握手才能断开连接?? ? ? ? 因为全双工,发送方和接受方都需要FIN报文和ACK报文 服务器出现大量CLOSE_WAIT状态的原因是什么?? ? ? ? 对方关闭socket连接,我方忙于读或写,没有及时关闭连接。 ? ? ? ? 检查代码,特别是释放资源的代码 ? ? ? ? 检查配置,特别是处理请求的线程配置 TCP的滑动窗口? ? ? ? RTT和RTO:? ? ? ? ? ? ? ? RTT:发送一个数据包到收到对应的ACK,所花费的时间 ? ? ? ? ? ? ? ? RTO:重传时间间隔,通过RTT计算出来的 ? ? ? ? TCP使用滑动窗口做流量控制与乱序重排:? ? ? ? ? ? ? ? 保证TCP的可靠性 ? ? ? ? ? ? ? ? 保证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年12日历 | -2024/12/28 20:20:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |