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不会对传送后的情况置之不理,它一定会向对方确认是否成功送达. 注:握手过程中使用 ...
随机推荐
- day93:flask:
目录 1.HTTP的会话控制 2.Cookie 3.Session 4.请求钩子 5.捕获错误 6.上下文:context 7.Flask-Script 1.HTTP的会话控制 1.什么是会话控制? ...
- 算法题目:北邮python 3-C 排队前进
一道python作业的题目,比较有意思,题目如下: 题目描述 有 n 个人排队向一个方向前进,他们前进的速度并不一定相同. 最开始即 t=0 时,每个人的位置并不相同.可以把他们放在数轴上,设他们前进 ...
- 数据结构实训——哈夫曼(Huffman)编/译码器
题目4.哈夫曼(Huffman)编/译码器(限1人完成) [问题描述] 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本.但是,这要求在发送端通过一个编码系统对待传数据预先 ...
- 蓝鲸平台开启consul.conf UI界面
#第一步: vi /data/bkce/etc/supervisor-consul.conf 修改参数: command=/usr/bin/consul agent -config-file=/dat ...
- 面试必看!靠着这份字节和腾讯的面经,我成功拿下了offer!
准备 敲定了方向和目标后就开始系统准备,主要分为以下几个方面来准备. 算法题 事先已经看过别人的社招面经知道头条每轮技术面都有算法题,而这一块平时练习的比较少,校招时刷的题也忘记了很多.因此系统复习的 ...
- 使用 Docker 部署 Spring Boot 项目,带劲!!
上一篇:年轻人的第一个 Docker 应用 Docker 一次构建.处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程 ...
- FL Studio录制面板作用介绍
在上一节教程中我们详细的讲解了一下FL Studio录制面板菜单的一些功能,今天我们将继续讲解该面板的知识.具体内容小编这里就不多说了,还是一起来看看吧! 1.录音倒数.该按钮在打开的情况下会在录音前 ...
- Camtasia中如何自定义视频输出格式
Camtasia Studio是一款功能全面.操作简单的视频录制和编辑软件,它是很多需要进行录屏操作,比如制作教学视频的用户的不错选择.Camtasia 2020还为用户提供了极大的便利的全面的服务, ...
- 人人都能学会系列之ThreadLocal
1.概览 本文我们来看下java.lang包中的ThreadLocal,它赋予我们给每个线程存储自己数据的能力. 2.ThreadLocal API ThreadLocal允许我们存储的数据只能被特定 ...
- Hadoop优化之数据压缩
bBHadoop数据压缩 概述 运行hadoop程序时,I/O操作.网络数据传输.shuffle和merge要花大量的时间,尤其是数据规模很大和工作负载密集的情况下,这个时候,使用数据压缩可以提高效率 ...