热门标签 | 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、滑窗是在三次握手的哪里规定的

这里写图片描述

显示为第一次就在商量了


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
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社区 版权所有