tcp四次挥手

tcp连接过程中的三次握手和四次挥手

随声附和 提交于 2020-01-27 22:19:34
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手握手建立连接 @第一次握手: 建立连接是,客户端A发送SYN包到服务器B,并进入SYN_SEND状态,等待B确认。 @第二次握手: 服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包,此时服务器B也进入SYN_RECV状态。 @第三次握手: 客户端A收到服务器B的SYN包,向服务器B发送确认包ACK,此包发送完毕客户端A和服务器B进入ESTABKISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(。 (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1 图2 TCP四次挥手关闭连接 1

TCP协议的三次握手和四次挥手

不想你离开。 提交于 2020-01-27 05:12:09
三次握手: 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。 四次挥手: 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1 服务器B关闭与客户端A的连接,发送一个FIN给客户端A 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1 为什么三次握手,却是四次挥手呢?   这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了

简述TCP的三次握手过程

荒凉一梦 提交于 2020-01-27 03:34:39
一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: (A)URG:紧急指针(urgent pointer)有效。 (B)ACK:确认序号有效。 (C)PSH:接收方应该尽快将这个报文交给应用层。 (D)RST:重置连接。 (E)SYN:发起一个新连接。 (F)FIN:释放一个连接。 需要注意的是: (A)不要将确认序号Ack与标志位中的ACK搞混了。 (B)确认方Ack=发起方seq+1,两端配对。 二、三次握手 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示: 图2 TCP三次握手 (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server

计算机网络高频面试题

主宰稳场 提交于 2020-01-26 12:28:32
目录 一、计算机网络的三种模型? 二、TCP、UDP 协议有什么区别? 三、在浏览器输入一个地址,到显示这个页面的过程(过程中使用了哪些协议)? 四、HTTP长连接与短连接 五、说说 TCP 建立连接时的三次握手? 六、TCP 断开连接的四次挥手,以及为什么要四次挥手? 一、计算机网络的三种模型? 二、TCP、UDP 协议有什么区别? 特点: TCP 是面向连接的,以字节流形式传输,提供可靠传输,但 传输效率低,所需资源多; UDP 是无连接的,以数据报文段形式传输,不保证可靠传输,但 传输效率高,所需资源少。 应用场景: TCP 用于要求通信数据保证可靠的服务,比如文件传输,邮件传输,远程登录等; UDP 用于要求通信速度快的服务,比如 视频语音通话,赛事直播等。 TCP 首部字节是 20~60 个; UDP 首部字节是 8 个字节,这8个字节由4个字段组成。 三、在浏览器输入一个地址,到显示这个页面的过程(过程中使用了哪些协议)? 过程: 域名解析,浏览器查找域名对应的IP地址。 与服务器建立连接 发送HTTP请求 服务器响应HTTP请求并返回HTTP报文 浏览器解析并渲染页面 连接结束 使用的协议: DNS:域名系统协议,根据域名获取对应IP。 ==》 DNS百科 TCP:传输控制协议,与服务器建立TCP连接。==》 TCP百科 IP:发送数据时在网络层使用的协议。==》

网络架构系列1--TCP/IP详解

不羁的心 提交于 2020-01-26 02:37:40
不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨—[https://blog.csdn.net/cjm2484836553/article/details/103930596] 《网络架构系列1--TCP/IP详解》 1.计算机网络分层▲(面试点) 1.1 OSI七层网络模型 和 TCP/IP参考模型 2.IP地址 和 端口号 2.1 IP地址 2.2 端口号➹(暗涉一道面试题) 3. TCP和UDP 3.1 TCP的定义和特点 3.2 UDP的定义和特点 4. TCP报文结构 5. TCP中的三次握手▲▲▲(面试点) 5.1 描述一下TCP中三次握手的流程 5.2 为什么TCP建立连接需要三次握手? 5.3 TCP三次握手有什么漏洞吗(知道即可) 6.TCP中的四次挥手(面试点▲) 6.1 描述一下TCP中四次挥手的流程 6.2 为什么TCP释放连接需要四次挥手? 6.3 为什么建立连接是三次握手,而关闭连接却是四次挥手呢,为什么2、3两次不能合并呢? 7.TCP协议中的窗口机制(拓展,了解一下即可) 网络架构,可以算得上是面试的宠儿了,我也废话不多说,直接上重点。 1.计算机网络分层▲(面试点) 1.1 OSI七层网络模型 和 TCP/IP参考模型 重点1 :OSI七层网络模型 和 TCP/IP参考模型 ,它可是面试的敲门砖,所以大概的内容要记住。 (PS

TCP连接的建立--connect函数

走远了吗. 提交于 2020-01-24 21:38:46
众所周知,TCP是面向连接的协议,我在前面的文章中也有写到过三次握手的过程 有兴趣的可以看一看 tcp三次握手和四次挥手 今天就来看一看socket编程中关于三次握手建立连接的函数–connect 我们在这里还是把建立连接的一方抽象为客户端,接收连接的抽象成服务端 函数原型 # include <sys/socket.h> int connect ( int sockfd , const struct sockaddr * servaddr , socklen_t addrlen ) ; sockfd:socket函数返回的套接字描述符,用来通信。 servaddr:指向服务端套接字地址结构的指针,为了实现通用性,将其转换成sockaddr*的类型 addrlen:表示套接字地址结构的大小 成功返回0,失败返回-1,并设置errno 分析函数失败的几种原因 在分析演示之前先使用ifconfig查看我当前电脑的ip地址 然后我正常连接是可以正常进行通信的(服务器是简单的回射服务器,127.0表示连接本机) 当客户发出报文但是没有收到回应的时候,比如三次握手中发送SYN分节,但是由于一些原因服务端没有收到,这个时候在等待6s后客户端重发,一直到75s后仍然没有相应,则会返回错误,并设置errno为 ETIMEDOUT 。 我们用客户端连接一个不存在局域网中的网络作为测试:

理解TCP三次握手和四次挥手

不羁岁月 提交于 2020-01-24 16:56:31
TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的、全双工的、面向字节流的点对点服务。HTTP协议便是基于TCP协议实现的。(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协议作为运输层协议,但是因为HTTP协议对可靠性的的要求,默认HTTP是基于TCP协议的。若是使用UDP这种不可靠的、尽最大努力交付的运传输层协议来实现HTTP的话,那么TCP协议的流量控制、可靠性保障机制等等功能就必须全部放到应用层来实现)而相比网络层更进一步,传输层着眼于应用进程间的通信,而不是网络层的主机间的通讯。我们常见的端口、套接字等概念就是由此而生。(端口代表主机上的一个应用进程、而套接字则是ip地址与端口号的合体,可以在网络范围内唯一确定一个应用进程)TCP协议的可靠传输是通过滑动窗口的方法实现的;拥塞控制则有着慢开始和拥塞避免、快重传和快恢复、RED随机早期检测几种办法。 TCP协议的报文格式 TCP报文段的首部分为 固定部分 和 选项部分 ,固定部分长20byte,而选项部分长度可变。(若整个首部长度不是4byte的整数倍的话,则需要用填充位来填充)在固定首部中,与本文密切相关的是以下几项: seq(序号):TCP连接字节流中每一个字节都会有一个编号,而本字段的值指的是本报文段所发送数据部分第一个字节的序号。 ack(确认号)

TCP的三次握手和四次挥手

允我心安 提交于 2020-01-24 07:39:02
这个简直是每次面试必问的一个知识点了,又三次握手四次挥手的过程能带出一大堆问题来,个个都能问得你猝不及防,什么第三次确认的必要性,什么time_wait的作用啦,什么主动关闭被动关闭啦,什么发送内容啦,等等等等。今天我们就来好好总结一下这整个的过程。 建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。 那如何断开连接呢?简单的过程如下: 【注意】 中断连接端可以是Client端,也可以是Server端。 假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说" 我Client端没有数据要发给你了 ",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK," 告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息 "。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文," 告诉Client端,好了,我这边数据发完了

TCP三次握手和四次挥手及其状态变化

纵然是瞬间 提交于 2020-01-24 04:38:45
@[TOC] TCP三次握手和四次挥手 http://www.httpclient.cn/archives/142.html https://blog.csdn.net/hyg0811/article/details/102366854 三次握手 最初:client:Closed, server:Listen. 第一次握手:client 进入SYN_SENT状态,发送SYN报文,并带有初始化序列号ISN =x(Initial Sequtial Number, 或seq)。server收到客服端发来的报文后,进入SYN_RCVD状态。此时,server确认了client的发送能力OK. 第二次握手:server发送SYN-ACK报文应答客户端,Ack = x+1, 也带有自己的初始化序列号ISN = y。客户端收到后,进入连接ESTABLISHED状态。此时,client确认了server具有正常的接受和发送能力。 第三次握手:客户端发送ACK=y+1给服务端,服务端收到后,进入ESTABLISHED状态。此时,server确认了client具备正常的接受和发送能力。 注意 服务器端的资源分配是在二次握手时分配的。server收到SYN报文后, 会建立半连接队列,在一定时间后,如果server没有收到client的ack, 就会重传直至超时。很多DDOS攻击就是SYN攻击

计算机网络

走远了吗. 提交于 2020-01-23 16:22:23
计算机网络太难?了解这一篇就够了 【原文链接https://juejin.im/post/5d896cccf265da03bd055c87】 1、谈下你对五层网络协议体系结构的理解? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 1. 应用层   应用层的任务是通过 应用进程 间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。 对于不同的网络应用需要不同的应用层协议 。、应用层交互的数据单元称为报文。 2. 运输层   运输层的主要任务就是负责向 两台主机进程 之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。    由于一台主机可同时运行多个线程,因此运输层有 复用 和 分用 的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。   运输层还要对收到的报文进行 差错检测 。在网络层,IP数据包首部中的检验和字段只检验首部是否出现差错而不检验数据部分。   运输层向高层屏蔽了下面网络核心的细节