网络篇(四):《图解 TCP/IP》读书笔记
myzbx 2025-04-24 05:30 8 浏览
大家好,我是 杰哥
网络知识专栏的推送,依旧在继续~今天要推荐的是:《图解 TCP/IP 》
再次看完一本网络的书籍,更加感觉到网络中常用的知识其实也就那么多,只是不同的作者会根据自己的经验,站在不同的角度进行讲解而已
而通过阅读多本网络书籍,则可以站在不同的角度,使得自己在查漏补缺的基础上,碰撞出更多的火花,从而对于这个体系的印象不断加深
这本书与之前的两本书《网络是怎样连接的》、《趣谈网络协议》还是有很多交集的,比如说都有着重介绍 TCP 的可靠性实现原理,TCP 与 UDP 的不同之处,OSI 参考模型以及 TCP/IP 分层模型,以及 IP 协议的相关技术:DNS、ARP、ICMP、DHCP、NAT 以及 IP 隧道等。而这些基本上在之前的网络知识专栏中都有介绍,只是会有粒度的粗细、角度的不同等区别,因此本次笔记只列出了一些之前未提到过的内容
一、网络类型
1、共享介质型网络
有两种介质访问控制方式:
2、非共享介质型网络
网络中的每个站直连交换机的各个端点,由交换机负责转发数据帧,发送端与接收端不共享介质,因此很多情况下采用全双工的通信方式
二、IP 地址的基础知识
1、IP 多播
1)可以同时给特定的组内成员发送,并且可以穿透路由(广播无法穿透路由)
2)使用 D 类地址,即首位 IP 地址为 “1110”
2、如何解决全局地址不够用的问题?
说起来,有以下三种方法:
- CIDR 与 VLSM
CIDR:采用任意长度分割 IP 地址的网络标识和主机标识
VLSM:可随机修改组织内各个子部门的子网掩码长度的机制
而 CIDR 与 VLSM 结合,相对缓解了全局 IP 地址不够用的问题
- NAT
在每个终端设置私有 IP 地址,而在路由器(宽带路由器)或者必要的服务器上设置全局 IP 地址。如果配有私有 IP 的主机需要联网时,则通过 NAT 进行通信
- 代理服务器
采用少数设置全局 IP 地址的代理服务器结合 NAT 的设置进行互联网通信。在这种情况下,IP 地址个数就不局限于 LAN 中主机个数,而是由代理服务器和 NAT 的个数决定,所以会大大降低全局地址的使用频率
4、差错控制区别
七层模型中,数据链路层、网络层以及传输层都有差错控制的机制,那么他们的差错控制都有什么区别呢?
实际上,七层模型是在尽量保证可靠的传输,即要尽可能地做到:不错(没有比特差错),不丢(丢包),不乱(按序到达)。而每一层只需要校验本层的数据不发生错误即可
- 数据链路层
是为了防止网卡软硬件 bug、电缆不可靠、信号干扰而造成信号失真的数据错误,也就是只负责单个帧的正确性检查。如果不检查,将一直到达目的地主机,很有可能到达传输层才会校验出错误
- 网络层
网络层的校验只用于针对网络层的头部的正确性检查。好比货车司机只管车,车跑得好他就放心了。箱子里的水果坏没坏是传输层的事,它是不用管的
- 传输层
是对于路由器内存故障或程序漏洞导致的数据是否被破坏的问题检查
5、既然IP层会分片,为什么 TCP 层也还要分段?
首先,对于一次网络交互需要传输的数据量太大时,就需要对数据分块进行传输。这个行为在 TCP 里,叫分段,在 IP 层,叫分片。那么,达到多大才需要分呢?TCP 层,叫 MSS, IP 层,叫 MTU
- MSS是什么?
MSS:Maximum Segment Size ,段的最大字节数,是 TCP 用来限制应用层最大的发送字节数
MSS 会在三次握手的过程中传递给对方,用于通知对端本地最大可以接收的 TCP 报文数据大小,在每次执行 TCP 发送消息的函数时,会重新计算一次 MSS 的值,用于后续的分段操作
- MTU是什么?
MTU: Maximum Transmit Unit,最大传输单元。这个是由数据链路层提供,为了告诉上层 IP 层,自己的传输能力是多大。IP 层就会根据它进行数据包切分。一般 MTU=1500 Byte
假设 IP 层有小于等于 1500 byte 数据需要发送,只需要一个 IP 包就可以完成发送任务;假设 IP 层有大于 1500 byte 数据需要发送,则需要分片才能完成发送,分片后的 IP Header ID 相同,同时为了分片后能在接收端把切片组装起来,还需要在分片后的 IP 包里加上各种信息。比如这个分片在原来的 IP 包里的偏移 offset
- MTU 与 MSS 的关系
即
MSS = MTU - 20(IP Header) -20 (TCP Header)
那么,既然 IP 层会分片,在 TCP 层为何还要分段呢?
1)数据在 TCP 分段,其实是为了在 IP 层不需要分片
只要以链路中最小的 MTU 所对应的 MSS 进行数据发送即可实现 IP 的不分片,而当 MTU 的值一旦确定了,MSS 也就随之确定了,因此便可以实现 在 TCP 分段之后,在 IP 层不再需要分片了
- 而 IP 层是如何实现不分片的呢?
设想一下,当链路中存在多个 MTU 时,刚开始以一个比较大的 MTU 发送时,在中间遇到了比较小的 MTU 时,必然需要进行分片。所以,只需要在发送数据前,找到链路中最小的 MTU,并以这个 MTU 进行数据的发送,则全程都不会涉及到数据的分片操作了
2)减少网络带宽的消耗
TCP 为了保证可靠性具有重传机制。分段之后,当发生重传的时候,只需要重传分段后的小份数据,不用再重传原来比较大的数据了,这样可以减少网络带宽的消耗
三、IP 协议
1、MTU 不同
不同的数据链路,有不同的 MTU(最大传输单元),主要是不同类型的数据链路的使用目的不同
2、IP 报文的分片与重组
规定只能在终结点(目标主机)进行被分片数据的重组
3、路径 MTU 发现
获得从发送端主机到接收端主机之间不需要分片时的最大 MTU 的大小,即路径中存在的所有链路中最小的 MTU,从而避免在中途的路由器上进行分片处理
总结
以链路中最小的 MTU 进行发送,并规定在目标主机才会进行数据的重组,那么就会实现在发送端主机进行分片,在接收端主机进行重组的效果,避免过程中的频繁重组、分片带来的网络效率降低的问题
四、路由控制协议
1、RIP
1)Routing Information Protocol,路径信息协议。将路由控制信息定期(30 s)向全网广播,若超过 5 次 未收到路由控制信息,连接断开
2)根据距离向量确定路由
选择路由器个数最少的路径(即距离最短的路径)
3)RIP 的无限计数问题:收到自己发出去的消息
解决方法:
a. 最长距离不超过 16。由此即使发生无限计数问题,也可以从时间上进行控制
b. 规定路由器不再把接收到的路由信息返还给发送端,即水平分割
有环路时,还需要以下方法来解决:
a.毒性逆转
直接将无法通信的消息传播出去
b.触发更新
当路由信息发生变化时,不等待 30 s,而是立刻发送出去
2、OSPF
Open Shortest Path First,开放最短路径优先。是一种基于链路状态的路由协议,选择总的代价较小的路径
相对于 RIP 协议来说:
1)通过引入区域的概念,减少计算负荷,即每个路由器向其同一管理域的所有其他路由器发送链路状态广播信息,而不是全网
2)不用像 RIP 协议那样,定期交换相同的路由控制信息,浪费带宽,而是发生变更时,只推送变更的信息
3、BGP 协议
是一种路径向量协议。类似于距离向量协议:RIP。但它不仅包含了转发的方向和距离,还涵盖了途经所有 AS(自治系统)的编号,并且能够检测出环路
五、应用层协议
1、电子邮件
为了解决邮件接收方在没有开机的情况下,无法接收到邮件的问题。在邮件的发送方与接收方之间,增加一台邮件服务器,用于接收发送端的所发送的邮件
根据 SMTP 协议将被转发给一直处于插电状态的邮件服务器,接收客户端再根据 POP 协议或者 IMAP 协议从邮件服务器接收对方发来的邮件
POP 协议和 IMAP 协议都属于接收电子邮件的协议。但两者还是有区别的:
POP(Post Office Protocol):邮局邮件协议,由客户端将电子邮件下载本地,对邮件进行本地的操作
IMAP(Internet Mail Access Protocal):交互式邮件访问协议。由服务器直接进行电子邮件的管理,客户端不用将电子邮件下载到本地便可进行操作
2、SNMP-网络管理协议
可以读写 MIB 的信息,实现信息收集、修改,路由器、设备启停等
MIB(Management Information Base):管理信息库,由监控网络中某个接口设备(点)的众多参数组成。包括受管设备必须保存的数据项、允许对每个数据项进行的操作及其含义等信息
RMON(Remoting Monitoring MIB):远程监控的 MIB。由监控网络上线路的众多参数构成(线)
因此,RMON,可以实现以终端或者协议为单位进行监控。是判断当前网络是否被充分利用的重要资料
六、提高网络利用率的规范
1、Nagle 算法
需要一直等到满足以下两个条件的其中一个,才可以发送
- 1)已发送的数据都已经收到确认应答时
- 2)可以发送最大段长度(MSS)的数据时
优点:网络利用率大
缺点:会发生某种程度的延迟
2、延迟确认应答
- 原因
接收数据的主机,刚接收完数据,缓冲区往往是满着的。这个时候如果立即返回确认应答,那么应答的窗口的大小是偏小的
- 机制
收到数据以后,并不立即返回确认应答,而是延迟一段时间返回
3、捎带应答
TCP 的确认应答和回执数据可以通过一个包发送。通过启用延迟确认应答来实现
可以减少收发的数据量,是提高网络利用率从而降低计算机处理负荷的一种较优的处理机制
七、传输层协议
除了 UDP 和 TCP 协议以外,还有如下几种较为常用的协议:
1、UDP-Lite
轻量级用户数据报协议,是 UDP 的修正版协议,实现校验和的范围由应用自行决定,只针对不允许发生错误的部分进行校验和的检查,对于其他部分,即使发生了错误,也会被忽略不计
2、SCTP
流控制传输协议,是 TCP 的一种扩展协议。支持多重宿主,即对于同一台主机有多个网卡的情况,即使其中的以太网与无线 LAN 之间的切换,也能够保持通信不中断
3、DCCP
在 UDP 基础上进行拥塞控制的一种协议
八、为什么 UDP 和 TCP 都有一个伪首部?
伪首部的内容包括源 IP 地址,目标 IP 地址,协议号
由于 UDP 的首部只包含通信 5 要素中的其中两个:源端口和目标端口,因此增加了需要的 3 项:源 IP 地址,目标 IP 地址,协议号。只有对于这 5 要素进行校验,才有意义
九、总结
好了,《图解 TCP/IP 》的读书笔记就这些了。最近时间的确是不够用,这本书也是每天挤出时间来看的~
看完之后,你会发现随着对网络体系了解得越来越多,得到的不仅是更多的网络知识,还能够看到网络中的一些比较优秀的架构设计思路。比如网络的分层、各个网络层的独立封装、类似于发布订阅思维的邮件服务器的引入等思想
嗯,就这样。每天学习一点,时间会见证你的强大~
欢迎大家关注我们的公众号,一起持续性学习吧~
往期精彩回顾
总结复盘
架构设计读书笔记与感悟总结
带领新人团队的沉淀总结
复盘篇:问题解决经验总结复盘
网络篇
网络篇(二):《趣谈网络协议》读书笔记(二)
网络篇(一):《趣谈网络协议》读书笔记(一)
事务篇章
事务篇(四):Spring事务并发问题解决
事务篇(三):分享一个隐性事务失效场景
事务篇(一):毕业三年,你真的学会事务了吗?
Docker篇章
Docker篇(六):Docker Compose如何管理多个容器?
Docker篇(二):Docker实战,命令解析
Docker篇(一):为什么要用Docker?
..........
SpringCloud篇章
Spring Cloud(十三):Feign居然这么强大?
Spring Cloud(十):消息中心篇-Kafka经典面试题,你都会吗?
Spring Cloud(九):注册中心选型篇-四种注册中心特点超全总结
Spring Cloud(四):公司内部,关于Eureka和zookeeper的一场辩论赛
..........
Spring Boot篇章
Spring Boot(七):你不能不知道的Mybatis缓存机制!
Spring Boot(六):那些好用的数据库连接池们
Spring Boot(四):让人又爱又恨的JPA
SpringBoot(一):特性概览
..........
翻译
[译]用 Mint 这门强大的语言来创建一个 Web 应用
【译】基于 50 万个浏览器指纹的新发现
使用 CSS 提升页面渲染速度
WebTransport 会在不久的将来取代 WebRTC 吗?
.........
职业、生活感悟
你有没有想过,旅行的意义是什么?
程序员的职业规划
灵魂拷问:人生最重要的是什么?
如何高效学习一个新技术?
如何让自己更坦然地度过一天?
..........
相关推荐
- 一键生成高颜值图表!让你的文字瞬间有画面感,职场人必备!
-
哈喽,打工人们!忙碌的周中,大熊又来给你们带来一个超实用的效率神器啦!这次的宝藏网站绝对是那种用过就离不开的"真香"型产品!假设你明天就要做重要汇报,可面对一大堆密密麻麻的文字材料,你...
- 批量将 Word 转换为 PDF/Excel/Txt/图片等多种格式
-
Word文档是我们工作中经常会打交道的一种文档格式,我们也经常会有需要对Word文档进行格式转换的需求,比如将Word格式转换为PDF、将Word文档转换为Excel、将Word...
- 绝了!一键用AI生成高颜值动态PPT(附详细步骤+Prompt)
-
大家好,我是一名酷爱研究AI的产品经理,最近我有个新发现:那些花了你3天做出来的PPT,现在用AI可以1小时搞定!而且颜值还高!为什么AI做PPT比传统方式效率高10倍?我用一张图就能告诉你:AI生成...
- ztext - 简单几行代码创建酷炫3D特效文字的开源JS库
-
把网页上的文字变成酷炫的3D风格,还能制作旋转动效,有了ztext.js,只需要几行代码。ztext能做什么ztext.js是一个能把常规的平面文字变成3D样式的前端开源代码库,让开发者...
- 文字内插入小图片,也太可爱了吧(文字中怎么插图片)
-
图文排版H5手机版秀米有小伙伴留言问添加图片的时候可不可以把图片添加到文字之间比如下面这句话中的小贴纸图片后面可以接着输入文字其实吧这就是咱们的『文字内插入小图片』功能嘛可以用来在文字内加个表情包又...
- Linux环境下C++代码性能分析方法(linux怎么写c++代码)
-
技术背景在开发C++应用程序时,找出代码中运行缓慢的部分是进行性能优化的关键。在Linux系统上,有多种工具和方法可用于对C++代码进行性能分析,每种方法都有其特点和适用场景。实现步骤手动中断调试法在...
- SVG互动图文,让你的文章更有趣!教你4种简单易学的黑科技玩法!
-
如果你是一个公众号创作者,那么你一定想知道如何让你的文章更加吸引人,更加有趣,更加有创意。你可能已经尝试过各种图文排版技巧,但是你是否知道,有一种黑科技可以让你的文章变得更加酷炫,更加互动,更加爆款?...
- Videoscribe怎么实现实心中文汉字的手绘制作
-
很多朋友在制作手绘视频的时候,不知道怎么输入实心的中文汉字,之前我们已经给大家分享了怎么输入汉字的方法,但是有一点遗憾的是输出的汉字是空心的手绘展示,在视觉上并不是非常的美观。经过大家不断的探索,终于...
- 一款用于将文本转化成图表的现代化脚本语言
-
大家好,又见面了,我是GitHub精选君!今天要给大家推荐一个GitHub开源项目terrastruct/d2,该项目在GitHub有超过10.3kStar,用一句话介绍该项目就是:...
- 探秘 Web 水印技术(制作水印网站)
-
作者:fransli,腾讯PCG前端开发工程师Web水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印)...
- 不忍心卸载的五款神仙工具(不忍心卸载的五款神仙工具是什么)
-
001.效率工具uTools-装机必备的生产力工具集uTools是一款非常强大的可以装下几乎所有效率工具的电脑生产力工具集,目前拥有Windows、Mac和Linux三个版本。软件界面...
- 「SVG」飞花令!这份最高检工作报告“超有料”
-
原标题:【SVG】飞花令!这份最高检工作报告“超有料”栏目主编:秦红文字编辑:沈佳灵来源:作者:最高人民检察院...
- svg|2025政府工作报告,有没有你关心的数据?
-
··<setattributeName="visibility"begin="click+0s"dur="1ms"fill="freeze"restart="never"to="hi...
- videoscribe只能输入英文,如何输入中文文本?
-
videoscribe只能输入英文,如何输入中文文本?打开VideoScribe软件,打开要添加中文字体的位置。打开Photoshop并在文件中创建一个新的透明背景图层。注意:必须是透明背景层。...
- 五个流行的SVG在线编辑器(svg编辑工具)
-
随着响应网络的发展,越来越多的高质量的SVG在线编辑器被公众所熟知。SVG矢量图形也越来越受欢迎,以便在任何设备上呈现图像,甚至一些易于使用的SVG在线编辑器,可以替代PS,本文总结了五种流行的SVG...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 中级教程 (30)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)