详细图解三次握手四次挥手,精讲TCP/IP协议族,TCP和UDP对比

网络编程三要素 ip,端口,网络协议

  1. IP地址:是计算机在互联网上的唯一地址,用于在网络中唯一标识一台计算机。IP地址通常以点分十进制格式表示,即四个数字在句点(.)分隔,每个数字在0到255之间。例如,192.168.1.1就是一个常见的IP地址。
  2. 端口号:在网络通信中,端口号 进程或服务在设备中的唯一标识。它们被规定为从1到65535的数字。在日常生活中,我们可能经常遇到一些常见的端口号,比如80对应HTTP协议,443对应HTTPS协议等。
  3. 协议:是一种定义了通信规则的规范,使得不同的系统或设备之间可以相互通信。协议在网络编程中非常重要,因为它规定了发送方和接收方必须遵守的规则和格式。例如TCP/IP协议族就包含了多个协议,而HTTP、FTP等则是基于TCP/IP协议族的应用层协议。

简单比喻来说,IP地址就像是收信人,我们想寄信给某人时需要知道他的住址(IP地址);端口号就像是收信人的门牌号,我们需要知道门牌号才能准确地将信送到;而协议则是通信双方都听得懂的共同语言(如普通话),只有说同一种语言(协议)才能正确地交流。

常见协议例如TCP/IP协议族就包含了多个协议,而HTTP、FTP等则是基于TCP/IP协议族的应用层协议。

网络编程需要深入理解TCP/IP协议族,因为它是互联网的基础。TCP/IP协议族是一个分层结构的协议,包括四个主要层次:应用层、传输层、网络层和数据链路层。下面详细讲解每个层次的结构和功能:

  1. 应用层(Application Layer) :这是TCP/IP协议族的最高层,负责处理特定的应用程序细节。它包含了各种网络应用协议,如HTTP(用于Web浏览器和服务器的通信)、FTP(用于文件传输)、SMTP(用于电子邮件传输)等。这些协议定义了应用程序之间的通信方式和数据格式。
  2. 传输层(Transport Layer) :这一层主要处理TCP和UDP协议。TCP协议是一种面向连接的协议,它能够保证数据的可靠传输。在TCP协议中,首先需要建立连接,然后数据可以在两个方向上传输。TCP协议确保数据的顺序和完整性,提供流量控制和错误检测机制。UDP协议则是一种无连接的协议,它不保证数据的可靠传输,因此速度相对较快。UDP常用于实时应用,如音频和视频流。
  3. 网络层(Network Layer) :这一层主要处理IP协议,负责数据的路由和转发。IP协议定义了数据包如何在不同的网络之间传输,同时提供了一种寻址机制,使得每一台主机都能在互联网上被唯一地标识。IP地址是互联网上每个设备的唯一标识,用于路由和识别数据包的目的地。
  4. 数据链路层(Data Link Layer) :这是TCP/IP协议族的最底层,负责处理网络硬件和数据链路相关的细节。这一层负责将数据打包成帧,并在每个帧上添加头信息(如源和目标MAC地址)和尾信息(如校验和)。这些帧可以在网络上传输。

在TCP/IP协议族中,每一层都向上一层提供服务,并利用下一层的服务。数据在层与层之间的传输过程中会进行封装和解封装操作,这是为了添加或删除与每一层的协议相关的头信息或尾信息。这种分层结构使得网络编程更加灵活和可扩展,因为新的协议可以添加到任何一层,而不会对其他层造成影响。

在进行网络编程时,理解这些层次和它们之间的交互是非常重要的。要设计和实现网络应用程序,你需要了解不同层次之间的数据传输格式、协议规范和交互方式。此外,还需要考虑如何处理错误、保证数据的安全性和隐私保护等问题。通过深入了解TCP/IP协议族的结构和功能,你将能够更好地进行网络编程并开发出高效可靠的网络应用程序。

TCP(传输控制协议)和UDP(用户数据报协议)是在网络通信中常用的两种协议,它们有以下区别和优缺点:

TCP协议:

  • TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,旨在适应支持多网络应用的分层协议层次结构。它提供可靠的通信服务,假设可以从较低级别的协议获得简单的、可能不可靠的数据报服务。TCP是面向连接的,可靠的,较慢传输大量数据的首部字节仅8个字节的。
  • 连接的建立与终止:TCP是一种面向连接的协议,在传输数据之前需要建立连接。一旦建立连接,数据可以在两个方向上传输。终止连接时也需要进行握手。
  • 可靠的数据传输:TCP提供可靠的数据传输,通过序列号、确认机制、重传机制等方式确保数据的顺序和完整性。
  • 流量控制:TCP通过滑动窗口机制实现流量控制,可以动态地调整发送速率,避免网络拥塞。
  • 拥塞控制:TCP通过拥塞控制算法(如慢开始、拥塞避免、快重传等)来动态地调整发送速率,以避免网络拥塞。
  • 传输效率:由于TCP的可靠性和流量控制机制,其传输效率相对较低。过多的握手和确认机制会消耗一定的时间和带宽。
  • 适用场景:TCP适用于可靠性要求较高的场景,如文件传输、电子邮件、Web浏览等。

UDP协议:

  • UDP(用户数据报协议)是一种简单的面向数据报的传输层协议。它提供的是非面向连接的、不可靠的数据流传输。UDP的首部字节最小20字节,最大60字节。
  • 无连接:UDP是一种无连接的协议,不需要建立和终止连接,因此传输数据更快速。
  • 简单的数据传输:UDP简单地传输数据,不保证数据的顺序和完整性。适用于简单的实时应用,如音频和视频流。
  • 头部开销小:UDP的头部开销比TCP小,因此在某些场景下可以提供更高的吞吐量。
  • 流量控制和拥塞控制:UDP没有流量控制和拥塞控制机制,因此可能会出现网络拥塞和丢包问题。
  • 传输效率:由于UDP的无连接性质和简单的数据传输,其传输效率相对较高。适用于对实时性要求较高的场景,如直播、游戏等。
  • 适用场景:UDP适用于实时性要求较高且可靠性要求不高的场景,如视频通话、在线游戏、实时音视频等。

总之,TCP和UDP都有各自的优点和适用场景。TCP的主要优点是可靠性和顺序性,适用于可靠性要求较高的场景;而UDP的主要优点是快速和简单的数据传输,适用于实时性要求较高且可靠性要求不高的场景。在实际应用中,需要根据具体需求选择合适的协议。

三次握手四次挥手

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,用于在计算机网络中提供可靠的数据传输服务。为了确保客户端和服务器端的可靠连接,TCP在建立连接时需要进行三次握手,这个过程也被称为TCP三次握手。其目的是确认双方的接收能力和发送能力是否正常,从而对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步。

"seq"是TCP协议中的一个字段,全称为Sequence Number,也就是序列号。这个字段占32位,标识从TCP源端向目的端发送的字节流,由发起方在发送数据时进行标记。其主要作用是帮助TCP协议拼凑接收到的数据包,根据序列号来确定数据包的顺序,并能够确定是否有数据包丢失。

建立连接时三次握手的目的

主要是为了防止已失效的连接请求突然又传送到另一端,被误认为是新的连接请求。如果此时另一端再次向一方发出确认报文,同意建立连接,就会产生错误

  • 第一次握手: 客户端向服务器端发送报文
    证明客户端的发送能力正常
  • 第二次握手:服务器端接收到报文并向客户端发送报文
    证明服务器端的接收能力、发送能力正常
  • 第三次握手:客户端向服务器发送报文
    证明客户端的接收能力正常

具体来说,三次握手的过程如下:

  1. 我:一起玩吗?
  2. 好友:好滴!
  3. 我:上号!
  1. 第一次握手:客户端发送SYN包 (seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
  2. 第二次握手:服务器收到SYN包后,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK包后,向服务器发送确认包ACK(ack=y+1),此包发送完毕后,客户端和服务器进入ESTABLISHED状态,完成三次握手。

如果使用两次握手会这样?

客户端向服务器端发送的请求报文由于网络等原因滞留,未能发送到服务器端,此时连接请求报文失效,客户端会再次向服务器端发送请求报文,之后与服务器端建立连接,当连接释放后,由于网络通畅了,第一次客户端发送的请求报文又突然到达了服务器端,这条请求报文本该失效了,但此时服务器端误认为客户端又发送了一次连接请求,两次握手建立好连接,此时客户端忽略服务器端发来的确认,也不发送数据,造成不必要的错误和网络资源的浪费。

具体来说,四次挥手的过程如下:

例子:

  1. 我:不玩了。
  2. 朋友:好吧。
  3. 朋友:那我也不玩了
  4. 我:再见
  1. 第一次挥手:主动关闭连接的一方(假设为客户端)发送一个FIN包,初始序列号为 x,用来关闭主动方到被动关闭方的数据传送;
  2. 第二次挥手:被动关闭连接的一方(假设为服务器)收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1 , ack = x + 1;
  3. 第三次挥手:被动关闭连接的一方发送一个FIN包,初始序列号为 y,用来关闭被动关闭方到主动关闭方的数据传送;
  4. 第四次挥手:主动关闭连接的一方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1 至此完成四次挥手。

为什么需要四次挥手

由于TCP协议是全双工模式(全双工模式是一种允许数据同时在两个方向上传输的通信方式,这意味着发送设备和接收设备都具备独立的接收和发送能力) 每个方向都需要单独断开一次连接,因此需要四次挥手来关闭连接,这个过程也被称为TCP四次挥手。其目的是为了在断开连接时确保数据的完整性和可靠性。

相关推荐
陌殇殇7 分钟前
Hadoop 003 — JAVA操作MapReduce入门案例
java·hadoop·mapreduce
march of Time10 分钟前
图数据库介绍及应用,go和Java使用图数据库
java·数据库·golang
CodeCraft Studio12 分钟前
PDF处理控件Aspose.PDF教程: 在 Java 中编辑 PDF 页面大小
java·pdf·aspose·aspose.pdf
异常君13 分钟前
Redis String 类型的底层实现与性能优化
java·redis·性能优化
白总Server17 分钟前
Golang实现分布式Masscan任务调度系统
java·运维·服务器·开发语言·分布式·后端·golang
lb29171 小时前
关于golang热加载安装,实时响应
开发语言·后端·golang·热加载
A22741 小时前
自定义线程池 4.0
java·线程池
康小庄1 小时前
AQS独占模式——资源获取和释放源码分析
java·开发语言·jvm·spring boot·spring·spring cloud·nio
阿昌喜欢吃黄桃1 小时前
mac安装mvnd结合idea
java·maven·idea·编译·打包·mvnd·编译打包
羊小猪~~1 小时前
数据库学习笔记(十五)--变量与定义条件与处理程序
数据库·人工智能·笔记·后端·sql·学习·mysql