tcp四次挥手

Socket三次握手四次挥手

不问归期 提交于 2019-12-01 19:15:06
Socket 起源于 Unix,而Unix基本哲学之一就是一切皆文件,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符 通信模型: s erver的生命周期大致如下: 创建socket。 绑定(bind)地址端口 监听网络连接 接受连接 关闭连接 clinet的生命周期则稍微简单点: 创建socket 绑定地址 发起连接 关闭连接 Socket三次握手及四次挥手 三次握手过程: 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认; 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment

TCP协议握手过程,以及为什么握手,不握手又会怎么样?

北城以北 提交于 2019-12-01 19:14:55
1. 为什么要用三次握手 在《计算机网络》一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。如果采用“三次握手”的话就不会出现这种情况,B端收到一个过时失效的报文段之后,向A端发出确认,此时A并没有要求建立连接,所以就不会向B端发送确认,这个时候B端也能够知道连接没有建立。 2. TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH

程序员面试被问到“三次握手,四次挥手”怎么办?

不问归期 提交于 2019-12-01 19:13:12
作者 | 饶全成 责编 | 郭 芮 记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去我也不懂,皆大欢喜! 作为程序员,要有“刨根问底”的精神。知其然,更要知其所以然。这篇文章希望能抽丝剥茧,还原背后的原理。 什么是“3次握手,4次挥手”? TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。 TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。 TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用4次挥手来关闭一个连接。 TCP服务模型 在了解了建立连接、关闭连接的“三次握手和四次挥手”后,我们再来看下TCP相关的东西。 一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:启动、数据传输、退出(关闭)。 当TCP接收到另一端的数据时,它会发送一个确认,但这个确认不会立即发送,一般会延迟一会儿。ACK是累积的

TCP协议三次握手和四次挥手抓包分析

感情迁移 提交于 2019-12-01 19:12:11
TCP协议在双方建立连接的时候需要三次握手,首先客户端发送SYN标志为1的TCP数据包,然后服务器端收到之后,也会发送一个SYN标志置位,并且带有ack应答的数据包,最后客户端再发送给服务端一个应答,这样就建立起了通信。 首先看TCP数据包头部各个字段: 在三次握手和四次挥手过程中,主要看UAPRSF6个标志和seq ack的变化。首先使用telnet程序测试,比如telnet 8.8.8.8 443,使用tcpdump -i enp0s3 -X -vv tcp -s0 命令看通信过程 192.168.0.10.53548 > 14.215.177.39.https 表示从192.168.0.10的53548端口发送到了14.215.177.39的https(443)端口,Flags [S]表示发送的SYN,也就是连接标志,seq 1436271743表示序号, win 29200表示窗口大小,options [mss 1460,sackOK,TS val 16451924 ecr 0,nop,wscale 7]是在正式建立连接前告诉对方自己的一些选项字段,比如mss表示自己的最大报文长度是1460,length:0表示数据字段部分为0,就是没有数据。 以太网帧完整数据: 0x0000: 4510 003c cd2b 4000 4006 eccf c0a8 000a E..<.+@

TCP/IP协议三次握手和四次挥手大白话解说

大城市里の小女人 提交于 2019-12-01 19:11:22
前言 昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧。 TCP(Transmission Control Protocol)网络传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,数据传输前建立连接的工作要经过三次握手,数据传输后断开连接的工作要经过四次挥手。 工作过程 TCP标志位: TCP共有6个标志位,分别是: SYN(synchronous),建立联机。 ACK(acknowledgement),确认。 PSH(push),传输。 FIN(finish),结束。 RST(reset),重置。 URG(urgent),紧急。 图解三次握手和四次挥手的过程: 三次握手建立连接阐述: 第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。 第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。 第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。 到此整个建立连接的过程已经结束

TCP协议三次握手以及四次挥手详解(常见面试题)

你。 提交于 2019-12-01 19:10:50
TCP协议: TCP协议全称:传输控制协议,顾名思义,也就是说要对数据的传输进行一个详细的控制。 TCP协议段格式 我们来分析一下协议段的内容: 源/目的端口号:表示数据从哪个进程来到那个进程去; 32位序号/32位确认号:后面详细讲; 4位TCP报头长度:表示该TCP头部有多少个32位bit,也就是说有多少个4字节,所以TCP头部最大长度是15*4=60; 6位标志位: 16位窗口大小: 16位校验和:发送端填充,CRC校验,接收端校验不通过,则认为数据有问题。此处所说的校验和不仅包含TCP头部,也包含TCP数据部分; 16位紧急指针:标识哪部分数据是紧急数据; 40字节头部选项:暂时忽略 连接管理机制 在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接 三次握手: 第一次: 客户端 - - > 服务器 此时服务器知道了客户端要建立连接了 第二次: 客户端 < - - 服务器 此时客户端知道服务器收到连接请求了 第三次: 客户端 - - > 服务器 此时服务器知道客户端收到了自己的回应 到这里, 就可以认为客户端与服务器已经建立了连接. 刚开始客户端与服务器端都处于CLOSED状态。 TCP规定, SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。 第一次握手:建立连接时,客户端发送请求报文,此时报文首部中的同步标志位SYN=1,

TCP的三次握手和四次挥手及常见面试题

喜你入骨 提交于 2019-12-01 19:10:34
一、前言 今天上掘金查看热门文章,发现一篇好文 ★ 前端 100 问:能搞懂 80% 的请把简历给我 ★ ,此文包含100个前端面试问题,仔细阅读完所有题目后,顿感身中数刀无法呼吸,留下了没有技术的泪水,只好回炉重塑 ~ 文章第16题:谈谈你对TCP三次握手和四次挥手的理解? 这是前端面试频率特别高的一个题目,接下来我们学习一下TCP的三次握手和四次挥手 二、为什么会有TCP/IP协议 计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。但是简单的连到一起是远远不够的,需要定义一些共通的东西来进行交流,TCP/IP就是为此而生。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。 三、TCP简介 传输层控制协议(TCP Transport Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议,是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。 记住关键词“面向连接”、“可靠”、“字节流”,这是学习掌握TCP的关键: 面向连接:客户端、服务端交换数据前,需要建立连接 可靠:通过特定机制,在不可靠的网络之上,确保报文准确送达 字节流:数据的最小单位为字节。至于字节中存储内容的含义,由于应用层的程序决定

TCP三次握手/四次挥手详解

倖福魔咒の 提交于 2019-12-01 19:08:08
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://justim.blog.51cto.com/740099/237548 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机; 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1

谈谈你对TCP三次握手和四次挥手的理解

落爺英雄遲暮 提交于 2019-12-01 19:02:26
放一张楼主自己画的形象图 关于tcp你知道多少 经常在前端的面试群中发现有人会碰到面试官去询问tcp的握手和挥手问题,诸如你了解tcp吗,解释一下tcp的三次握手和四次挥手,我认为如果只是简单的了解这2个问题,真的那么有意义吗?所以,不防试着去多了解一点网络通信的内容,记得在上家公司的时候有个老哥说过,网络通信其实还是蛮重要的,毕竟我们现在无论是工作还是生活基本都处于互联网之中,尤其作为开发者基本上每天都在和http请求打交道,so 了解网络传输的原理还是有必要的,下面我们稍微深入的来看下网络传输的内容。 base OSI(Open Systems Interconncection,开放系统互联)网络分层 从上到下分别是: 7.应用层(Application) 6.表示层(Presentation) 5.会话层(Session) 4.传输层(Transport) 3.网络层(Network) -- 路由器 2.数据链路层(Data Link) -- 交换机 1.物理层(Physical) -- 网卡、集线器(Hub) 基础内容不做过多的讲解,有需要的可以 出门右转 ok 我们今天主要关注的是tcp层的内容,下面的内容,如果有兴趣建议大家按照步骤实际操作去看看,首先介绍一个工具wireshark,这个工具可以帮助我们抓到tcp以及更底层的包,下载到 这里 ,打开后有个download

TCP三次握手和四次挥手过程

浪子不回头ぞ 提交于 2019-12-01 18:59:38
1、三次握手 (1)三次握手的详述 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。 最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。( A、B关闭状态CLOSED —— B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED ) B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。 1 )第一次握手: A的TCP客户进程也是首先创建传输控制块TCB,然后向B发出连接请求报文段,(首部的 同步位SYN=1 , 初始序号seq=x) ,(SYN=1的报文段不能携带数据)但要消耗掉一个序号,此时TCP客户进程进入SYN-SENT(同步已发送)状态。 2 )第二次握手: B收到连接请求报文段后,如同意建立连接,则向A发送确认,在确认报文段中( SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y ),测试TCP服务器进程进入SYN-RCVD(同步收到)状态; 3 )第三次握手: TCP客户进程收到B的确认后