tcp/ip原理/三次握手/四次挥手
@ tcp/ip原理
1.1 tcp/ip三次握手

1.1.1 建立过程说明
a) 由主机A发送建立TCP连接的请求报文, 其中报文中包含seq序列号, 是由发送端随机生成的, 并且还将报文中SYN字段置为1, 表示需要建立TCP连接。
b) 主机B会回复A发送的TCP连接请求报文, 其中包含seq序列号, 是由回复端随机生成的, 并且将回复报文的SYN字段置为1, 而且会产生ACK字段, ACK字段数值是在A发过来的seq序列号基础上加1进行回复,以便A收到信息时, 知晓自己的TCP建立请求已得到了验证。
c) A端收到B端发送的TCP建立验证请求后, 会使自己的序列号加1表示, 并且再次回复ACK验证请求, 在B端发送过来的seq基础上加1, 进行回复。
1.1.2 简述说明
- 在最开始, 客户端和服务器都处于CLOSED状态。
- 服务器会创建socket文件开始监听, 服务器状态处于LISTEN。
- 客户端向服务器发送SYN, 请求建立连接, 发完之后自己的状态变为SYN_SENT。
- 服务器收到客户端发来的SYN, 然后会回复ACK和SYN, 发完之后自己的状态变为SYN_RECV
- 客户端收到服务器发来的SYN和ACK之后会马上回复ACK, 回复完之后状态变为ESTABLISHED。
- 服务器端收到客户端发来的ACK之后会直接进入ESTABLISHED
至此, 三次握手完成, 连接建立。
1.2 tcp/ip 四次挥手

1.2.1 断开过程说明
a) 主机A发送断开TCP连接请求的报文, 其中报文中包含seq序列号, 是由发送端随机生成的, 并且还将报文中FIN字段置为1, 表示需要断开TCP连接。
b) 主机B会回复A发送的TCP断开请求报文, 其中包含seq序列号, 是由回复端随机生成的, 而且会产生ACK字段, ACK字段数值, 是在A发过来的seq序列号基础上加1进行回复, 以便A收到信息时, 知晓自己的TCP断开请求已得到了验证。
c) 主机B在回复完A的TCP断开请求后, 不会马上就进行TCP连接的断开, 主机B会先确保断开前, 所有传输到A的数据是否已经传输完毕, 一旦确认传输数据完毕就会将回复报文的FIN字段置为1, 并产生随机seq序列号。
d) 主机A收到主机B的TCP断开请求后, 会回复主机B的断开请求, 包含随机生成的seq字段和ack字段, ack字段会在主机B的TCP断开请求的seq基础上加1, 从而完成主机B请求的验证回复。
1.2.2 简述说明
- 客户端发送一个FIN并进入FIN_WAIT_1状态, 并包括一个序号X。
- 服务端接收到客户端发送的FIN, 然后回复ACK确认号X+1和已方的序号Y给客户端, 此时服务端进入CLOSE_WAIT状态, 客户端收到服务端的ACK后, 进入FIN_WAIT_2状态。
- 服务端发送一个FIN给客户端, 包括ACK确认号X+1和已方的一个序号Y, 并进入LAST_ACK状态。
- 客户端收到服务端发送的FIN, 然后回复ACK确认号Y+1和已方的序号X+1给服务端, 此时客户端进入TIME_WAIT状态, 经过2MSL时间后关闭连接, 服务端收到客户端的ACK后, 关闭连接。
1.3 tcp/ip状态集
1.3.1 十一种状态集介绍
|
Status |
Description |
|
LISTEN |
服务启动后首先处于侦听LISTENING状态 |
|
SYN_SENT |
在发送连接请求后等待匹配的连接请求。通过connect()函数向服务器发出一个同步SYNC信号后进入此状态 |
|
SYN_RECEIVED |
已经收到并发送同步SYNC信号之后等待确认ACK请求 |
|
ESTABLISHED |
连接已经建立, 表示2台机器可以相互通信, 此时连接两端是平等的 |
|
FIN_WAIT_1 |
主动关闭端调用close()函数发出FIN请求包, 表示本方的数据发送全部结束, 等待TCP连接另一端的确认包或FIN请求包 |
|
FIN_WAIT_2 |
主动关闭端在FIN_WAIT_1状态下收到确认包, 进入等待远程TCP的连接终止请求的半关闭状态, 这时可以接收数据, 但不再发送数据 |
|
CLOSE_WAIT |
被动关闭端接到FIN后, 就发出ACK以回应FIN请求, 并进入等待本地用户的连接终止请求的半关闭状态, 这时可以发送数据, 但不再接收数据 |
|
CLOSING |
在发出FIN后, 又收到对方发来的FIN后, 进入等待对方对连接终止FIN的确认ACK的状态, 少见 |
|
LAST_ACK |
被动关闭端全部数据发送完成之后, 向主动关闭端发送FIN, 进入等待确认包的状态 |
|
TIME_WAIT |
主动关闭端接收到FIN后, 就发送ACK包, 等待足够时间(2倍MSL时间)以确保被动关闭端收到了终止请求的确认包 |
|
CLOSED |
连接关闭, 代表双方无任何连接状态 |


参考链接:
http://www.4e00.com/blog/linux/2016/08/06/tcp-open-and-close.html
tcp/ip原理/三次握手/四次挥手的更多相关文章
- Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)
Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: ...
- TCP/IP报文 三次握手 四次挥手
1.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序 ...
- TCP/IP,三次握手四次挥手,TCP/UDP , HTTP/HTTPS
internet:通用名词,由多个计算机网络组成的网络,网络间的通信协议是任意的 Internet:专用名词,当前全球最大的开放计算机网络,采用TCP/IP协议族作为通信的规则.www万维网是广泛应用 ...
- TCP/IP的三次握手, 四次挥手
三次握手: 1. X初始序号, SYN: , 发送 将syn=1, X发送至client 2. 服务器发送 ACK(确认包)=1, SYN=1, 接受顺序号(acknowledge number ...
- python摸爬滚打之----tcp协议的三次握手四次挥手
TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...
- http协议tcp协议ip协议三次握手四次挥手,为什么三次握手,为什么四次挥手,sockete套接字理解
1.1 TCP是什么? TCP是Tranfer Control Protocol的简称,TCP协议是一种面向连接的.可靠的.基于字节流的运输层通信协议.通过TCP协议传输,得到的是一个顺序的无差错的数 ...
- 通俗理解TCP/IP协议三次握手四次分手流程
转自:https://blog.csdn.net/special23/article/details/54137298 三次握手流程 客户端发个请求“开门呐,我要进来”给服务器 服务器发个“进来吧,我 ...
- OSI七层协议&TCP协议(三次握手四次挥手)
今日内容 python 基础回顾 软件开发架构 网络理论前戏 OSI 七层协议(五层) TCP协议 三次握手与四次挥手 UDP协议 内容详细 一.python 基础回顾 1.基本数据类型 整型 int ...
- 关于TCP传输的三次握手四次挥手策略
简单小总结: 一般为了能够准确无误地把数据送达目标处,TCP协议采用了三次握手策略.用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达. 注:握手过程中使用 ...
随机推荐
- 没找到Wkhtmltopdf,报表会被显示为html
windows10 odoo 打印报表时提示 没找到Wkhtmltopdf,报表会被显示为html 现象 原因 没有安装Wkhtmltopdf,没有配置环境变量,odoo在电脑系统中找不到Wkhtml ...
- Qt QPainter画个球啊
Qt QPainter画个球啊 目录 Qt QPainter画个球啊 看效果 方法 代码 看效果 方法 使用绘图事件,绘制一个图形 使用定时事件,不停更新图形位置 代码 .h #pragma once ...
- kali 系列学习03 - 主动扫描
主动扫描首先考虑使用代理IP保护自己,其次掌握 Nmap 工具使用 第一部分 扫描对方时,最好隐藏一下自己root@kali:/etc# service tor statusUnit tor.serv ...
- 详讲FL Studio通道设置菜单
我们在FL Studio"通道设置按钮"上右击鼠标就会弹出一个设置菜单,它包含了通道操作的各种常用命令.下文小编将会为大家详细讲解这些命令的具体作用,一起来学习吧! 1.首先,我们 ...
- 二 HTML文档基本结构
2.1 HTML5文档结构: HTML5文档结构包括头部(head).主体(body)两大部分. 2.1.1<!DOCTYPE>声明 引用官方的DTD文件,在HTML5之前版本,如xHTM ...
- JavaSE 学习笔记05丨泛型、集合
Chapter. 10 泛型 10.1 泛型程序设计 泛型,指可以在类或方法中预支地使用未知的类型.泛型程序设计(Generic programming),意味着编写的代码可被很多不同类型的对象所重用 ...
- dubbo协议之编码请求对象体
上节我们看了如何编码请求头,这节一起看下过程中,对请求对象的编码,涉及对接口,方法,方法参数类型,方法参数进行编码,DubboCodec中重写了这个方法: request.getData向下转型成Rp ...
- Java多线程中的wait/notify通信模式
前言 最近在看一些JUC下的源码,更加意识到想要学好Java多线程,基础是关键,比如想要学好ReentranLock源码,就得掌握好AQS源码,而AQS源码中又有很多Java多线程经典的一些应用:再比 ...
- 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境
写在前面 最近在 K8S 1.18.2 版本的集群上搭建DevOps环境,期间遇到了各种坑.目前,搭建环境的过程中出现的各种坑均已被填平,特此记录,并分享给大家! 文章和搭建环境所需要的yml文件已收 ...
- CenOS下载离线依赖包神器--yumdownloader
Blog:博客园 个人 本文只总结一些常用的用法,更详细的说明见man yumdownloader和 info yumdownloader. 概述 有时候所在服务器环境不能访问外网,yum安装会感到非 ...