热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《TCP/IP卷》读书笔记

本书所有测试网络例子1、TCPIP的分层在图1-2的右边,我们注意到应用程序通常是一个用户进程,而下三层则一般在(操作系统)

本书所有测试网络例子

这里写图片描述

1、TCP/IP的分层

在图1 - 2的右边,我们注意到应用程序通常是一个用户进程,而下三层则一般在(操作系
统)内核中执行。尽管这不是必需的,但通常都是这样处理的,例如 U N I X操作系统。

在图1 - 2中,顶层与下三层之间还有另一个关键的不同之处。应用层关心的是应用程序的
细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的
通信细节。

这里写图片描述

2、TCP/IP协议族

这里写图片描述

3、五类网络地址

这里写图片描述

这里写图片描述

区分各类地址的最简单方法是看它的第一个十进制整数,有三类I P地址:单播地址(目的为单个主机) 、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)

4、域名系统

在T C P / I P领域中,域名系统(D N S)是一个分布的数据库,由它来提供 I P地址和
主机名之间的映射信息。现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的I P地址。类似地,系统还提供一个逆函数—给定主机的I P地址,查看它所对应的主机名。

大多数使用主机名作为参数的应用程序也可以把 I P地址作为参数。例如,在第 4章中当我们用Te l n e t进行远程登录时,既可以指定一个主机名,也可以指定一个 I P地址。

5、封装

当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作
一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部
信息) ,该过程如图1 - 7所示。T C P传给I P的数据单元称作 T C P报文段或简称为T C P段(T C P s e g m e n t) 。I P传给网络接口层的数据单元称作I P数据报(IP datagram)。通过以太网传输的比特流称作帧(Fr a m e )。

更准确地说,图1 - 7中I P和网络接口层之间传送的数据单元应该是分组( p a c k e t) 。
分组既可以是一个I P数据报,也可以是I P数据报的一个片(f r a g m e n t) 。我们将在11 . 5节讨论IP数据报分片的详细情况。

这里写图片描述

由于T C P、U D P、I C M P和I G M P都要向I P传送数据,因此I P必须在生成的I P首部中加入某种标识,以表明数据属于哪一层。为此, I P在首部中存入一个长度为8 b i t的数值,称作协议域。1表示为I C M P协议,2表示为I G M P协议,6表示为T C P协议,1 7表示为U D P协议。

6、解封装

这里写图片描述

为协议I C M P和I G M P定位一直是一件很棘手的事情。在图1 - 4中,把它们与I P放在
同一层上,那是因为事实上它们是I P的附属协议。但是在这里,我们又把它们放在I P层
的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。

7、重复型服务器 VS 并发型服务器

可以将这种服务分为两种类型:重复型或并发型。

(1)重复型服务器通过以下步骤进行交互:

I1. 等待一个客户请求的到来。
I2. 处理客户请求。
I3. 发送响应给发送请求的客户。
I4. 返回I 1步。
重复型服务器主要的问题发生在I 2状态。在这个时候,它不能为其他客户机提供服务。

(2)相应地,并发型服务器采用以下步骤:

C1. 等待一个客户请求的到来。
C2. 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务
或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器
对客户的全部请求进行处理。处理结束后,终止这个新服务器。
C3. 返回C 1步。
并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。也就是说,
每个客户都有它自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户
服务。

一般来说,T C P服务器是并发的,而 U D P服务器是重复的

8、tcp/udp端口

从该图可以看出,当使用 T C P和U D P提供相同的服务时,一般选择相同的端口号。

这里写图片描述

如果仔细检查这些标准的简单服务以及其他标准的 T C P / I P服务(如Te l n e t、F T P、
S M T P等)的端口号时,我们发现它们都是奇数。这是有历史原因的,因为这些端口号
都是从N C P端口号派生出来的(N C P,即网络控制协议,是A R PA N E T的运输层协议,
是T C P的前身) 。N C P是单工的,不是全双工的,因此每个应用程序需要两个连接,需
预留一对奇数和偶数端口号。当T C P和U D P成为标准的运输层协议时,每个应用程序
只需要一个端口号,因此就使用了NCP中的奇数。

9、internet != Internet

i n t e r n e t这个词第一个字母是否大写决定了它具有不同的含义。

i n t e r n e t意思是用一个共同的协议族把多个网络连接在一起。而 I n t e r n e t指的是世界范围内通过T C P / I P互相通信的所有主机集合(超过1 0 0万台) 。I n t e r n e t是一个i n t e r n e t,但i n t e r n e t不等于I n t e r n e t。

10、链路层三个基本问题(一)封装成帧

在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。

这里写图片描述

这里写图片描述

11、链路层三个基本问题(二)透明传输

这里写图片描述

这里写图片描述

12、差错检查(CRC)

这里写图片描述

这里写图片描述

这里写图片描述

13、MTU

M T U是I P向链路层查询的结果,因此该值必须包括通常的 T C P和I P首部

我们使用M T U经常是因为它对I P数据报的长度进行限制,但一般与最小长度无关。

14、无连接

无连接(c o n n e c t i o n l e s s)这个术语的意思是I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明, I P数据报可以不按发送顺序接收。

15、IP首部

这里写图片描述

16、网络字节序

4个字节的32 bit值以下面的次序传输:首先是0~7 bit,其次8~15 bit,然后1 6~23 bit,
最后是24~31 bit。这种传输次序称作big endian字节序。由于T C P / I P首部中所有的二进制整数
在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数
的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序。

17、IP报头之:总长度字段

总长度字段是指整个I P数据报的长度,以字节为单位。利用首部长度字段和总长度字段,
就可以知道I P数据报中数据内容的起始位置和长度。由于该字段长 1 6比特,所以I P数据报最
长可达6 5 5 3 5字节(回忆图 2 - 5,超级通道的 M T U为6 5 5 3 5。它的意思其实不是一个真正的
M T U—它使用了最长的I P数据报) 。当数据报被分片时,该字段的值也随着变化,这一点将
在11 . 5节中进一步描述。

18、576字节来源

默认MSS是536,加上tcp报头和IP报头,就是576

19、路由表长什么样

这里写图片描述

20、路由的原理

这里写图片描述

21、目的IP不变,MAC地址总在改变

当数据报从b s d i被传到s u n主机上以后,目的I P地址是最终的信宿机地
址(1 9 2 . 4 8 . 9 6 . 9) ,但是链路层地址却是s u n主机的以太网接口地址。

22、特殊的IP地址

这里写图片描述

23、ARP

A R P本来是用于广播网络的,有许多主机或路由器连在同一个网络上。

这里写图片描述

点对点链路不使用A R P。当设置这些链路时(一般在引导过程进行) ,必须告知内核链路每一端的I P地址。像以太网地址这样的硬件地址并不涉及。

24、免费ARP

这里写图片描述

免费A R P可以有两个方面的作用:

1) 一个主机可以通过它来确定另一个主机是否设置了相同的 I P地址。主机b s d i并不希望
对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息
“以太网地址:a : b : c : d : e : f发送来重复的I P地址” 。这样就可以警告系统管理员,某个系统有不正确的设置。

2) 如果发送免费A R P的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接
口卡,然后重新启动) ,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的
更新。一个比较著名的A R P协议事实[Plummer 1982]是,如果主机收到某个I P地址的A R P请求,
而且它已经在接收者的高速缓存中,那么就要用 A R P请求中的发送端硬件地址(如以太网地
址)对高速缓存中相应的内容进行更新。主机接收到任何 A R P请求都要完成这个操作( A R P
请求是在网上广播的,因此每次发送A R P请求时网络上的所有主机都要这样做) 。
文献[ B h i d e、E l n o z a h y和M o rgan 1991]中有一个应用例子,通过发送含有备份硬件地址和
故障服务器的I P地址的免费A R P请求,使得备份文件服务器可以顺利地接替故障服务器进行
工作。这使得所有目的地为故障服务器的报文都被送到备份服务器那里,客户程序不用关心
原来的服务器是否出了故障。

25、为什么ICMP协议没有端口概念

我们称发送回显请求的p i n g程序为客户,而称被p i n g的主机为服务器。大多数的T C P / I P实现都在内核中直接支持P i n g服务器—这种服务器不是一个用户进程,所以ping没有端口。

其他icmp协议同上

26、ICMP报文类型

这里写图片描述

这里写图片描述

27、udp首部

这里写图片描述

28、udp端口 VS tcp端口

T C P端口号与U D P端口号是相互独立的。尽管相互独立,如果T C P和U D P同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。

29、udp伪首部

这里写图片描述

这里写图片描述

这里写图片描述

30、udp校验和

U D P检验和覆盖U D P首部和U D P数据。回想I P首部的检验和,它只覆盖I P的首部—并不
覆盖I P数据报中的任何数据。

U D P和T C P在首部中都有覆盖它们首部和数据的检验和。 U D P的检验和是可选的,而T C P的检验和是必需的。

尽管U D P检验和的基本计算方法与我们在 3 . 2节中描述的I P首部检验和计算方法相类似
(16 bit字的二进制反码和) ,但是它们之间存在不同的地方。首先, U D P数据报的长度可以为奇数字节,但是检验和算法是把若干个 16 bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算(也就是说,可能增加的填充字节不被传送) 。

31、IP分片

物理网络层一般要限制每次发送数据帧的最大长度。任何时候I P层接收到一份要发送的I P数据报时,它要判断向本地哪个接口发送数据(选路) ,并查询该接口获得其M T U。I P把M T U与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。

重新组装由目的端的I P层来完成,其目的是使分片和重新组装过程对运输层( T C P和U D P)是透明的。

上面的话说明了,粘包的过程跟分片无关了

32、DNS 迭代查询 + 递归查询

这里写图片描述

33、一个DNS的例子

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

34、TCP提供字节流服务

两个应用程序通过T C P连接交换8 bit字节构成的字节流。T C P不在字节流中插入记录标识
符。我们将这称为字节流服务(byte stream service) 。如果一方的应用程序先传1 0字节,又传2 0字节,再传5 0字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分 4次接收这8 0个字节,每次接收 2 0字节。一端将字节流放到 T C P连接上,同样的字节流将出现在T C P连接的另一端。

另外,T C P对字节流的内容不作任何解释。 T C P不知道传输的数据字节流是二进制数据,
还是A S C I I字符、E B C D I C字符或者其他类型数据。对字节流的解释由 T C P连接双方的应用层解释。

这种对字节流的处理方式与U n i x操作系统对文件的处理方式很相似。U n i x的内核
对一个应用读或写的内容不作任何解释,而是交给应用程序处理。对U n i x的内核来说,
它无法区分一个二进制文件与一个文本文件。

这里写图片描述

35、MSS后面可变吗

不可以,详见RFC 793

这里写图片描述

36、MSS在TCP头的哪里放着

在option可选部分

这里写图片描述

37、滑窗是在三次握手的哪里规定的

这里写图片描述

显示为第一次就在商量了


推荐阅读
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 本文详细介绍了 Ansible Ad-Hoc 命令的使用方法,基于官方文档进行了中文翻译。Ad-Hoc 命令允许用户通过 `usr/bin/ansible` 快速执行一次性任务,适用于快速部署、配置管理和故障排查等场景。文中通过多个实例演示了 Ad-Hoc 命令的具体应用,帮助读者更好地理解和掌握这一强大工具。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • Python 并发编程进阶:从初学者到高手的进程与模块开发指南
    Python 并发编程进阶:从初学者到高手的进程与模块开发指南 ... [详细]
  • 长期以来,关于临时表与表变量的优劣之争一直存在,部分技术社区甚至认为表变量几乎毫无用武之地,如缺乏统计信息、不支持事务处理等。然而,实际情况并非如此绝对。本文将从多个角度对比分析临时表与表变量,探讨它们在不同场景下的应用优势及其潜在局限性,帮助开发者更好地选择合适的数据结构。 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 网宿科技正式宣布全面兼容最新QUIC (HTTP/3)协议标准
    网宿科技正式宣布全面兼容最新QUIC (HTTP/3)协议标准 ... [详细]
  • DNS解析流程详解
    在网络通信中,大多数数据交换依赖于TCP/IP协议,该协议以IP地址为基础。因此,计算机在互联网上进行通信时,主要通过如“202.96.134.133”这样的IP地址来识别目标设备。然而,为了提高用户体验和便于记忆,DNS(域名系统)应运而生,将易于理解的域名转换为IP地址,确保高效且准确的网络连接。本文详细解析了DNS解析的整个流程,包括域名查询、缓存机制及递归解析等关键环节,帮助读者深入了解这一核心网络技术。 ... [详细]
  • MySQL索引机制解析及其典型应用挑战
    本文深入解析了MySQL索引机制,并探讨了其在实际应用中的典型挑战。首先,介绍了数据库中常用的慢查询优化方法——添加索引。接着,详细解释了索引为何能够显著提升查询性能,尤其是通过其作为高效数据检索结构的作用,如B树索引在MySQL中的应用。此外,文章还讨论了索引设计时需要考虑的因素,以及不当使用索引可能带来的负面影响。 ... [详细]
author-avatar
优优绿园之时尚饰品_834
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有