tcp四次挥手

TCP如何保证“可靠性”(看这一篇就够了~~~)

别说谁变了你拦得住时间么 提交于 2020-03-03 08:14:18
1.校验和机制 TCP检验和的计算与UDP一样,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文 段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正确),否则存在错误。 2.确认应答与序列号 TCP将每个字节的数据都进行了编号,这就是序列号。 序列号的作用: a、保证可靠性(当接收到的数据少了某个号的数据时,能马上知道) b、保证数据的按序到达 c、提高效率,可实现多次发送,一次确认 d、去除重复数据 数据传输过程中的确认应答处理、重发控制以及重复控制等功能都可以通过序列号来实现。 TCP通过确认应答机制实现可靠的数据传输。在TCP的首部中有一个标志位——ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时,确认字段有效。进行确认时,确认字段值表示这个值之前的数据都已经按序到达了。而发送方如果收到了已发送的数据的确认报文,则继续传输下一部分数据;而如果等待了一定时间还没有收到确认报文就会启动重传机制。 3. 超时重传 当报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传(通常是在发出报文段后设定一个闹钟,到点了还没有收到应答则进行重传)。

再有面试官问TCP三次握手,你就拿这篇文章糊他脸(轻松幽默带你理解TCP的通信原理:深度好文)

早过忘川 提交于 2020-03-03 05:13:16
面试情景 一天,你进入了一个大厂面试。坐立不安之中,一个秃头中年男子,穿着一个发灰了的格子衬衫,戴着一副镜片厚9mm的眼镜,稳如磐石突然朝着你说到:“就是你这个小毛头来面试吧。” 心里一惊,这怕不是神仙级架构师。但还是故作镇定:“面试官您好,我是xxx…” 面试过程中……面试官随手抛来一句:“简单说说 TCP 三次握手吧。”。 简单说说???嗯,面试官人还不错。 再加上我面试前的精心准备,和饱读诗书的才华,和挥斥方遒的潇洒帅气,一定能深深折服他。 于是:“ TCP 三次握手很简单, 客户端首先生成一个 SYN 报文,随机生成一个 seq,发给服务端。 服务端生成一个 SYN 报文,随机生成一个 seq,返回一个 ACK(为客户端的 seq + 1),发给客户端。 客户端再返回一个ACK(为服务端的 seq + 1)和 seq(为先前的 seq + 1,也是服务端返回的 ACK 的值)。 三次握手就完成了。” 面试官再问: SYN 是啥 seq 是啥 ACK 是啥 为啥返回的 ACK = seq + 1 TCP 3 次握手可以携带数据吗 为啥一定要 “3” 次,2 次不行吗 为啥断开要 4 次,不能 3 次吗 如果报文段丢失怎么办 报文超长延迟怎么办 网络拥塞怎么办 这都啥????? “你回去等通知吧。” <瑟瑟发抖> 下面进入正题,如果上面的题你都理解,能够熟练回答,那对于 TCP

TCP三次握手四次挥手

拜拜、爱过 提交于 2020-03-02 17:57:30
TCP是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。下面将详细讨论一个 TCP连接是如何建立的以及通信结束后是如何终止的。 三次握手过程解析 请求端(通常称为客户)发送一个 SYN段指明客户打算连接的服务器的端口,以及初始序号(I S N)。这个S Y N段为报文段1。 服务器发回包含服务器的初始序号的 SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。 客户必须将确认序号设置为服务器的 ISN加1以对服务器的SYN报文段进行确认(报文段3)。 这三个报文段完成连接的建立。这个过程也称为三次握手( three-way handshake)。 四次挥手过程解析 建立一个连接需要三次握手,而终止一个连接要经过 4次握手。这由T C P的半关闭(h a l f -c l o s e)造成的。既然一个T C P连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。 1.Client端发起中断连接请求,也就是发送FIN报文。 2.Server端接到FIN报文后,Client端没有数据要发给Server了,如果Server端还有数据发送,则不必急着关闭Socket,可以继续发送数据。 Server发送ACK,告诉Client接收到,并准备关闭

计算机网络的一丢丢知识点

孤人 提交于 2020-03-02 12:55:42
1. 计算机网络体系结构 计算机网络的体系结构有以上3种。 1. OSI的七层协议体系结构,概念清楚,理论完整,但复杂不实用; 2. TCP/IP体系结构,应用广泛。 3. 5层协议,综合OSI和TCP/IP的优点,相对简洁,用于原理学习。 各层的主要功能: 应用层(Application Layer): 通过应用进程间的交互来完成特定网络应用,应用层协议定义的是应用进程间通信和交互的规则。应用层协议有:域名系统DNS、HTTP协议、邮件SMTP协议。应用层交互的数据成为报文(message)。 运输层(传输层,transport layer): 负责向两台主机中进程之间的通信提供通用的数据传输服务。“通用”指多种应用可以使用同一个运输层服务。运输层主要使用的协议:1)TCP(Transmission Control Protocol)——提供面向连接的、可靠的数据传输服务,数据传输的单位是报文段(segment);2)UDP(User Datagram Protocol)——提供无连接的、尽最大努力(best-effort)的数据传输服务(不保证数据传输的可靠性),数据传输的单位是用户数据。 网络层(network layer): 负责为分组交换网上的不同主机提供通信服务。网络层使用的是无连接的网际协议IP(Internet Protocol)以及多种路由选择协议

TCP协议---三次握手和四次挥手详解 (不看后悔系列)

北城以北 提交于 2020-03-02 10:29:45
一、TCP协议简介 TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务。是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。 TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。 工 作:与IP协议共同使用 下面我们来介绍一下TCP的报头结构和相关工作原理: TCP报头 TCP报头总长最小为20个字节,其报头结构如下图(图1)所示; 源端口:指定了发送端的端口 目的端口:指定了接受端的端口号 序号:指明了段在即将传输的段序列中的位置 确认号:规定成功收到段的序列号,确认序号包含发送确认的一端所期望收到的下一个序号 TCP偏移量:指定了段头的长度。段头的长度取决与段头选项字段中设置的选项 保留:指定了一个保留字段,以备将来使用 标志:SYN、ACK、PSH、RST、URG、FIN SYN: 表示同步 ACK: 表示确认 PSH: 表示尽快的将数据送往接收进程 RST: 表示复位连接 URG: 表示紧急指针 FIN: 表示发送方完成数据发送 窗口

关于tcp协议的三次握手和四次挥手理解(面试提问之一)

吃可爱长大的小学妹 提交于 2020-02-28 23:17:05
TCP通信过程包括三个步骤: 1.建立TCP连接通道 2.传输数据 3.断开TCP连接通道。 如图所示,给出了TCP通信过程的示意图。 上图主要包括三部分:建立连接、传输数据、断开连接。 建立TCP连接很简单,通过三次握手便可建立连接。建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。断开连接的过程也很简单,通过四次握手完成断开连接的过程。三次握手建立连接: 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。 传输数据过程: a.超时重传超时重传机制用来保证TCP传输的可靠性。每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认

计算机网络学习整理(1)

十年热恋 提交于 2020-02-28 21:06:16
计算机网络体系图:传统的OSI网络模型有7层,TCP/IP体系有4层,常用的为5层模型,为了详细说明每层的作用,将会对7层作用先进行说明: 应用层 通俗地说,代表所有能 产生网络流量的程序 。准确定义是:应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如 域名系统DNS ,支持 万维网应用的 HTTP协议 ,支持 电子邮件的 SMTP协议 等等。我们把应用层交互的数据单元称为报文。 表示层 在传输之前进行的处理(对数据进行加密或压缩处理),包括信息的语法语义以及它们的关联。 会话层 不同机器上的用户之间建立及管理会话。利用会话层可以用来查木马,用 netstat -n 可以查看计算机打开的端口和建立的会话, netstat -nb 可以查看占用端口和建立会话的应用程序(可能需要管理者权限) ,用netstat /?可以查看指令的help使用指南 传输层 它的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。 可靠传输TCP (保证数据传输可靠性,如传文件),流量控制, 不可靠传输UDP (不用建立会话,不保证数据传输可靠性,如qq发消息,直播等),数据分段编号。****应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用

TCP协议的传输连接管理:TCP协议的三次握手与四次挥手

喜夏-厌秋 提交于 2020-02-28 17:45:40
一、TCP的传输连接管理有三个阶段:连接建立、数据传送和连接释放。 TCP连接时的建立都是采用客户服务器方式。 TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) 二、TCP协议的三次握手: 第一次握手 客户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时随机生成初始序列号 seq=x,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。这个三次握手中的开始。表示客户端想要和服务端建立连接。 第二次握手 TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己随机初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。这个报文带有SYN(建立连接)和ACK(确认)标志,询问客户端是否准备好。 第三次握手 TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,此时,TCP连接建立,客户端进入ESTAB-LISHED(已建立连接)状态。 TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号

python面试题 -- 网编并发

白昼怎懂夜的黑 提交于 2020-02-27 12:21:54
Python面试重点(进阶篇) 注意:只有必答题部分计算分值,补充题不计算分值。 第一部分 必答题 简述 OSI 7层模型及其作用?(2分) # 应用层:文件传输,文件管理,电子邮件的信息处理# 表示层:确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密# 会话层:验证访问和会话管理# 传输层:为应用程序之间提供端对端的逻辑通信。# 网络层:选择合适的网间路由完成两个计算机之间的多个数据链路,通过路由协议和地址解析协议(ARP)。IP,RIP(路由信息协议),OSPF(最短路径优先协议)# 数据链路层:在物理层提供的比特流的基础上,建立相邻节点之间的数据链路,不可靠的物理介质提供可靠传输 ppp协议# 物理层:规定通信设备,通信链路的特性 简述 TCP三次握手、四次回收的流程。(3分) # 第一次握手:客户端首先向服务端发起连接,这时TCP头部中的SYN标识位值为1,然后选定一个初始序号seq=x(一般是随机的),消息发送后,A进入SYN_SENT状态,SYN=1的报文段不能携带数据,但要消耗一个序号。# 第二次握手:服务端收到客户端的连接请求后,同意建立连接,向A发送确认数据,这时TCP头部中的SYN和ACK标识位值均为1,确认序号为ack=x+1,然后选定自己的初始序号seq=y(一般是随机的),确认消息发送后,服务端进入SYN

TCP和UDP相关

被刻印的时光 ゝ 提交于 2020-02-27 12:21:09
前言 前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,比如 TCP 和 UDP 的区别 TCP 是面向连接的,UDP 是面向无连接的 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于数据报的 TCP 保证数据正确性,UDP 可能丢包 TCP 保证数据顺序,UDP 不保证 之前也因为面试的原因了解过一下,但是面试官又问了为什么 TCP 是可靠传输,一下就露馅了,说不出来了,然后这两天就仔细了解了一下这方面的内容,还专门订阅了极客时间的趣谈网络协议,因此,这篇文章主要基于趣谈网络协议和自己的理解。 UDP 要想理解 TCP 和 UDP 的区别,首先要明白什么是 TCP,什么是 UDP TCP 和 UDP 是传输层的两个协议 我们来看一下 UDP 的包头 由上图可以看出,UDP 除了端口号,基本啥都没有了。如果没有这两个端口号,数据就不知道该发给哪个应用。 所以 UDP 就像一个小孩子,特别简单,有如下三个特点 UDP 的特点 沟通简单,不需要大量的数据结构,处理逻辑和包头字段 轻信他人。它不会建立连接,但是会监听这个地方,谁都可以传给它数据,它也可以传给任何人数据,甚至可以同时传给多个人数据。 愣头青,做事不懂变通。不会根据网络的情况进行拥塞控制,无论是否丢包,它该怎么发还是怎么发 因为 UDP 是"小孩子",所以处理的是一些没那么难的项目