详细图解三次握手四次挥手,精讲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四次挥手。其目的是为了在断开连接时确保数据的完整性和可靠性。

相关推荐
ok!ko1 小时前
设计模式之原型模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·原型模式
2401_857622661 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589361 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
吾爱星辰2 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
哎呦没3 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch3 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
编程、小哥哥3 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
IT学长编程4 小时前
计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·玩具租赁系统
莹雨潇潇4 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
杨哥带你写代码4 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端