【网络基础知识】详解TCP/IP协议栈

一、TCP/IP协议栈

TCP/IP协议栈是一个网络通信模型,它定义了电子设备如何通过网络进行相互通信。这个模型是基于分层的概念构建的,TCP属于传输层,IP属于网络层,每一层负责不同的网络通信任务。
传输层提供端到端的数据传输服务。TCP提供可靠的、面向连接的服务,确保数据的完整性和顺序,TCP 通过三次握手建立连接
网络层负责数据包从源到目的地的传输和路由选择。主要协议是IP(Internet Protocol,网际协议),负责数据包的寻址和路由。包括IP地址分配、路由协议等。通过 IP 地址进行寻址和路由,将数据包从源头路由到目的地。

二、什么是TCP三次握手四次挥手

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP连接的建立和终止需要使用特定的握手过程,即所谓的“三次握手”和“四次挥手”。

TCP三次握手(TCP Three-Way Handshake)

  1. SYN(同步序列编号) - 客户端选择一个初始序列号x,发送一个SYN包到服务器,以开始一个连接请求。此时,客户端进入SYN_SENT状态。
  2. SYN-ACK(同步-确认) - 服务器收到SYN包后,如果同意连接,会分配TCP资源,并发送一个SYN-ACK包。服务器选择自己的初始序列号y,并确认客户端的序列号x(ACK(x+1))。此时,服务器进入SYN_RCVD状态。
  3. ACK(确认) - 客户端收到SYN-ACK包后,会发送一个ACK包给服务器,确认服务器的序列号y(ACK(y+1))。客户端此时进入ESTABLISHED状态。服务器收到ACK包后,也进入ESTABLISHED状态。
    完成这三次握手后,TCP连接建立成功,数据可以开始传输。

TCP四次挥手(TCP Four-Way Wavehand)

  1. FIN(结束) - 当客户端完成数据传输并希望断开连接时,它发送一个FIN包,进入FIN-WAIT-1状态。
  2. ACK(确认) - 服务器收到FIN包后,发送一个ACK包确认,并进入CLOSE-WAIT状态。客户端收到ACK包后,进入FIN-WAIT-2状态。
  3. FIN(结束) - 服务器完成数据传输后,发送一个FIN包给客户端,请求关闭其端的连接。
  4. ACK(确认) -客户端收到服务器的FIN包后,发送一个ACK包进行确认,然后进入TIME-WAIT状态.经过一段时间(称为2MSL即最大报文段生存时间的两倍)后,客户端确保服务器接收到最终的ACK包,然后关闭连接.服务器收到ACK后,关闭连接。
    完成这四次挥手后,TCP连接被完全关闭。

为什么是三次握手和四次挥手?

  • 三次握手确保了双方的接收和发送通道都是开放的,可以开始可靠地传输数据。
  • 四次挥手是因为TCP连接是全双工的,即客户端和服务器都可以独立地开始和结束数据发送。因此,每个方向的连接都需要单独关闭。
    三次握手和四次挥手是TCP协议的核心特性,确保了连接的建立和终止都是可靠和有序的。

三、TCP四次挥手客户端为什么要在TIME-WAIT状态等待2MSL最大报文段生存时间的2倍后再关闭连接?有什么原因吗?

TCP四次挥手过程中客户端在TIME-WAIT状态等待2MSL((Maximum Segment Lifetime),最大报文段生存时间的2倍)的原因主要包括以下几点1. 确保数据传输的完整性 - 在数据传输结束后,可能还有数据包在网络中未到达目的地。TIME-WAIT状态确保了即使最后一个确认(ACK)在网络中丢失,发送方也能够重传FIN包,从而保证连接的可靠关闭。
2. 允许旧的数据包在网络中消失 - 由于网络延迟或重传,可能存在一些旧的数据包在连接关闭后仍然在网络上。2MSL时长可以确保这些旧的数据包在新连接建立之前在网络中消失,避免与新连接的数据包混淆。
3. 防止“已失效”的FIN包影响新连接 - 如果客户端立即关闭连接,之前发送的FIN包可能在网络中延迟到达服务器,导致服务器错误地再次关闭一个已经不存在的连接。等待2MSL可以确保这种情况不会发生。
4. 处理延迟到达的ACK包 - 如果在四次挥手的最后阶段,服务器由于某些原因未能及时接收到客户端的最终确认(ACK),服务器可能会重传FIN包。TIME-WAIT状态确保客户端能够接收到这个迟到的FIN包并进行适当的处理。
5. 遵循TCP规范 - TCP协议规范要求等待2MSL时长,这是一个标准的做法,用于确保所有实现都能够在关闭连接时保持一致的行为。
6. 避免新旧连接混淆 - 如果客户端很快就重新尝试与同一服务器建立连接,等待2MSL可以确保前一个连接的所有数据包都已经从网络中清除,避免与新连接混淆。
2MSL的时长通常设置为120秒,但这个值可以根据网络环境和需求进行调整。等待2MSL是TCP连接管理的一个重要部分,它确保了TCP连接的可靠性和数据传输的完整性。
2MSL的等待时间虽然可能导致连接释放的延迟,但它对于维护TCP连接的可靠性和防止数据包混淆至关重要。在某些场景下,如果应用程序需要快速重用端口,可以通过设置SO_REUSEADDR套接字选项来缩短或绕过TIME-WAIT状态。

四、详细生动形象的解释下这段话:由于网络延迟或重传,可能存在一些旧的数据包在连接关闭后仍然在网络上。2MSL时长可以确保这些旧的数据包在新连接建立之前在网络中消失,避免与新连接的数据包混淆。

让我们用一个生动的比喻来解释这个概念想象一下,网络就像一条繁忙的高速公路,而TCP连接就像是在这条高速公路上行驶的一辆汽车。当汽车(TCP连接)到达目的地后,它需要安全地离开高速公路,以避免发生事故或阻碍交通。在这个过程中,“2MSL”(最大报文段生存时间的两倍)就像是一个"清洁时间",确保汽车离开后,它可能遗留在路面上的任何碎片(旧的数据包)都被清理干净,这样新汽车(新的TCP连接)就不会因为这些碎片而发生故障或混淆。
现在,让我们更详细地分解这个过程:

  1. 汽车行驶(TCP连接):汽车在高速公路上行驶,就像TCP连接在网络上传输数据。
  2. 汽车到达目的地(连接关闭请求):汽车到达目的地后,司机希望安全地离开高速公路。这就像TCP连接中的一方请求关闭连接。
  3. 遗留碎片(旧数据包):在汽车行驶过程中,可能会有一些碎片从车上掉落,比如丢失的货物或车辆部件。这就像在TCP连接过程中,由于网络延迟或重传,一些旧的数据包可能仍然在网络上。
  4. 清理时间(2MSL时长):汽车离开后,高速公路管理部门会等待一段时间,以确保所有遗留的碎片都被清理干净。这个等待时间就是2MSL时长,它确保了所有旧的数据包都有足够的时间在网络中消失(坐等消失好dege残忍)。
  5. 新汽车上路(新TCP连接建立):在清理时间过后,新汽车可以安全地上路,不必担心与旧汽车的碎片发生冲突。这就像在TCP连接关闭后,新的连接可以在没有旧数据包干扰的情况下建立。
  6. 避免混淆(确保数据包正确归属):若没有这个清理时间,新汽车可能会遇到旧汽车的碎片,这可能导致混淆,比如新汽车可能会错误地将旧碎片当作自己的部件。在TCP连接中,若没有2MSL时长,新连接可能接收到旧数据包,导致数据混淆或错误。
    通过这个比喻,我们可以理解2MSL时长的重要性:它为网络提供了一个"清洁"期,确保旧的数据包在新的TCP连接建立之前被清除,从而维护了网络通信的清晰和准确。

五、TCP四次挥手是由服务端还是客户端发起的?

TCP四次挥手(Four-way handshake)是TCP连接终止过程中使用的术语,用于描述两个通信端点(客户端和服务器)如何通过发送特定的TCP段来关闭它们的连接。四次挥手不是由服务端或客户端单方面发起的,而是由任何一端发起的断开连接的过程。
以下是TCP四次挥手的四个步骤:

  1. FIN_WAIT_1:主动关闭方(可以是客户端或服务端)发送一个FIN(结束)标志位被设置的TCP段,用来关闭主动方到被动方的连接。
  2. CLOSE_WAIT:被动关闭方接收到FIN后,发送一个ACK(确认)标志位被设置的TCP段作为回应,并进入CLOSE_WAIT状态。此时被动关闭方可以准备关闭它的写入方向。
  3. LAST_ACK:被动关闭方发送一个FIN标志位被设置的TCP段,请求关闭其到主动关闭方的连接。
  4. TIME_WAIT:主动关闭方接收到这个FIN后,发送一个ACK标志位被设置的TCP段作为回应,并进入TIME_WAIT状态。经过足够的时间以确保被动关闭方接收到最终的ACK后,主动关闭方关闭连接。
    在TCP连接生命周期中,任何一方都可以在完成数据传输后决定关闭连接,因此可以是客户端或服务端发起四次挥手过程。通常发起连接关闭的一方会首先发送FIN,而另一方会响应并最终关闭它的发送方向,完成连接的完全关闭。

六、TCP四次挥手各个阶段及所处状态

TCP的四次挥手过程中的"LAST_ACK"阶段是被动关闭方响应主动关闭方的FIN请求并发送自己的FIN包之后,等待主动关闭方确认的阶段。
以下是TCP四次挥手的各个阶段,包括LAST_ACK阶段的详细说明

  1. FIN_WAIT_1:主动关闭方(可以是客户端或服务器)决定关闭连接,并发送一个FIN标志位被设置的TCP段,进入此状态。
  2. CLOSE_WAIT:被动关闭方接收到FIN后,发送一个ACK确认,并进入CLOSE_WAIT状态,此时主动关闭方接收到ACK后进入FIN_WAIT_2状态。
  3. FIN_WAIT_2:主动关闭方在接收到被动关闭方的ACK后,进入此状态,等待接收被动关闭方的FIN请求。
  4. LAST_ACK:当被动关闭方准备好关闭连接时,它发送一个自己的FIN标志位被设置的TCP段。这个FIN段被发送后,被动关闭方进入LAST_ACK状态,等待主动关闭方对此FIN的确认。
  5. TIME_WAIT:主动关闭方接收到来自被动关闭方的FIN后,发送一个ACK确认,并进入TIME_WAIT状态。在2MSL时长后,主动关闭方确保被动关闭方接收到了最终的ACK,然后关闭连接。
  6. CLOSED:在TIME_WAIT超时后,主动关闭方关闭连接,进入CLOSED状态。同时,被动关闭方在发送完FIN并接收到最终的ACK后,也会进入CLOSED状态。
    LAST_ACK是被动关闭方在发送完FIN并等待最终确认的阶段。这个阶段确保了TCP连接的完全关闭,并且所有未完成的事务都已处理完毕。

七、详述TCP的头部包含啥

TCP(传输控制协议)头部是TCP数据包的重要组成部分,用于控制数据的传输和确保数据的可靠性。TCP头部包含以下主要字段1. 源端口号(Source Port) - 16位:标识发送方的端口号。
2. 目的端口号(Destination Port) - 16位:标识接收方的端口号。
3. 序列号(Sequence Number) - 32位:用于在数据流中标识字节的顺序。这个序列号用于确保数据包的顺序和完整性。
4. 确认号(Acknowledgment Number) - 32位:当ACK标志位被设置时,此字段包含期望收到的下一个数据包的序列号,表示到目前为止已经成功接收了多少数据。
5. 数据偏移(Data Offset) - 4位:指示TCP头部的长度(以32位字为单位)。因为TCP头部可能包含选项字段,所以头部的长度可能会变化。
6. 保留(Reserved) - 6位:这些位必须设置为0,为将来使用保留。
7. 标志位(Flags) - 6位:控制TCP的不同功能,包括SYN、ACK、PSH、RST、URG、ECE和CWR。
8. 窗口大小(Window Size) - 16位:用于流量控制,指示接收方可以接收的最大数据量。
9. 校验和(Checksum) - 16位:包含头部、数据和其他一些信息的校验和,用于错误检测。
10. 紧急指针(Urgent Pointer) - 16位:当URG标志位被设置时,此字段指示数据中紧急数据的结束位置。
11. 选项(Options) - 可变长度:包含附加的TCP配置选项,如最大报文段长度(MSS)、窗口缩放因子、选择性确认(SACK)、时间戳等。
12. 填充(Padding) - 可变长度:确保TCP头部是32位字对齐的填充字节。
TCP头部的设计使得它既能够提供可靠的数据传输,又能够适应不同的网络环境和应用需求。通过序列号和确认号,TCP能够确保数据包的顺序和完整性。通过窗口大小,TCP能够进行流量控制,避免发送方发送过多数据导致接收方处理不过来。通过各种标志位,TCP能够控制连接的建立、维护和释放。通过选项字段,TCP能够支持各种高级特性和优化。

八、UDP和TCP的区别

UDP(User Datagram Protocol,用户数据报协议)和TCP(Transmission Control Protocol,传输控制协议)是两种在传输层使用的协议,它们在网络通信中扮演着重要的角色,但具有不同的特性和用途。以下是UDP和TCP的主要区别1. 连接性 - TCP:面向连接的协议。在数据传输开始之前,需要通过三次握手建立连接。

  • UDP:无连接的协议。数据传输前不需要建立连接,直接发送数据。
  1. 可靠性 - TCP:提供可靠的数据传输服务,通过序列号、确认应答、重传机制等确保数据正确送达。
    • UDP:不保证数据的可靠性,不进行错误检测和重传,可能发生数据丢失或乱序。
  2. 速度 - TCP:由于需要维护连接状态和进行错误处理,通常速度较慢。
    • UDP:传输速度快,适合对实时性要求高的应用。
  3. 数据传输方式 - TCP:面向字节流的传输,数据被看作是一连串的字节流。
    • UDP:面向报文的传输,数据被分割成一个个的数据报。
  4. 拥塞控制 - TCP:具有拥塞控制机制,可以根据网络状况调整数据传输速率。
    • UDP:不进行拥塞控制,不考虑网络拥塞情况。
  5. 流量控制 - TCP:具有流量控制机制,通过滑动窗口协议来控制发送速率。
    • UDP:不进行流量控制。
  6. 序列号和确认 - TCP:使用序列号和确认应答机制来确保数据的顺序和完整性。
    • UDP:不使用序列号和确认机制。
  7. 用途 - TCP:适用于需要可靠传输的应用,如Web浏览(HTTP)、文件传输(FTP)、邮件传输(SMTP)等。
    • UDP:适用于对实时性要求高的应用,如在线游戏、实时视频会议、DNS查询等。
  8. 头部开销 - TCP:头部开销较大,包含序列号、确认应答、窗口大小等控制信息。
    • UDP:头部开销较小,只包含源端口、目的端口和长度等基本信息。
  9. 错误处理 - TCP:能够检测数据在传输过程中的错误,并进行重传。
    • UDP:不提供错误检测和重传机制。
      选择UDP或TCP取决于应用的需求。如果需要可靠、有序的数据传输,TCP是更好的选择。如果需要快速传输且可以容忍一定程度的数据丢失,UDP可能更合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148682.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之线性表——LeetCode:67. 二进制求和,27. 移除元素,26. 删除有序数组中的重复项

67. 二进制求和 题目描述 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 运行代码(javaC) class Solution {public String addBinary(String a, String b) {StringBuilder ansnew StringBuilder();int ca0;for(i…

四川财谷通信息技术有限公司与抖音小店的深度合作

在数字经济蓬勃发展的今天,电商平台已成为推动社会经济增长的重要引擎。其中,抖音小店作为短视频与电商深度融合的产物,凭借其庞大的用户基础、精准的流量分发机制以及创新的购物体验,迅速崛起为电商领域的一股不可忽视的力量。而…

CSS的表格属性

border属性 规定CSS表格边框。 table,td{border: 1px solid green;/*1px表示设置边框的大小,solid表示边框为实线,green表示边框的颜*/} border-collpapse属性 设置表格的边框是否被折叠成一个单一的边框或隔开。 table{border-collapse: collapse;} wi…

[spring]springboot日志

文章目录 一. 日志的用途二. 打印日志三. 日志框架门面模式(外观模式)SLF4J框架介绍 四. 日志格式日志级别配置日志级别日志持久化配置日志文件分割配置日志格式 五. 更简单的日志输出 一. 日志的用途 二. 打印日志 得到日志对象: 需要使用日志工厂LoggerFactory RestControl…

【避雷指南】自学AI人工智能常踩的4个大雷区

1、数学基础 学习人工智能时,有一种常见的误解,认为一定要数学学的很好,才能进一步学人工智能。这种观念并不正确。虽然数学是AI的基石,为算法和模型提供了理论基础,但过分沉迷于数学理论可能会让学习过程变得枯燥无味…

【第十二章:Sentosa_DSML社区版-机器学习之回归】

目录 12.1 线性回归 12.2 决策树回归 12.3 梯度提升决策树回归 12.4 保序回归 12.5 XGBoost回归 12.6 随机森林回归 12.7 广义线性回归 12.8 LightGBM回归 12.9 因子分解机回归 12.10 AdaBoost回归 12.11 KNN回归 12.12 高斯过程回归 12.13 多层感知机回归 【第十…

UML类图绘制

目录 前言 一、如何在UML中表示一个类 二、类之间关系的表示 1.继承关系 2.关联关系 ①单向关联 ②双向关联关系 ③自关联关系 3.聚合关系 4.组合关系 5.实现关系 6.依赖关系 前言 在学习面向对象语言时,我们可以使用UML类图来描述将要编写的程序中类与…

NASA:A-Train 云分级数据集(用于深度学习模型)

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 A-Train 云分级数据集 简介 ATCS 是一个数据集,旨在训练深度学习模型,以便对多角度卫星图像中的云进行体积分割。 该数据集包括来自 PARASOL 任务上 POLDER 传感器的多角度偏…

docker如何升级MySQL为最新版本

今天安全扫描发现MySQL存在漏洞,不用想别的升级到最新版。本篇文章有两个目的,1)为自己做一个记录,下次升级的时候不用再浪费时间查资料;2)给大家一点帮助; 因为我是docker部署,所以…

在Windows系统上安装的 flatbuffers C++ 库

步骤一 下载:https://github.com/google/flatbuffers git clone gitgithub.com:google/flatbuffers.git步骤二 打开安装目录,然后再打开该目录下的powershell, 新建build目录 cd build cmake ..步骤三 进入步骤二生成的build目录里面,点击FlatBuffers.sln,打开vs2019 补充…

【巅峰算力,静谧之作】4卡4090GPU深度学习“静音”服务器

各位同仁,随着人工智能浪潮的汹涌澎湃,我们正步入一个前所未有的创新纪元。在这个充满挑战与机遇的时代,我愈发频繁地在工作场景中邂逅那些致力于深度学习探索的智者们。他们,对计算力的渴望如同对知识的追求一般,永无…

阿里巴巴首页pc端1688店铺招牌店铺装修教程

1688运营1688批发首页1688装修模板1688店铺怎么装修模板自定义装修代码1688店铺装修模板旺铺装修阿里店铺首页怎么装修1688店铺装修教程视频全屏通栏代码1688店铺装修模板阿里巴巴店铺装修设计 阿里巴巴首页pc端1688店铺招牌店铺装修教程 工具:一秒美工

海外仓与前置仓有什么不同,如何选择合适的WMS系统?

在跨境电商和国际贸易的广阔舞台上,海外仓与前置仓作为两种重要的物流模式,各自以其独特的运营方式和目标,为卖家和消费者提供了高效、便捷的物流服务。 1.海外仓:海外仓是在国外设立的存储仓库,主要用于存放货物并服…

【WRF工具】WRF Domain Wizard第二期:服务器中下载及安装

【WRF工具】WRF Domain Wizard第二期:服务器下载及安装 准备WRF Domain Wizard下载及安装WRF Domain Wizard下载WRF Domain Wizard安装添加环境变量(为当前用户永久添加环境变量)Java环境安装报错-Exception in thread "main" java…

从入门到精通:Spring Boot 100个技术关键词

Spring Boot 是一个基于Spring框架的快速开发框架,旨在简化Spring应用的初始搭建以及开发过程。通过掌握本指南中的100个关键技术关键词,你将逐步了解Spring Boot的核心概念、自动配置、依赖管理、Web开发、数据库操作、安全性、测试等方面的知识。每个关…

【通俗易懂介绍OAuth2.0协议以及4种授权模式】

文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 …

从视觉到现实:掌握计算机视觉技术学习路线的十大步骤

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于【计算机视…

北京未来感知科技定位技术:UWB定位技术详解

一、UWB定位技术是什么? UWB,全称为Ultra Wide Band(超宽带)技术,是一种无线载波通信技术[1][2]。它不同于传统的无线通信技术,不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据&#x…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow【上篇】 一、TFLM是什么?二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module named numpy问题解…

【Go】探索Go语言中的Map

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…