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的概述

1、TCP是传输控制协议,连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务

2、TCP是一个可靠的、全双工的协议,并且提供排序、确认等机制,双方会相互确认

3、TCP和UDP的比较

TCP

UDP

是否连接

面向连接

无连接

是否可靠

可靠传输,使用流量控制和拥塞控制

不可靠传输

连接对象个数

只能一对一通信

支持一对一,一对多,多对一,多对多交互通信

传输方式

面向字节流

面向报文

首部开销

首部开销最小20字节,最大60字节

首部开销小,仅8字节

传输速度

传输慢

传输快

适用场景

适用于要求可靠传输的应用,例如文件传输

适用于实时应用,ip电话、视频会议、直播等

二、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的拥塞控制有这几种算法:慢启动、拥塞避免、快重传、快恢复

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:56:36  更:2022-10-22 22:00:14 
 
开发: 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年9日历 -2024/9/19 10:08:54-

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