计算机网络原理梳理丨清晰认识 TCP/IP 协议,图解秒懂!

640?wx_fmt=jpeg

作者:MobMsg,资深全端工程师一枚,架构师社区合伙人!


TCP/IP 协议族

Internet 的核心协议就是 TCP/IP,广泛应用于局域网和广域网,目前已有20+年发展史,是现用国际通行标准。TCP/IP 是个协议族,包含有多种协议,网络模型及分层如图所示

640?wx_fmt=other

TCP/IP 协议族全家福 


TCP/IP 五层网络模型

应用层:应用程序通过TCP/IP互连网络后发送、接收数据。选择所需服务类型,按照传输层要求组织数据,向下传递报文序列或字节流2种类型

传输层:提供应用层间通信服务,又称端到端通信。提供可靠的数据传输服务,确保数据准确、有序送达到目的地。数据发送后需对方回送确认信息,有丢失的数据需发送方重发分组。传输的对象是传输层分组

网际层:又称IP层,负责机器间通信,接收到传输层请求后,向目的地传送信息分组。此分组会被封装进IP数据报中,由路由选择算法决定直送目的地或发给路由,然后将数据向下传递给网络接口层。接收到数据报时,检验正确性,由路由选择算法决定本地处理或转发,若目的地属于本机所在网络,就把数据报的报头剥去,选择适当的传输层协议向上传递分组

网络接口层:又称数据链路层,处于TCP/IP协议层之下,负责接收IP数据报并将数据报通过选定网络发送出去

硬件层:处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)


TCP/IP 内含协议职责

640?wx_fmt=png

应用层协议职能


TCP 协议数据传输流程

传输控制协议(Transmission Control Protocol,TCP)是 Internet 传输层协议,提供面向连接的可靠传输服务,可靠性由重发技术保证。TCP 报文首部的大小一定是4字节的倍数,其中固定首部大小为20字节且不变

640?wx_fmt=other

TCP 数据包示意图

ACK:确认位,当它的值为1时,确认号才是有效的

TCP 三次握手建立连接

第一次握手:建立连接时,客户端发送SYN包(syn=i)到服务器,并进入SYN_SEND状态,等待服务器确认。SYN表示同步序列编码(Synchronize Sequence Numbers)

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(seq=j),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:客户端收到服务器的SYN+ACK的包后,向服务器发送确认包ACK(j+1),此包发送完毕,客户端与服务器进入ESTABLISHED状态,完成三次握手

640?wx_fmt=other

三次握手建立连接示意图

TCP 正常数据传输过程

本图表示传输2个数据报的过程。主机A向B发送第一个 N 字节的数据包,SEQ为 i ,主机B收到后需要立即向主机A发送确认ACK包,ACK = i + N +1 ,这样主机A才可确认数据传输成功。第二个数据包传输时,SEQ数值 = R,主机B收到后立即回传ACK,此时ACK = R + N + 1,之后数据包传输的过程持续此流程,需要注意的是发送方只有收到目标方的确认包后才会清除缓冲区中的数据

ACK确认位 = SEQ数据编号 + 传递的字节数N + 1。第一个字节的SEQ编号由本地随机产生,SEQ+N的作用是为了让主机A确认发送给主机B的数据是否全部接收 / 是否出现丢失

640?wx_fmt=other

正常数据传输示意图

TCP 数据重传与快重传

  • 数据重传:主机A向主机B传送数据,但中间发生错误,主机B未能收到。经过一段时间后,主机A未收到主机B的ACK确认包,故主机A再次重传此数据包。主机A每次发送数据时都会启动一个定时器,规定时间没收到响应包则启动重传

  • 快重传:重传发生在超时之后,但当主机A收到3个以上重复的ACK,其实就说明有数据丢失,也需要重传,此时重传定时器还没有结束,所以叫快速重传

640?wx_fmt=other

数据重传示意图

TCP 四次挥手结束连接

第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态

第二次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态

第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态

第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手

640?wx_fmt=other

四次挥手结束连接示意图

TCP 滑动窗口与拥塞控制


IP 协议数据传输流程

网际协议(Internet Protocol,IP)通常被认为提供的是无连接和不可靠的,但实际上,在网络性能良好的情况下,IP传送的数据能够完好无损的到达目的地

无连接是指没有确定目标系统是否已做好接收数据的准备之前就发送数据。不可靠是指目的系统不对成功完成接收到的分组进行确认

640?wx_fmt=other

IP 数据报示意图

IP 发送数据

发送数据时,源计算机上的IP协议需要确定目的地是否在同一网络,若目的地在同一网络,使用直达通信,若不在同一网络,则需要通过网关或路由器完成通信:

主机A组装目的IP地址为主机B的数据报,之后进行路由选择,再将次数据报发送至默认路由器(由APR地址解析确定路由器,得到下一默认路由器IP地址与MAC地址的映射关系,然后以该MAC地址为帧的目的地址形成一个帧,并将IP数据报封装在帧的数据区,最后由具体的物理网络(以太网)完成数据报的真正传输)

IP 转发数据

路由器接收到主机A的数据帧后,去掉帧头并对其进行处理,发现此数据报的目的地非本地,需要将其转发,由路由选择算法及本地路由表确定下一跳路由器地址,通过ARP地址解析确定下一跳路由的IP地址与MAC地址的映射关系后,将该MAC地址作为数据帧的目的地将数据报封装为数据帧,通过以太网完成数据转发。重复此步骤直到第N个路由器与目的地直连,通过ARP地址解析确定目的主机的IP地址与MAC地址的映射关系,利用该MAC地址作为帧的目的地址,将IP数据报封装成帧,并由以太网实现数据的真正传递

IP 接收数据

主机B接收到数据帧后,解封该帧并对其进行处理,确定本机即为目的地址后,将数据报中封装的数据交由上层协议进行处理,随即逐层处理并上交直到应用层,完成此次通信


TCP/IP 五大重要特性

逻辑编址:通过IP地址+主机ID,确保计算机可寻

路由选择:通过网络路径选择协议,确保数据包到达目的地

域名解析:将域名映射为IP地址,使用域名一是便于记忆,二是域名相对固定不变

错误检测:确保分组交换的可靠性传递,确认数据正常接收

流量控制:监测网络流量,防止网络拥塞出现

长按订阅更多精彩▼

640?wx_fmt=jpeg

如有收获,点个在看,诚挚感谢640?wx_fmt=png

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

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

相关文章

MySQL 覆盖索引、最左前缀原则、索引下推

1、覆盖索引 1.1 概念 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引。 1.2 判断标准 使用…

Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令

在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加delimiter //附:可以使用Visual Studio中的程序包管理器控制台执行Entity Framework Core中的迁移命令。PMC …

Exceptionless 5.0.0本地Docker快速部署介绍

在之前我有专门写两篇文章介绍过Exceptionless这款开源日志项目的使用和部署,但是当时是基于4.1.0版本(2017年的release),时隔两年多Exceptionless也推出了5.0.0版本。(1)(2)01—关于…

数据库事务及隔离级别

一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态…

定了!10 月 8 日!Jupyter Notebook 原生支持将正式来到 VS Code!

北京时间 2019 年 9 月 21 日,在 PyCon China 2019 大会上,前不久,我们已经可以尽管如此,还是有许多童鞋来询问这个功能何时能正式发布。现在,我们可以在 VS Code Python 插件的 Release Plan 看到正式的发布时间已经确…

图解MySQL 内连接、左连接、右连接

一、准备工作 用两个表(a_table、b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接、外连接( 左(外)连接、右(外)连接、全(外)连接)。 MySQL版本:Server version: 5.6.31 MySQL Comm…

微软想将新版Edge浏览器引入Linux

继推出 WSL2、将 exFAT 技术添加至 Linux 内核,和宣布第一届微软 Linux 大会后,微软再次瞄准了 Linux。这次 Linux 用户将很可能迎来新版 Edge 浏览器。微软网络技术程序经理 Sean Larson 在 Twitter 上发布了一条消息,表示 Edge 开发团队正在…

一套代码同时支持.NET Framework和.NET Core

在.NET Core的迁移过程中,我们将原有的.NET Framework代码迁移到.NET Core。如果线上只有一个小型的应用还好,迁移升级完成后,只需要维护.NET Core这个版本的代码。但是,如果是一个大型分布式应用,几百台Server&#x…

从壹开始 [Admin] 之五 ║ 实现『按钮』级别权限配置

正文一、前情回顾哈喽大家好,在这个欢庆的日子里,老张祝大家工作都能蒸蒸日上!今天正好也是社团成立的第一天,我也是希望今天能是个纪念日,沾沾这个大喜庆!放假这两天,倒是学到了很多东西&#…

MySQL——binlog,redo log

一、什么是binlog、redo log binlog属于逻辑日志,是逻辑操作。innodb redo属于物理日志,是物理变更。逻辑日志有个缺点是难以并行,而物理日志可以比较好的并行操作。 binlog是MySQL Server层记录的日志, redo log是InnoDB存储引…

“自启动”树莓派上的 .NET Core 3.0 环境

点击上方蓝字关注“汪宇杰博客”导语昨天发了一篇《自动配置环境变量Rapbian 系统启动时会去执行 .profile 文件里的命令。因此我们只需要把配置环境变量的命令加入 .profile 文件即可。在 Linux 中,.profile 扩展用于终端程序中的文件。Linux 和 Mac OS X 终端程序…

Nginx 配置内网访问树莓派4 ASP.NET Core 3.0 网站

喜迎国庆点击上方蓝字关注“汪宇杰博客”导语前几天发了两篇《能跑就行:Kestrel Hosting如果你的要求只是临时内网访问,可以只用 Kestrel 来承载 Web 服务器,只需要给 dotnet 命令一个 --urls 参数即可设置允许访问的主机名和端口号。我不希望…

常见的NoSQL数据库

NoSQL数据库发展迅猛,据说现在已经有上百种NoSQL数据库了,下面来了解下常见的一些NoSQL数据库 先来看张表,了解下典型的NoSQL数据库的分类 NoSQL一般特征: 临时性键值存储一般作为关系型数据库的缓存来使用由于存在数据丢失的可…

2019年9月中国编程语言排行榜,C#排第三

前两天,在 GitHub 上看到一份报告,上面统计了全国程编程语言排行榜 9 月份的情况,下面跟大家分享一下,这份报告里面都说了什么。https://github.com/juwikuang/china_job_survey/blob/master/notebook/201909/programming_languag…

从0开始编写dapper核心功能、压榨性能、自己动手丰衣足食

我偶然听说sqlsugar的性能比dapper强。对此我表示怀疑(由于我一直使用的dapper存在偏见吧),于是自己测试了sqlsugar、freesql、dapper发现他们的给我的结果是sqlsugar>dapper>freesql(这里并不是黑那个orm,毕竟不同orm功能不…

免费下载 80多种的微软推出入门级 .NET视频

.NET Core 3.0视频系列中宣布了80多个新的免费视频,这些视频同时放在Microsoft的Channel 9 和youtube上面。 在线观看由于跨洋网络效果不太好,下载到机器上慢慢看是最好的了。 所以Scott Hanselman 特别制作了一个页面 http://dot.net/videos。我把这个页…

数据库连接池原理及常用连接池介绍

一、背景介绍 1.1 什么是连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。 1.2 为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网…

DevOps案例研究|中华有为-解构华为软开云DevOps实践

内容来源:DevOps案例深度研究-华为软开云DevOps研究战队(本文只展示部分PPT研究成果,更多细节请关注案例分享会,及本公众号。)本案例内容贡献者:王英伟(Topic Leader)、蔡志超、陈安…

Excel催化剂插件安装过程升级,离线版全网公开下载!

Exce催化剂推出近2年,之前一直在推崇在线版的安装方式,但因安装步骤较多,可能吓退了一部分初级用户,此轮重新梳理,让安装方式更简单,也公开了离线版的安装文件,若部分用户不想使用在线版&#x…

包邮送88本畅销技术书

来给大家送一波福利,这次联系了 11个好友一起给各位送书,每个号送 8 本,一共 88本,还包邮哦。感谢清华大学出版社对本次活动的赞助。01 书怎么送很简单,关注下面的公众号,并在后台回复「抽奖」,…