TCP/IP五层模型

news2024/9/20 18:36:44

目录

一. 概述

1.TCP基础入门

2.TCP数据报结构

3. TCP/IP五层协议模型讲解:

4. 网络设备所在分层​编辑

5. TCP的三次握手

一. 概述

  作为一名程序员,对于TCP/IP五层协议,重点掌握应用层和传输层,特别是以下两层对应的协议:

1. 应用层:HTTP协议、FTP协议、SMTP协议和POP3协议等。这些协议是应用程序与网络的接口,程序员需要了解其通信过程和数据格式,从而编写适合的程序进行数据交互。

2. 传输层:TCP和UDP协议。TCP协议可确保传输的数据完整性和顺序性,使用范围较广;UDP协议传输速度更快,但无法保证数据的完整性和顺序性。

1.TCP基础入门

1、TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。
2、客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。
3、TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)

2.TCP数据报结构

①序号:Seq(Sequence Number)序号占32位,用来标识从计算机A发送到计算机B的数据包的序号,计算机发送数据时对此进行标记。
②确认号:Ack(Acknowledge Number)确认号占32位,客户端和服务器端都可以发送,Ack = Seq + 1。
③标志位:每个标志位占用1Bit,共有6个,分别为 URG、ACK、PSH、RST、SYN、FIN,具体含义如下:

 URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:建立一个新连接。
FIN:断开一个连接。

3. TCP/IP五层协议模型讲解:

**应用层:**负责程序之间的沟通,简单的电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议等(Telent)等。我们程序员网络编程就是针对应用层来进行的。

**传输层:**负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。

**网络层:**负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。

**数据链路层:**负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。

**物理层:**负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
举例:

  我在网上买一个物品,需要卖家信息(源IP地址)、我的信息(目的IP地址)。物流(协议)要历经广州,长沙,武汉。运输路径可以是空运(广州直达武汉)、慢达(广州、长沙、武汉)。
 

应用层:告诉快递站,卖家要快递给我的货物是什么,根据货物的类型好用相应的包装发送。

应用层负责程序之间的沟通,规定使用的格式。

传输层:我和卖家都不关注中间是怎么传输的,只关心起点和终点对应的就是源IP地址与目的IP地址。

传输层主要关注源IP地址与目的IP地址,不考虑中间路径。

网络层:发货地址是长沙,收获地址是武汉。长沙到武汉可以空运、火车,网络层可选择合适的路径进行运输。

网络层主要负责两个遥远节点之间的路径规划。

数据链路层:运输路径选择了慢达,广州到长沙使用的是货车,长沙再到武汉使用的火车。

数据链路层主要负责两个相邻节点之间的传输。

物理层:网络通信的基础设施,也就是一些网线、光纤、网络接口,也就是网络上的告诉公路。

4. 网络设备所在分层

   何为网络设备,就是联网所需要的设备,如电脑主机、路由器、交换机、集线器等。

**主机:**它的操作系统内核实现了从传输层到物理层的内容,对应的TCP/IP五层模型的下四层即:传输层、网络层、数据链路层、物理层。

**路由器:**它实现了从网络层到物理层,对应的是TCP/IP五层模型的下三层即:网络层、数据链路层、物理层。

**交换机:**它实现从了从数据链路层到物理层,对应的是TCP/IP五层模型的下两层。

**集线器:**只实现了物理层。

5. TCP的三次握手

📝过程描述

①首先 Client 端发送连接请求报文

②Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。

③Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。

 

☕️用川航举例子

①四川8633请求建立连接(SYN),并且发送出序号。
②服务端接受到信号,即有确认号(ACK),此时并同样返回请求序号Seq
③客户端接受到信号,即有确认号(ACK),连接已经建立。

小结:三次握手的关键是要确认对方收到了自己的数据包,这个目标就是通过“确认号(Ack)”字段实现的。计算机会记录下自己发送的数据包序号Seq,待收到对方的数据包后,检测“确认号(Ack)”字段,看Ack = Seq + 1是否成立,如果成立说明对方正确收到了自己的数据包。

📝如果只有两次握手 这个时候客户端没有回应,这样会浪费服务端的资源

📝那你是否思考过为什么需要第三次通信 ?

1、在第一次通信过程中,A向B发送信息之后,B收到信息后可以确认自己的收信能力和A的发信能力没有问题。

2、在第二次通信中,B向A发送信息之后,A可以确认自己的发信能力和B的收信能力没有问题,但是B不知道自己的发信能力到底如何,所以就需要第三次通信。

3、在第三次通信中,A向B发送信息之后,B就可以确认自己的发信能力没有问题。

4、 小结:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

四.TCP的四次挥手
📖建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。

//过程描述

  • A:“任务处理完毕,我希望断开连接。”
  • B:“哦,是吗?请稍等,我准备一下。”
  • 等待片刻后……
  • B:“我准备好了,可以断开连接了。”
  • A:“好的,谢谢合作。”

第一次挥手:Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。

第三次挥手: Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次握手。

 

☕️川航图举例

①客户端申请断开连接即FIN (我这边准备断开连接了)
②服务端接收信息返回,表示我已经接收到 (收到,请稍等,我这边准备一下)
③服务端发送信息表示可以断开连接 (我准备好了,你可以断开连接了)
④客户端接受信息,同时返回信息通知服务端自己收到信息,开始断开 连接(好的,拜拜!)

数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。

📝为什么连接的时候是三次握手,关闭的时候却是四次握手?

①因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
②但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。
③只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。


补充问题

📝TCP的三次握手一定能保证传输可靠吗?不能
三次握手比两次更可靠,但也不是完全可靠,而追加更多次握手也不能使连接更可靠了。因此选择了三次握手。
世界上不存在完全可靠的通信协议。从通信时间成本空间成本以及可靠度来讲,选择了“三次握手”作为点对点通信的一般规则。

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

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

相关文章

国内服务器部署NextChat程序教程

问题描述 NextChat在ChatGPT私人搭建方面广受欢迎,详细的Vercel部署教程建议参考之前的文章《通过NextChat(ChatGPT-Next-Web)低成本给自己或客户部署GPT程序》,在Vercel上部署的方法比较灵活,因为可以自由更改程序内容,所以推荐…

RK3568平台(内存篇)Linux内存管理

一.什么是内存 最直观的,我们买手机,电脑,内存条,都会标明内存是多大,例如途中的8G,16G,128G都指的内存大小。 我们应该都听说过 RAM 存储器,它是一种半导体存储器件。RAM 是英文单词 Random 的缩写,即“随机”的意思。所以 RAM 存储器也称为“随机存储器”。 那么…

Docker续7:docker部署nmt续1:使用haproxy代理nginx

[rootlocalhost ~]# docker stop 30 //停止nginx容器 30 [rootlocalhost ~]# docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

【管理】职业规划三叶草

持续更新。。。。。。。。。。。。。。。 【管理】职业规划三叶草 三叶草模型是什么第一片叶子:兴趣(Interest)第二片叶子:能力(Ability)第三片叶子:价值(Value)将三叶草…

【活动预约】镭速邀您莅临2024年行业案例分享专场线下沙龙活动!

​为了加强行业内外渠道集成商及相关生态合作伙伴的交流合作,共同应对数据安全挑战,提升内外网安全交换系统的应用范围及应用效果,镭速即将举办一场不容错过的2024年行业案例分享专场线下沙龙活动! 活动亮点 ➣行业前沿&#x…

Spring扩展点系列-InstantiationAwareBeanPostProcessor

文章目录 简介测试一1、配置文件Bean注册2、单元测试方法3、测试类4、输出结果结论 测试二1、测试类2、输出结果结论 源码解析postProcessPropertiesCommonAnnotationBeanPostProcessorAnnotationInjectedBeanPostProcessor 总结 简介 spring容器中Bean的生命周期内所有可扩展…

Apache DolphinScheduler大规模任务调度系统对大数据实时Flink任务支持

转载自神龙大侠 我是用olphinScheduler 3.2.1版本做源代码编译部署(部署方式参考我的另外一篇文档《源代码编译,Apache DolphinScheduler前后端分离部署解决方案》) 二进制文件部署本文也适用,只需要修改相对应的配置即可。 资…

科普小课堂:中等硬度的床垫,合适的睡姿,通过日常力量练习提升自身能力以支撑脊柱形态。

文章目录 引言I 选择合适床垫的指标3:1 原则睡得舒服与否II 日常力量练习翻书-胸椎活动度练习猫式-脊柱整体活动度练习III 知识扩展人体脊柱“S”型生理曲线软床垫对腰椎的影响硬床垫对腰椎的影响合适的睡姿引言 女性瘦型体型人群脊柱曲线相对较明显,尤其是腰部曲线,需选择承…

优化LabVIEW中TCP通信速度的方法

在LabVIEW中,TCP通信速度较慢可能由多种因素导致,如数据包处理延迟、阻塞式读取或数据解析效率低等。通过调整读取模式、优化数据处理逻辑、以及使用并行处理结构,可以显著提升TCP通信的速度,使其接近第三方调试工具的表现。LabVI…

DNS介绍(hosts文件,域名结构),面试题(输入url后会发生什么)

目录 DNS 引入 hosts文件 域名 主域名 结构 www 公司/组织/个人名称 后缀 面试题 简单回答 部分https 细节 DNS 引入 域名介绍,url的介绍原理特殊字符的处理,网络行为,http协议请求/响应的格式结构,状态码介绍,临时/永久重定向,http报头常见字段(长/短连接介绍,lo…

阿里云身份证二要素详细使用

初步: 先登录阿里云(找官网链接) 2、云市场搜索身份证二要素 看个人需求选择 3、我选择的是下边这个 4、接下来看文档具体调用(在请求示例中有选择语言的代码 我选择的就是java) 5、在控制台看appcode码 放入代码中…

如何解决企业防盗版/防勒索病毒?一个方案五步搞定!

SPN(Sandbox Proxy Network)解决方案通过创建一个隔离的沙盒环境,为企业提供了一个安全、受控的互联网访问方式。该方案特别适用于防止盗版软件的骚扰和勒索病毒的攻击,确保企业数据和网络环境的安全。 1. 核心功能 物理隔离&…

u盘数据如何恢复,数据恢复技巧分享

在数字化时代,U盘作为便携的数据存储设备,广泛应用于工作、学习和生活中。然而,误删文件、格式化错误或物理损坏等意外情况时有发生,导致重要数据丢失。本文将为你提供一套全面的U盘数据恢复指南,从基础方法到进阶技巧…

Unity(2022.3.41LTS) - UI详细介绍-画布

目录 零. 简介 一、图像的基本属性 二、图像的类型 三、图像的使用方法 四、代码控制图像 五、优化和注意事项 零. 简介 在 Unity 中,图像(Image)是一种常用的 UI 元素,用于显示静态图片或 Sprite(精灵图&#…

美杜莎(Medusa)勒索软件如何把你的文件变成了“石头”

写在前面的话 近期,Unit 42的研究人员在分析Medusa(美杜莎)勒索软件活动时,发现该活动的升级和勒索策略发生了很大变化。 Medusa勒索软件活动在2023年初上线了一个名为“Medusa Blog”的专用数据泄露网站,而该活动背…

利用Go语言模拟实现Raft协议

近来学习到区块链,想要模拟实现 Raft 协议。但是发现网上教程很杂,或者说很多教程并不适合于新手从零开始进行实现。 本文将从头开始复现个人模拟实现 Raft 的过程,完成后整个模拟后,读者应该学会 Go 语言的基本语法、Rpc 编程的基…

路由器内部到底是啥结构?不懂不算网工人

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 在现代互联网中,路由器作为连接不同网络的枢纽,发挥着至关重要的作用。无论是简单的家…

通用文字识别API如何通过Java进行调用?(一)

一、什么是通用文字识别? 通用文字识别又叫通用文字OCR识别,文字识别,文字图片识别,通用文字识别是一种算法识别技术,它能够将图像中的文字转换为可编辑的文本格式,可支持多种类型图片类型。 二、通用文字…

java 基于Swing的随机点名

由于教学的原因,编写的一个随机点名程序,废话不多说,直接上代码: package org.example;import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.…

CAN(江科大CAN学习)

1.CAN CAN简介 • CAN 总线( Controller Area Network Bus )控制器局域网总线 CAN总线构建的是一种局域网网络,每个挂载在can总线上的设备,都可以利用这个局域网去发送自己的信息,也可以接受局域网的各种消息&#x…