| |
|
开发:
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、TCP是传输控制协议,连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务 2、TCP是一个可靠的、全双工的协议,并且提供排序、确认等机制,双方会相互确认 3、TCP和UDP的比较
二、TCP的三次握手1、三次握手过程 ①第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认 ②第二次握手:服务器收到syn包,必须确认客户端的syn(ack=x+1),同时自己也发送一个syn包(seq=y),即syn+ack包,此时服务器进入SYN_RECV状态 ③第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=y+1),此包发送完毕,客户端和服务器端进入Established状态,完成三次握手建立连接 2、TCP握手为什么是三次,而不是二次或四次呢? ①二次握手会导致失效的连接请求报文段被服务器端接收,从而产生错误 ②四次握手是可以的,但发送四次是资源的浪费 三、TCP的四次挥手1、四次挥手过程 ①第一次挥手:客户端发送FIN(seq=u),发送完毕后,客户端进入FIN_WAIT_1状态 ②第二次挥手:服务器端发送ACK确认报文(ack=u+1,seq=v),发送完毕后服务器端进入CLOSE_WAIT状态,客户端收到这个确认包后进入FIN_WAIT_2状态 ③第三次挥手:服务器端发送FIN包(seq=w),发送完毕后,服务器端进入LAST_ACK状态,等待来自客户端的最后一个ACK ④第四次挥手:客户端发送ACK包(seq=u+1,ack=w+1),并进入TIME_WAIT状态,等待了某个固定时间(两个最大段生命周期,2MSL)之后,没有收到服务器的ACK,认为服务器已经正常关闭连接,于是自己也关闭连接,进入CLOSED状态。而服务器接收到这个确认包之后,关闭连接,进入CLOSED状态。此时,四次挥手完成并关闭连接 2、TCP四次挥手为什么需要四次呢? 其实是客户端和服务器端的两次挥手,也就是客户端和服务器端分别释放连接的过程。在四次挥手中双方发FIN的过程, ①关闭连接时,客户端向服务器端发送FIN时,仅仅表示客户端不再发送数据了,但是还能接收数据 ②服务器端收到客户端的FIN报文时,先回一个ACK应答报文,而服务器端可能还有数据需要处理和发送,等服务器端不再发送数据时,才发送FIN报文给客户端来表示同意现在关闭连接 3、TCP四次挥手过程中,为什么需要等待2MSL,才进入CLOSED关闭状态? ①为了保证客户端发送的最后一个ACK报文段能够到达服务器端,从而让服务器端能够按照正常的步骤进入CLOSED状态 ②防止已失效的连接请求报文段出现在本连接中 四、TCP的粘包和拆包1、一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送 2、粘包产生的情况 ①要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包 ②接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包 3、拆包产生的情况 ①要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包 ②待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包 3、解决方案 发送端将每个数据包封装为固定长度,在数据尾部增加特殊字符将数据分为两部分,一部分为头部,一部分为内容体;其中头部结构大小固定,且有一个字段声明内容体的大小 五、TCP的流量控制1、TCP通过滑动窗口机制来控制流量 2、TCP头部有一个字段为win(窗口大小),它告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度,从而达到流量控制的效果 3、TCP的窗口机制有两种,一个是固定窗口,一个是滑动窗口。数据在传输时,TCP会给所有数据进行编号,发送方在发送过程中始终保持着一个窗口,只有落在发送窗口的数据帧才允许被发送;同时接收方也始终保持着一个接收窗口,只有落在窗口内的数据才会被接收。这样通过改变发送窗口和接收窗口的大小就可以实现流量控制 六、TCP的拥塞控制tcp的拥塞控制有这几种算法:慢启动、拥塞避免、快重传、快恢复 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/25 18:24:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |