tcp/ip基本知识,网络七层与三次握手和四次挥手。为什么需要三握四挥,TCP与UDP比较

本文介绍了TCP/IP的基本知识,包括网络七层模型及其作用,详细阐述了TCP三次握手与四次挥手的过程,旨在解释为何需要这样的步骤,以及与UDP的比较。内容涵盖连接建立、断开可能出现的问题及解决方案,帮助读者理解TCP连接的可靠性与UDP的效率差异。
摘要由CSDN通过智能技术生成

目录:

一. tcp/ip基本知识

1.网络七层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
应用层:

  • 应用层提供的是用户的接口,也就是人机交互的页面。
  • 主要代表的协议有 Telnet、FTP、www 等。

表示层:

  • 提供 数据是怎样表示的,加密的数据也会在表示层处理。
  • 代表的 编码和协议有 ASCII、EBCDIC、JPEG等。
  • 比如说:“图像,视频,音频,文字,如何在计算机表示出来”

会话层:

  • 会话层是来区分上层不同的应用

传输层:

  • 主要的就是提供传输,和对应的加密 也就是可靠或不可靠的传输。
  • 失败了 会重传 并且会纠错

网络层:

  • 网络层 提供我们的逻辑寻址,最常见的IP地址。主要是使用路由器来进行确定路径的。
  • 就是说将数据 从哪到哪 给指定出来

数据链路层:

  • 数据链路层是将我们的比特流 位 组合成 字节,再把 字节 组合成帧,形成数据链路 层的数据。
  • 而且还会使用MAC地址去寻址。还会实现错误的检测。

物理层:

  • 物理层主要是提供电气特性,包含了我们线缆的针脚数,线缆接口的样子,线缆的电压量,以及电压、线速等等。

将网络区分这么多的层级 有什么好处?

把网络任务分层,并定义标准的层间接口,可使各个独立的协议或者层更简洁
便于学习和讨论协议规范的很多细节
层间的标准接口便于工程化模块,使每种产品可以只完成某基层的功能
创建了一个更好的互操作环境
降低了复杂性,提高程序修改和产品开发效率
便于定位和排除故障
每层利用紧邻的下层服务,并向紧邻的上层提供服务

2.什么是网络?

在这里插入图片描述
线缆:

  • 网线,光纤,通用电缆

设备:

  • PC,交换机,路由器,服务器 等

二. 三次握手与四次挥手

三次握手:
####1、第一次握手
建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认。

####2、第二次握手
 服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。

####3、第三次握手
 客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(seq=x+1),确认号为ack(客户端)=y+1,此包发送完毕,
客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。
四次挥手:
#### 1、第一次挥手
 首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u。

#### 2、第二次挥手
服务器收到这个FIN,它发送一个ACK,确认ack为收到的序号加一。

#### 3、第三次挥手
 关闭服务器到客户端的连接,发送一个FIN给客户端。

#### 4、第四次挥手
客户端收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加一。
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1、为什么需要三次握手

  • 目的:为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。主要防止资源的浪费。

具体过程:

  • 当客户端发出第一个连接请求报文段时并没有丢失,而是在某个网络节点出现了长时间的滞留,以至于延误了连接请求在某个时间之后才到达服务器。这应该是一个早已失效的报文段。但是服务器在收到此失效的连接请求报文段后,以为是客户端的一个新请求,于是就想客户端发出了确认报文段,同意建立连接。假设不采用三次握手,那么只要服务器发出确认后,新的连接就可以建立了。但是由于客户端没有发出建立连接的请求,因此不会管服务器的确认,也不会向服务器发送数据,但服务器却以为新的运输连接已经建立,一直在等待,所以,服务器的资源就白白浪费掉了。

2、如果在TCP第三次握手中的报文段丢失了会出现什么情况?

  • 客户端会认为此连接已建立,如果客户端向服务器发送数据,服务器将以RST包响应,这样就能感知到服务器的错误了。

3、为什么要四次挥手

  • 为了保证在最后断开的时候,客户端能够发送最后一个ACK报文段能够被服务器接收到。如果客户端在收到服务器给它的断开连接的请求之后,回应完服务器就直接断开连接的话,若服务器没有收到回应就无法进入CLOSE状态,所以客户端要等待两个最长报文段寿命的时间,以便于服务器没有收到请求之后重新发送请求。

  • 防止“已失效的连接请求报文”出现在连接中,在释放连接的过程中会有一些无效的滞留报文,这些报文在经过2MSL的时间内就可以发送到目的地,不会滞留在网络中。这样就可以避免在下一个连接中出现上一个连接的滞留报文了。

4.为什么TCP连接的时候是3次?2次不可以吗?

  • 因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。
  • 如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。

5. 为什么TCP连接的时候是3次,关闭的时候却是4次?

  • 因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。

6. 为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?

  • 这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了。

7. 如果已经建立了连接,但是客户端突然出现故障了怎么办?

  • TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

TCP与UDP比较:

1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2. TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3. Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。
4. UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
5. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
6. TCP对系统资源要求较多,UDP对系统资源要求较少。
注:UDP一般用于即时通信(QQ聊天 对数据准确性和丢包要求比较低,但速度必须快),在线视频等

tcp/udp相关协议
      1.  TCP:    STMP, TELNET, HTTP, FTP
      2.  UDP:    DNS,TFTP,RIP,DHCP,SNMP

三次握手、四次挥手图解:
在这里插入图片描述

      
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值