Android开发知识学习——TCP / IP 协议族

文章目录

  • 学习资源来自:扔物线
  • TCP / IP 协议族
  • TCP连接
    • TCP 连接的建立与关闭
      • TCP 连接的建立
        • 为什么要三次握手?
      • TCP 连接的关闭
        • 为什么要四次挥手?
      • 为什么要⻓连接?
  • 常见面试题
  • 课后题

学习资源来自:扔物线

TCP / IP 协议族

  • 一系列协议所组成的一个网络分层模型
  • 为什么要分层?
    因为网络的不稳定性
    在这里插入图片描述
  • Application Layer 应用层:HTTP、FTP、DNS,提供了网络应用程序之间的通信机制
  • Transport Layer 传输层:TCP、UDP,提供可靠的端到端的数据传输服务的层次
  • Internet Layer 网络层:IP,网络中所有数据传输的入口和出口
  • Link Layer 数据链路层:以太网、Wi-Fi,处理与传输媒介(如双绞线、光纤、无线电波等)的物理接口细节
    在这里插入图片描述

TCP连接

什么叫做连接
通信双方建立确认「可以通信」,不会将对方的消息丢弃,即为「建立连接」

TCP 连接的建立与关闭

TCP 连接的建立

在这里插入图片描述

① 首先客户端向服务器发送一个 SYN 包,并等待服务器确认,其中:

  • 标志位为 SYN,表示请求建立连接;
  • 序号为 Seq = x(x 一般取随机数);
  • 随后客户端进入 SYN-SENT 阶段。

② 服务器接收到客户端发来的 SYN 包后,对该包进行确认后结束 LISTEN 阶段,并返回一段 TCP 报文,其中:

  • 标志位为 SYN 和 ACK,表示确认客户端的报文 Seq 序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接;
  • 序号为 Seq = y;
  • 确认号为 Ack = x+ 1,表示收到客户端的序号 Seq 并将其值加 1 作为自己确认号 Ack 的值,随后服务器端进入 SYN-RECV 阶段。

③ 客户端接收到发送的 SYN + ACK 包后,明确了从客户端到服务器的数据传输是正常的,从而结束 SYN-SENT 阶段。并返回最后一段报文。其中:

  • 标志位为 ACK,表示确认收到服务器端同意连接的信号;
  • 序号为 Seq = x + 1,表示收到服务器端的确认号 Ack,并将其值作为自己的序号值;
  • 确认号为 Ack= y + 1,表示收到服务器端序号 seq,并将其值加 1 作为自己的确认号 Ack 的值。
  • 随后客户端进入 ESTABLISHED。
    当服务器端收到来自客户端确认收到服务器数据的报文后,得知从服务器到客户端的数据传输是正常的,从而结束 SYN-RECV 阶段,进入 ESTABLISHED 阶段,从而完成三次握手
为什么要三次握手?

检查当前这个网络的情况是否满足可靠传输的基本条件
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

具体例子:“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。

TCP 连接的关闭

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次挥手”。

在这里插入图片描述

比如客户端初始化的序列号ISA=100,服务端初始化的序列号ISA=300。TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共回复了2000个字节的数据。

  • 第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。

  • 第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。

  • 第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号seq=2350(2300+50)。

  • 第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。

为什么要四次挥手?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

为什么要⻓连接?

因为移动网络并不在 Internet 中,而是在运营商的内网,并不具有真正的公网 IP,
因此当某个 TCP 连接在一段时间不通信之后,网关会出于网络性能考虑而关闭这条
TCP 连接和公网的连接通道,导致这个 TCP 端口不再能收到外部通信消息,即 TCP
连接被动关闭

⻓连接的实现方式
心跳。即在一定间隔时间内,使用 TCP 连接发送超短无意义消息来让网关不能将自
己定义为「空闲连接」,从而防止网关将自己的连接关闭。

常见面试题

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

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

  • 为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
    这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了

课后题

1.【单选题】TCP / IP 协议族中,HTTP 协议在哪一层?
A. 应用层
B. 传输层
C. 网络互联层
D. 数据链路层

答案: A
答案解析:HTTP(Hypertext Transfer Protocol)协议是一种应用层协议,它用于在网络中传输超文本(例如网页)。在TCP/IP协议族中,HTTP协议位于最上层,也就是应用层。

2.【单选题】TCP / IP 协议族中,TCP 协议在哪一层?
A. 应用层
B. 传输层
C. 网络互联层
D. 数据链路层

答案: B
答案解析:TCP(Transmission Control Protocol)协议是一种传输层协议,它在TCP/IP协议族中位于传输层。TCP协议负责将数据分段并提供可靠的传输,确保数据能够在网络中正确地传输到目标地址

3.【单选题】TCP / IP 协议族中,IP 协议在哪一层?
A. 应用层
B. 传输层
C. 网络互联层
D. 数据链路层

答案: C
答案解析:IP协议(Internet Protocol)是TCP/IP协议族中的核心协议之一,它位于网络互联层。IP协议负责将数据包从一个网络发送到另一个网络,确保数据的路由和传输

4.【单选题】TCP 协议的主要作用是?
A. 进行具体的网络应用交互
B. 保证网络数据的可靠传输
C. 解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据

答案: B
答案解析:TCP(Transmission Control Protocol,传输控制协议)的主要作用是保证网络数据的可靠传输。TCP协议是一种面向连接的协议,它提供了一种可靠的、有序的和错误校验的数据传输方式。在TCP协议中,发送方和接收方之间建立连接,然后通过确认、序列号和流量控制等机制,确保数据的可靠传输。相比之下,应用层协议(如HTTP)主要负责具体的网络应用交互,而网络层协议(如IP)主要负责解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据。因此,TCP协议的主要作用是保证网络数据的可靠传输

5.【单选题】IP 协议的主要作用是?
A. 进行具体的网络应用交互
B. 保证网络数据的可靠传输
C. 解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据

答案: C
答案解析:IP协议是TCP/IP协议族中的核心协议之一,它负责将数据包从一个网络发送到另一个网络,确保数据的路由和传输。IP协议通过将数据分成一个个的数据包,并在每个数据包中包含源IP地址和目标IP地址,来实现数据的路由和传输。因此,IP协议的主要作用是解决在网络上传输包的问题,例如网络寻址、以包为单位发送网络数据

  1. 【作文题】 简述 TCP 连接建立时的「三次(三向)握手」

答案: TCP 连接建立时的 “三次握手” 是指在 TCP 协议中,建立连接时需要发送三个数据包来确认连接的建立。具体过程如下:

  1. SYN:首先,客户端发送一个带有 SYN(同步)标志的数据包到服务器。这个数据包中会包含一个随机生成的序列号,假设为 X。
  2. SYN-ACK:收到 SYN 包后,服务器会向客户端发送一个带有 SYN 和 ACK(确认)标志的数据包。这个数据包中包含两个序列号,一个是服务器自己随机生成的,假设为
    Y,另一个是对客户端的确认号,这个确认号等于客户端的序列号加一,即 Y = X + 1。
  3. ACK:最后,客户端再向服务器发送一个 ACK 数据包,其序列号等于服务器的序列号加一,即 Y = X + 2。 这样,就完成了 TCP 连接的三次握手过程,从而建立了可靠的连接。
  1. TCP为什么是三次握手不是两次握手?

答案: TCP协议使用三次握手是为了确保连接建立成功、确认收到数据包和对方的初始序列号以及防止已失效的连接请求报文突然又传送到了服务器1。

如果使用两次握手,在第一次握手时,客户端发送SYN数据包,服务器收到后没有发送确认报文,客户端超时后重新发送SYN数据包,此时如果网络中存在重传机制,客户端可能会接收到旧的SYN数据包,导致连接建立错误1。

  1. 【作文题】 简述 TCP 连接关闭时的「四次挥手」

答案: TCP 连接关闭时的 “四次挥手” 是指在 TCP 协议中,关闭连接时需要发送四个数据包来确认连接的关闭。具体过程如下:

  1. FIN:首先,客户端发送一个带有 FIN(结束)标志的数据包到服务器,用来关闭客户端到服务器的数据传送。
  2. ACK:服务器收到 FIN 后,发送一个带有 ACK(确认)标志的数据包到客户端,确认序号为收到序号加一,服务器进入 CLOSE_WAIT 状态。
  3. FIN:然后,服务器发送一个带有 FIN 标志的数据包到客户端,用来关闭服务器到客户端的数据传送,服务器进入 LAST_ACK 状态。
  4. ACK:最后,客户端收到 FIN 后,发送一个带有 ACK 标志的数据包到服务器,确认序号为收到序号加一,服务器进入 CLOSED 状态,完成四次挥手。
  1. 【作文题】 为什么 TCP 连接在断开时是四次挥手而不是三次?

答案: TCP 连接在断开时采用四次挥手而不是三次握手,主要是考虑到可靠性的问题
在三次握手的过程中,如果最后一个 ACK 数据包丢失,那么客户端会重新发送一个 FIN 数据包,而服务器会因为无法收到确认而进入 TIME_WAIT 状态。这种情况下,服务器会等待一段时间以确保所有的数据包都已发送完毕,然后才会关闭连接。然而,这段时间内服务器不能接受新的连接,造成了资源的浪费。
为了解决这个问题,TCP 协议采用了四次挥手的过程。在第四次挥手后,服务器可以立即释放连接,而不需要等待一段时间。这样,服务器可以更高效地利用资源,同时也减少了客户端和服务器之间的数据包数量。
因此,TCP 连接断开时采用四次挥手而不是三次握手是为了提高连接的可靠性并优化资源利用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV学习(一)——图像读取

1. 图像入门 读取图像显示图像写入图像 import cv2# 读取图像 img cv2.imread(lena.jpg) print(img.shape)# 显示图像 cv2.imshow(image, img) cv2.waitKey(0) cv2.destroyAllWindows()# 写入图像 cv2.imwrite(image.jpg, img)1.1 读取图像 读取图像cv.imread(filename, fl…

人工智能-softmax回归

回归可以用于预测多少的问题。 比如预测房屋被售出价格,或者棒球队可能获得的胜场数,又或者患者住院的天数。 事实上,我们也对分类问题感兴趣:不是问“多少”,而是问“哪一个”: 某个电子邮件是否属于垃圾…

最新版本QGIS 开始支持cesium 3D TILE 数据源了

最新版本QGIS 也开始支持3D TILE 数据源了!加载和运行速度也是慢,不过都这样,也不是qgis的问题!这东西对网络和性能要求比较高!据说这是cesium社区提供基金让qgis团队开发的,cesium社区真是很有钱啊😁,不过也不奇怪&am…

分享8个分布式Kafka的使用场景

Kafka 最初是为海量日志处理而构建的。它保留消息直到过期,并让消费者按照自己的节奏提取消息。与它的前辈不同,Kafka 不仅仅是一个消息队列,它还是一个适用于各种情况的开源事件流平台。 1. 日志处理与分析 下图显示了典型的 ELK&#xff0…

Matlab中的app设计

1.窗口焦点问题: 窗口焦点问题:确保你的应用程序窗口正常处于焦点状态。有时,其他窗口的弹出或焦点切换可能导致应用程序最小化。点击应用程序窗口以确保它处于焦点状态。 窗口管理:确保你的 MATLAB 或操作系统没有未处理的错误或…

​测绘人注意,你可能会改变历史!

你也许想不到,曾经有一个测绘人员在进行实地测量作业时,在地图上就这么随手一标注,却让这个地方成为了如今的网红打卡地。 这个地方就是外地游客慕名而来的“宽窄巷子”,如果连这个地方都不知道的成都人,就应该不能算…

CSS3表格和表单样式

在传统网页中,表格主要用于网页布局,因此也成为网页编辑的主要工具;在标准化网页设计中,表格的主要功能是显示数据,也可适当辅助结构设计。本章主要介绍如何使用CSS控制表格和表单的显示效果,如表格和表单的…

快速入门:使用 Spring Boot 构建 Web 应用程序

前言 本文将讨论以下主题: 安装 Java JDK、Gradle 或 Maven 和 Eclipse 或 IntelliJ IDEA创建一个新的 Spring Boot 项目运行 Spring Boot 应用程序编写一个简单的 Web 应用程序打包应用程序以用于生产环境 通过这些主题,您将能够开始使用 Spring Boo…

oracle (9)Storage Relationship Strut

Storage & Relationship Strut 存储和关系支柱 目标: 描述数据库的逻辑结构列出段类型其用途列出控制块空间使用的关键字获取存储结构信息 一、基础知识 1、数据库逻辑结构图 2、Types of Segments 段的类型 3、Storage Clause Precedence 存储条款的优先顺序 …

Spring Cloud之Docker的学习【详细】

目录 Docker 项目部署问题 总结 镜像与容器 Docker的安装 Docker基本操作 镜像相关命令 拉取镜像 镜像保存 删除镜像 镜像加载 容器相关命令 删除容器 数据卷 数据卷命令 数据挂载 自定义镜像 Dockerfile 案例 Docker-Compose Compose文件 Docker-Compos…

Termux SFTP如何实现远程文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

CN考研真题知识点二轮归纳(3)

持续更新,上期目录: CN考研真题知识点二轮归纳(2)https://blog.csdn.net/jsl123x/article/details/134111760?spm1001.2014.3001.5501 1.TCP/IP 名称:传输控制协议/网络协议,是一个协议族,主…

管网智慧化建设能为管网提供哪些优势?第3点特别值得注意!

关键词:智能管网、智慧管网、智慧管网建设、智慧燃气、气管网压力监测解决方案 随着信息技术的不断发展,数字城市的发展正在快速向智慧城市推进,而管网智慧化建设是目前智慧城市建设中不可或缺的一个重要举措。 因为早期铺设使用的排水管道…

MathType2024破解版激活序列号

MathType序列号是一款针对该软件而制作的激活工具,大家都知道这款软件在官方是需要花钱购买的,不然得话就只能试用。有很多功能都无法正常使用!而本序列号却可以完美的解决这一难题,因为它可以破解并激活“MathType”,…

jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入,然后写一些测试脚本,这就是你所说的自动化测试,其实这个还不能算是真正的自动化测试,你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

一条 SQL 是如何在 MyBatis 中执行的

前言 MyBatis 执行 SQL 的核心接口为 SqlSession 接口,该接口提供了一些 CURD 及控制事务的方法,另外还可以通过 SqlSession 先获取 Mapper 接口的实例,然后通过 Mapper 接口执行 SQL,Mapper 接口方法的执行最终还是委托到 SqlSe…

Linux学习第25天:Linux 阻塞和非阻塞 IO 实验(二): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接,在正式开始学习前,先把本节的思维导图引入: 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

数字时代新趋势:TikTok算法与海外网红营销的融合策略

在当今数字化时代,社交媒体已经成为品牌推广和市场营销的重要渠道。TikTok作为全球范围内最受欢迎的短视频平台之一,以其独特的算法和用户参与度,正日益成为海外网红营销的热门选择。本文Nox聚星将和大家探讨TikTok算法和海外网红营销之间的融…

全平台七合一万能DIY小程序源码系统 带完整搭建教程

近年来互联网技术的飞速发展,尤其是移动互联网的普及。随着微信、支付宝、百度、抖音、头条等平台的迅速崛起,小程序成为了这些平台上重要的应用形态。这些小程序的应用范围广泛,包括电商、教育、娱乐、生活服务等各个领域。然而,…

【二叉树经典题目】

根据二叉树创建字符串 本题的关键在于什么情况要省略括号,什么情况不能省略: 左右为空可以省略括号 左不为空,右为空可以省略括号左为空,右不为空不能省略括号 class Solution { public://1.左右为空可以省略括号//2.左不为空,右…