TCP/IP 三次握手四次挥手
TCP运输连接
TCP连接建立过程中要解决以下三个问题:
(1)要使每一方能够确知双方的存在。
(2)要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。
(3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
连接建立、数据传送和连接释放
A:客户 B:服务器
A主动打开连接,B被动打开连接。
1.B的TCP服务器进程先创建传输控制块TCB,准备接收客户进程的连接请求。服务器进程处于LISTEN(收听)状态,等待客户进程的连接请求。
2.A的TCP客户进程创建传输控制模块TCB,然后向B发出请求连接报文段,这时首部同步位 SYN=1,同时选择一个初始序号 seq = x。TCP规定,SYN报文段(即 SYN=1 的报
文段)不能携带数据,但是要消耗掉一个序号。此时TCP客户进程进入SYN-SENT(同步已发送)
状态。
3.B收到请求连接报文段后,如果同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号 ack = x+1,而自己的序号seq = y。 此报文段也不能携带
数据,但同样要消耗掉一个序号。这时TCP服务器进程进入SYN-RCVD(同步收到)状态。
4.TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack = y+1,而自己的序号seq = x+1。TCP的标准规定,ACK报文段可以携带数据。但如果
不携带数据则不消耗序号,这种情况下,下一个数据报文段的序号仍然为seq=x+1。这时,TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态。
以上连接建立过程被称为三次握手
TCP连接释放
1.A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的终止控制位FIN置1,其序号seq = u,它等于前面已传送过
的数据的最后一个字节的序号加1。这时A进入FIN-WAIT-1(终止等待1)状态,等待B的确认。 (FIN报文段即使不携带数据也会消耗掉一个序号)
2.B收到连接释放报文段后即发出确认请求,确认号是ack = u+1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后B就进入CLOSE-
WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭(half-close),即A已经没有数据
要发送了,但B若发送数据,A仍要接收。也就是说B到A方向的连接并未关闭,这个状态可能会持续一段时间。
3.A收到来自B的确认后,就进入FIN-WAIT-2(终止状态2)状态,等待B发出的连接释放报文段。
4.若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN=1。现假定B的序号为w(在半关闭状态B可能又发送了一些数
据)。B还必须重复上次已发送过的确认号ack=u+1。这时B就进入LAST-ACK(最后确认)状态,等待A的确认。
5.A在收到B的连接释放报文段后,必须对此发出确认。在确认报文段中把ACK置1,确认号ack=w+1,而自己的序列号seq=u+1(根据TCP标准,前面发送过的FIN报文段要消
耗掉一个序号)。然后进入到TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进
入到CLOSED状态。时间MSL叫做最长报文段寿命。
TCP/IP 三次握手四次挥手的更多相关文章
- 在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP
		
如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...
 - TCP/IP三次握手四次挥手
		
本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图所示,给出了TCP通信过程的示意图. TCP 三次握手四次挥手 主要包括三部 ...
 - 通俗了解TCP/IP三次握手四次挥手
		
前言: tcp/ip通信机制是计算机中很重要的一个知识点,不是一句两句就能解释清楚的,需要反复推敲其中的玄妙. 通俗理解: 但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我 ...
 - TCP/IP三次握手四次挥手分析
		
流程图 全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 服务器独有的:(1)LISTEN (2 ...
 - TCP/IP 三次握手-四次挥手
		
TCP的建立需要三次握手,断开需要四次挥手. 首先三次握手: 首先,客户机向服务器发送请求报文,服务器回复ACK,并分配资源,而客户端接受到ACK后回复确认报文,并分配资源,此时三次握手完成. 四次挥 ...
 - [na]TCP的三次握手四次挥手/SYN泛洪
		
1.TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占32位, ...
 - TCP协议—三次握手四次挥手的原理<转>
		
三次握手四次挥手的原理 TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三 ...
 - 救救孩子吧,到现在还搞不懂TCP的三次握手四次挥手
		
本文在个人技术博客同步发布,详情可用力戳 亦可扫描屏幕右侧二维码关注个人公众号,公众号内有个人联系方式,等你来撩... 前几天发了一个朋友圈,发现暗恋已久的女生给我点了个赞,于是我当晚辗转反侧.彻 ...
 - TCP的三次握手四次挥手理解及面试题
		
一.TCP概述 每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字, 例如,若IP地址为192.0.0.1 而端口号为8000,那么得到 ...
 
随机推荐
- Java学习笔记二十三:Java的继承初始化顺序
			
Java的继承初始化顺序 当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执 ...
 - linux静态链接库
			
库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载 ...
 - C语言程序设计:现代方法(第2版)第二章全部习题答案
			
前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...
 - error: command 'aarch64-linux-gnu-gcc' failed with exit status 1
			
使用jetson tx2安装tensorpack时报错: error: command 'aarch64-linux-gnu-gcc' failed with exit status 1 改正: 如果 ...
 - 解决区间第K大的问题的各种方法
			
例题:http://poj.org/problem?id=2104 最近可能是念念不忘,必有回响吧,总是看到区间第k大的问题,第一次看到是在知乎上有人面试被弄懵了后来又多次在比赛中看到.以前大概是知道 ...
 - linux 网络编程 1---(基本概念)
			
1.TCP和UDP协议 共同点:同为传输层协议 不同点: TCP:有连接,可靠 UPD 无连接,不保证可靠 TCP(即传输控制协议): 是一种面向连接的传输层协议,它是能提供高可靠性通信(即,数据无误 ...
 - cakephp1.3中help form的一个小问题
			
如果我们在模版里这么干 <?php echo $form->input('last_sold_date',array('autocomplete'=>'off','label'=&g ...
 - 说说NSCache优于NSDictionary的几点
			
1.NSCache可以提供自动删减缓存功能,而且保证线程安全,与字典不同,不会拷贝键.2.NSCache可以设置缓存上限,限制对象个数和总缓存开销.定义了删除缓存对象的时机.这个机制只对NSCache ...
 - mac使用brew或者tomcat启动jenkins后配置文件路径
			
在mac下使用brew命令或tomcat安装jenkins,启动后要输入密码,密码不知道,又找不到config.xml,找了半天原来 config.xml在/Users/qiaojiafei/.jen ...
 - centos7系统配置系统用户基于ssh的google身份验证
			
最近也是服务器各种被入侵,所以在安全上,要万分注意,特此记录,借助google的身份验证插件,获取动态验证码完成ssh登陆. OS: centos7 安装配置: 1. 安装epel源 yum -y i ...