计算机网络三次握手和四次挥手

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

其实说实话,挺喜欢计算机网络的,总告诉我一些特别实质性的东西,也很具体。但是感觉基础一点都不扎实,现在开始从头总结一下相关的知识点吧。

这篇博客不适合大家看,算是我的个人总结,您要是非得看 有错误希望给你纠正一下哈

开头阮大神的两篇文章奉上

互联网协议入门一

互联网协议入门二

定义:计算机网络是一些互相连接的、自治的计算机的集合。因特网是网络的网络。

 OSI七层参考模型简介

第7层 应用层(Application Layer)

应用层能与应用程序界面沟通,以达到展示给用户的目的。 在此常见的协议有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

第6层 表示层(Presentation Layer)

表示层能为不同的客户端提供数据和信息的语法转换内码,使系统能解读成正确的数据。同时,也能提供压缩解压、加密解密。

第5层 会话层(Session Layer)

会话层用于为通信双方制定通信方式,并创建、注销会话(双方通信)。

第4层 传输层(Transport Layer)

传输层用于控制数据流量,并且进行调试及错误处理,以确保通信顺利。而发送端的传输层会为分组加上序号,方便接收端把分组重组为有用的数据或文件。

第3层 网络层(Network Layer)

网络层的作用是决定如何将发送方的数据传到接收方。该层通过考虑网络拥塞程度、服务质量、发送优先权、每次路由的耗费来决定节点X到节点Y的最佳路径。我们熟知的路由器就工作在这一层,通过不断的接收与传送数据使得网络变得相互联通。

第2层 数据链路层(Data link Layer)

首先数据链路层的功能在于管理第一层的比特数据,并且将正确的数据发送到没有传输错误的路线中。创建还有辨认数据开始以及退出的位置同时予以标记。另外,就是处理由数据受损、丢失甚至重复传输错误的问题,使后续的层级不会受到影响,所以它运行数据的调试、重传或修正,还有决定设备何时进行传输。 设备有:Bridge桥接器switch交换器

第1层 物理层(Physical Layer)

物理层定义了所有电子及物理设备的规范。其中特别定义了设备与物理媒介之间的关系,这包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器(在SAN中使用的主机适配器)以及其他的设备的设计定义。因为物理层传送的是原始的比特数据流,即设计的目的是为了保证当发送时的信号为二进制“1”时,对方接收到的也是二进制“1”而不是二进制“0”。因而就需要定义哪个设备有几个针脚,其中哪个针脚发送的多少电压代表二进制“1”或二进制“0”,还有例如一个bit需要持续几微秒,传输信号是否在双向上同时进行,最初的连接如何创建和最终如何终止等问题。

为了更好理解物理层与数据链路层之间的区别,可以把物理层认为是主要的,是与某个单一设备与传输媒介之间的交互有关,而数据链路层则更多地关注使用同一个通讯媒介的多个设备(例如,至少两个设备)之间的互动。物理层的作用是告诉某个设备如何传送信号至一个通讯媒介,以及另外一个设备如何接收这个信号(大多数情况下它并不会告诉设备如何与通讯媒介相连接)。有些过时的物理层标准如RS-232倒是的确使用物理线缆来控制通讯媒介的接入。

TCP/IP的5层模型

相比于OSI的七层模型,更常用的是TCP/IP的5层模型。TCP/IP的5层模型是将ISO的七层模型的应用层、表示层、会话层合并为应用层

1.TCP建立连接



上图是A主动打开连接,而B是被动打开连接。

1. B的TCP服务器进程先创建传输控制块TCB。准备接受用户进程的连接请求。然后服务器进程就处于LISTEN状态,等待用户的连接请求,如有作出相应。

2.A的TCP客户进程也首先创建传输控制模块TCB,然后想B发出连接请求报文段,这时首部中的同部位SYN = 1,同时选择一个厨师序号seq = x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但是消耗掉一个序号。这时TCP客户端进入SYN-SEND(同步已发送)状态。

3. B收到连接请求报文之后,如同意建立连接,则向A发送一个确认。在确认报文段中应该把SYN位和CK位都置1,确认号ack = x+1,同时也为自己选择一个初始序号seq = y。请注意这个报文段也不能携带数据,但是同样要消耗掉一个序号。这是TCP服务器进程进入SYN-RECVD同步收到(状态)。

4. TCP客户进程收到B的确认之后,还要像向B给出确认。确认报文段的ACK置1,确认号为ack=y+1,而自己的序号为seq=x+1。TCP规定,ACK报文可以携带数据。但是如果不懈怠数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍然是seq=X+1。这时TCP已经建立,A进入ESTABLISHED(已建立连接)状态。。

5. 当B收到A的确认之后,也进入ESTABLISHED状态。

以上就是三次握手。 那么问题来了,为什么需要3次握手,也是是A给B喊话,B说可以说话了,为啥A还要回答说我知道了呢。也就是为什么A还要发送一次确认呢?

这主要是为了防止已失效的连接请求报文突然又传到了B,因为发生错误。

所谓的“已经失效的连接请求报文”是这样产生的。考虑一种正常的情况。A发出连接请求,但是因为连接请求报文丢失而未收到确认。于是A再次重传一次连接请求。后来收到了确认,建立了连接连接。数据传输完毕之后,就释放了连接。A共发送了两个连接请求报文段,其中第一个丢失,第二个到达了B。没有“已失效的连接请求报文段”。

现在嘉定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网路节点长时间滞留了,以至延误的连接释放以后的某个时间点才到达B。本来这是一个早已失效的报文段。但是B收到此失效的连接请求报文段后,就误认为A又发出了一次心新的连接请求。于是就向A发出了确认报文段,同意建立连接。嘉定不采用三次握手,那么只要B发出确认,新的连接就建立了。

但由于A并没有发出建立连接的请求,因此不会理会B的确认,也不会向B发数据,但是B却以为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。

采用三次握手的办法可以防止上述现象的发生。假如刚才的情况下,A不会向B的确认发送请求,B由于收不到确认,就知道A并没有建立连接。


天下没有不散的宴席,也没有讲不完的话,当A给B说完之后,A是不是可以马上走人呢,当然不可以,那也太不尊重B了吧,所以就有了四次挥手的机制

2.TCP建立连接


TCP连接释放过程比较复杂,我们仍然结合双方状态的改变来阐明连接的释放的过程。

1.数据传输结束后,通信的双方都可以释放连接。现在A和B都处于ESTABLISHED状态。A的应用进程先向TCP发出连接释放报文段,并停止在发送数据,主动关闭TCP连接。A把连接释放报文段首部的FIN置1,其序号seq=u,它等于前面已传送过得数据的最后一个字节的序号加1。这时A进入FIN-WAIT(终止等待1)状态,等待B的确认,请注意,TCP规定FIN报文也即使不携带数据,他也消耗一个序号

2.B收到连接释放的报文段即发出确认,确认号是ack=u+1,而这个报文段自己的需要时v等于B前面已经传送过的数据的最后一个字节的序号加1,。然后B就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应该通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍然要接收。也就是说,从B到A这个方向的连接并未关闭。这个状态可能会持续一段时间。

A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

3.若B已经没有向A发送的数据,其应用进程就通知TCP释放连接连接。这是B发出的连接释放报文段必须使用FIN=1,现在鉴定B的需要为w(在半关闭状态B可能又发送了一些数据)。B还必须重发上次已经发送过的确认号ack=u+1。这时B就进入LAST-ACK(最后确认)状态,还等待A的确认。现在一定注意这时候B也将ACK位置1了

4.A在收到B的连接释放报文后,必须对此发出确认。在确认报文段中把ACK置1,确认号ack=w+1,而自己的序号是seq=u+1根据(TCP标准,前面发送的FIN报文段要消耗一个序号)。然后进入到TIME-WAIT(时间等待)状态。请注意TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入CLOSED状态。时间MSL叫作最长报文段寿命(Maximum Segment Lifetime)。FRC建议设置为2分钟。但是这完全是从工程上来考虑。对于现在的网络,MSL=2分钟可能太长了一些。因此TCP运行不同的实现可根据具体的情况使用更小的MSL值。因为,从A进入到TIME-WAIT状态后,要经过4分钟才能进入CLOSED状态,才能开始建立一个新的连接。当A撤销相应的传输控制块TCB后,就结束了这次的TCP连接。


为什么A在TIME-WAIT状态必须等待2MSL的时间呢?这有两个理由。

第一,为了保证A发送的最后一个ACK报文能够达到B。 这个ACK报文段有可能丢失,因为使处在LAST-ACK状态的B收不到已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。接着A重传一次确认,重新启动2MSL计时器。最后,A和B都正常进入到CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后理解释放连接,那么就无法收到B重传的FIN+ACK报文段,因而也 不会再发送一次确认报文段。这样B就无法按照正常的步骤进入CLOSE状态。

第二,防止上一节提到的“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过2MSL,就可以使得本连接持续的时间内所产生的所有报文都从网络中消失。这样就使得可以使下一次心的连接中不会出现这种旧的连接请求报文段。

5.B只要收到了A发出的确认,就进入CLOSED状态。同样,B在撤销相应的传输控制卡TCB后,就结束了这次的TCP连接。我们注意到B结束TCP连接的时间要不A早一些。

上述的TCP连接释放过程是四次握手,单页可以看成两个二次握手。

除时间等待计时器外,TCP还设有一个保活计时器(keepalive timer)。设想有这样的场景:客户已主动与服务器建立了TCP连接。但是后来客户端的主机突然出现故障。显然,服务器以后就不能再接受客户发来的数据。因此,应当有所措施使得服务器不要在白白等待下去。这就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常为两个小时。若两个小时没有收到客户的数据,服务器就发送一个探测报文段。以后每隔74分钟就发送一次。若一连发送10个探测报文后,仍没有客户端的响应,服务器就认为客户端出现了故障,接着就关闭这个连接。


这就是著名的四次挥手的过程,比三次握手更加复杂,为什么? 因为分手总比表白难 哈哈。开个玩笑,因为TCP支持的是全双工的模式,中间有一个半关闭状态。一方没有数据要发送了还要等待另一方发送完毕。

下面给出TCP的有限状态机


计算机网络——TCP三次握手四次挥手 计算机网络——TCP三次握手四次挥手详解!!!面试高频考点~~~ 阅读详情

相关推荐

【转】计算机网络——三次握手四次挥手

【转】计算机网络——三次握手四次挥手

NRWHF的博客 8833

计算机网络三次握手四次挥手(过程详解)

第一次握手:向TCP服务器进程发送TCP连接请求报文段,进入同步已发送状态。TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,序号字段seq被设置了一个初始值x,作为TCP客户进程所选择的初始序号。

weixin_60154963的博客 5789

计算机网络之TCP三次握手

计算机网络之TCP三次握手

weixin_52690231的博客 1万+

计算机网络】TCP三次握手四次挥手(超级详细)

TCP使用三次握手四次挥手来建立终止连接。为什么建立终止连接还需要这么麻烦呢?TIME_WAIT状态都有那些细节?不使用三次握手行不行啊?等等问题细节都进行了详解!!!赶快进来参观吧!

weixin_67596609的博客 3万+

计算机网络————“四次挥手

概念:所谓“四次挥手”就是关闭TCP连接的过程,就是指断开一个TCP连接时,需要客户端服务端总共发送4个包以确认双方连接的断开。 意义:同样是保证TCP连接的全双工连接。 在socket编程中,这一过程由客户端或服务端任一方执行close来触发。   一、“四次挥手”示意图 简单口语描述: 第一次挥手:(客户):我要传送的数据包都发送出去了! 第二次挥手:(服务器):好的,收到...

追梦无惧 5607

计算机网络——TCP的三次握手四次挥手

编号:抓取到报文的编号ID:IP报文首部的标识符seq:序号,进程发送消息的号码。ack:确认号,期望目的进程返回的号码。SYN:TCP标志位每个字段含义如下:(1):源端口号。(2):目的端口号。(3):序号。(4):确认号。(7):标志位。(8):窗口大小。

m0_74043762的博客 1223

计算机网络面试复习:三次握手四次挥手

三次握手四次挥手 三次握手 概念 为什么需要握手握手的作用就是为了同步一些信息,比如最大滑动窗口 TCP:是一个可靠的连接,也就是客户端服务器双方必须感知对方的存在,也就是需要经历一个建立连接的过程 用三次握手建立TCP连接,连接有三个阶段 建立连接 数据传输 连接释放 连接的管理就是使连接的建立释放都能正常地进行,连接阶段过程中要解决以下三个问题 要使每一方都能确知对方的存在 要允许双方协商一些参数 能够对运输实体分配资源 TCP连接建立过程 TCP建立连接的过程:被称为握手握手

Viper的程序员修炼手册 520

计算机网络】——TCP三次握手四次挥手详解问题汇总

1、三次握手 1.1connect()、listen()accept()三者之间的关系 1.1三次握手的过程 1.2三次握手的状态转换安全问题 1.3三次握手的面试题总结 2、四次挥手 2.1四次挥手的过程 1.2四次挥手的面试题总结 3.1TCP编程中三次握手四次挥手的全过程 3.2TCP状态转换图

qq_43412060的博客 8272

计算机网络三次握手四次挥手详解

四次连接有点多余,第三次的时候,我们已经互相进行了连接确认但是因为我们无法保证百分百的可靠性。

qq_44182424的博客 1552

计算机网络】——TCP三次握手四次挥手详解

文章目录 1、三次握手 1.1connect()、listen()accept()三者之间的关系 1.1三次握手的过程 1.2三次握手的状态转换安全问题 1.3三次握手的问题汇总 2、四次挥手 2.1四次挥手的过程 1.2四次挥手的问题汇总 3.1TCP编程中三次握手四次挥手的全过程 3.2TCP状态转换图 1、三次握手 1.1connect()、listen()accept()三者之间的关系 在我之前的一篇博文中就有详细的提到过TCP的编程流程TCP详解及编程流..

一口Linux的专栏 4674

计算机网络三次握手四次挥手

TCP三次握手四次挥手是建立终止连接的核心机制。三次握手通过SYN、SYN-ACKACK报文确认双方的收发能力,防止历史连接干扰;两次握手会导致资源浪费安全隐患。四次挥手因TCP半关闭特性需分阶段释放双向连接,TIME_WAIT状态确保最后ACK可靠传输并过滤延迟报文。SYN攻击会耗尽服务端资源,可通过缩短超时、SYN Cookie等技术防御。关键点包括:动态ISN防止预测、第三次握手可传数据、2MSL等待保障连接彻底关闭。这些机制共同保障了TCP连接的可靠性安全性。

2302_76793428的博客 897

计算机网络】TCP的三次握手四次挥手

首先 tcp的三次握手四次挥手绝对是高频的面试题,因为他是网络建立可靠稳定连接的基础,那么我们可以知道的时候三次握手是建立连接,四次挥手是断开连接。那其中衍生出来的一些问题如为什么要建立三次连接?两次为什么不行?为什么要四次挥手三次为什么不行?等等,所以就此问题我做了一个简单的可以应付面试的总结,当然你要是想深入了解那必须看书!!! TCP 三次握手 tcp的三次握手是为了建立两个端点之间的通信的,所以说tcp是点与点之间的通信。 先上图, 根据上图我来讲一下大致的握手过程: 第一次握手:客户端处于S

聪明不喝牛奶的博客 3056

day07|计算机网络重难点之 TCP连接三次握手四次挥手的过程及原因、TCP 的 Keepalive HTTP 的 Keep-Alive的区别

day07|计算机网络重难点之 TCP连接三次握手四次挥手的过程及原因、TCP 的 Keepalive HTTP 的 Keep-Alive的区别

2402_84438596的博客 1230

计算机网络实验】TCP协议的抓包分析:三次握手&四次挥手&UDPTCP的区别(超详细教程)

计算机网络实验——TCP协议的抓包分析(详细and多图)

发布一些个人学习笔记,分享一些可能在安全学习道路上遇到的问题、心得,一起学习一起进步 8283

计算机网络】TCP的三次握手四次挥手过程

TCP的三握四挥过程相关问题 一 TCP的连接传输 TCP连接传输需要经历三个阶段: TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程交服务器。 TCP连接的建立需要三次握手,连接的释放需要四次挥手,学习TCP的三次握手四次挥手之前,需要熟悉TCP的首部格式,特别是TCP首部中的6个控制位。 二 TCP的三次握手 2.1 过程 简单来说就是以下三步: 第一次握手:客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,

weixin_47750287的博客 2908

计算机网络--TCP的三次握手四次挥手

一篇写得很细致的博客:两张动图-彻底明白TCP的三次握手四次挥手 文章目录一、数据包说明二、三次握手1、图解三次握手2、概述三次握手三、四次挥手1、为什么要四次挥手2、图解四次挥手四、如果已经建立了连接,但是客户端突然出现故障了怎么办? TCP 在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。 为了准确⽆误地把数据送达⽬标处,TCP协议采⽤了三次握⼿策略。 一、数据包说明 源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进

H.千面的博客 1552

计算机网络】——TCP三次握手四次挥手

TCP连接的建立采用客户服务器方式,主要发起连接建立的应用进程叫做客户端,而被动等待连接建立的应用进程叫做服务端 三次握手 TCP建立连接的过程叫做握手握手需要在客户端服务器之间交换三个报文段。假设主机A运行的是TCP客户程序,而B运行TCP服务器程序。最初两端的TCP进程都处于CLOSED(关闭)状态。一开始,B的TCP服务器进程先创建传输控制块TCB,准备接收客户端的连接请求,然后服务器进程就处于LISTEN(收听)状态,等待客户端的连接请求,如有,即作出响应。A的TCP客户进程也是首先创建传输.

weixin_46146755的博客 3454

计算机网络-三次握手四次挥手

服务器第一次收到SYN之后,就会处于SYN_RCVD状态,此时双方还没有完全建立其连接,服务器会把这种状态下的请求连接放在一个队列里,这种队列被称为半连接队列。有半连接,肯定就有全连接队列,就是已经完成三次握手,建立起连接就会把请求放在全连接队列中,如果队列满了就可能出现丢包的现象。那半连接队列有什么作用呢??⁉️当服务器发送了SYN_ACK包后(第二次握手),如果一直未收到客户端的确认包,服务器会进行重传,如果重传次数超过了最大重传次数,系统就会把该连接信息从半连接队列中删除。

qq_37974765的博客 873

计算机网络基础学习——三次握手四次挥手

计算机网络基础学习——三次握手四次挥手三次握手过程 很多人一看,唏嘘不已,么简单的问题,可能不知道吗。但是要全面地解决这个问题还真不是简单的意见事情。大多数人能把三次握手四次挥手的过程说出来,这个不难(这也是我停留好久的状态,惭愧惭愧);如果面试官问得深一点,要求把各个时候的状态说出来,那可能要难倒一片求职者了;如果再问,为什么四次挥手的最后还要再等待2MSL,那又有几个人能答上来呢;其实还...

让我先想想起啥名字 676
上一篇: C++ map 插入 困惑
下一篇: IP地址
ituling
博客等级 码龄14年 6粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值