TCP/IP详解-笔记1
2016-06-23 16:27
531 查看
第二章 链路层
链路层主要三个目的:-为IP模块发送和接收IP数据报
- 为ARP模块发送ARP请求和接收ARP应答
- 为RARP发送RARP请求和接收RARP应答
环回接口
运行运行在一个主机上的客户端和服务端通过TCP/IP通信
大多数系统将127.0.0.1分配给环回接口,命名为localhost
通过上图可以看到,环回接口看成是网络层下的另一个链路层,网络层将数据报传递给环回接口,然后环回接口将数据报返回到IP输入队列中
最大传输单元
链路层对于数据帧最大的长度的一个限制
IP层的数据报大于MTU,则需要对IP数据报进行分片
路径MTU
两个通信的主机要经过多个网络,每个网络的链路层的MTU不同,那么路径中最小的MTU称为路径MTU
第三章 IP:网际协议
IP路由选择:搜索路由表,寻找能与目的IP地址完全匹配的表目
搜索路由表,寻找与目的网络号相匹配的表目
搜索路由表,寻找默认表目
子网寻址
子网对于外部路由器来说隐藏了内部网络组织
子网对于内部路由器来说是不透明的
第四章 ARP地址解析协议
ARP为IP地址到对应的硬件地址转换提供动态映射过程分析:
主机名转化为IP地址
客户端请求TCP根据第一步得到的IP地址建立连接
TCP发送一个连接请求到目的主机上,发送一份数据报到上述IP地址
如果目的地址在本地网络上,IP数据报可以直接送到。否则通过路由器选路转发,最终送到目的地址
假定是一个以太网,需要得到目的IP所对应的48位的以太网地址,要用到ARP协议
ARP发送一个ARP请求给以太网上的每一个主机
目的主机ARP收到这个请求,会发出一个ARP应答,这个应答就包含对应的硬件地址
收到ARP应答后,使ARP进行上述的6,7工作的IP数据报就可以进行传送了
ARP高速缓存
存放了最近IP地址与硬件地址之间的映射,每一项的生存时间一般为20分钟。
ARP代理
当ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答这个请求,ARP代理
免费ARP
知己发送ARP查找自己的IP地址,这通常发生在系统音带期间进行接口配置的时候
第五章 RARP逆地址解析协议
硬件地址到IP地址的映射ARP服务器,通常是TCP/IP在内核中实现的一部分。
RARP服务器,不是TCP/IP在内核中实现的一部分。它的功能是由用户进程提供的。
RARP 请求是作为一个特殊类型的以太网数据帧来传送的
每个网络有多个RARP服务器
这种协议是许多无盘系统在引导时获取IP地址的。它是在链路层进行广播的,阻止了路由器进行转发请求了
RARP服务器是与系统相关,不是所有的TCP/IP实现都提供RARP服务
第六章 ICMP:Internet控制报文协议
ICMP报文是在IP数据报内部被传输ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:
ping查询
子网掩码查询(用于无盘系统在引导过程中获得自己的子网掩码)
时间戳查询(可以用来同步时间)
而差错报文则产生在数据传送发生错误的时候
尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下
ICMP差错报文不会产生ICMP差错报文(IMCP查询报文可以产生)(防止IMCP的无限产生和传送)
目的地址是广播地址或多播地址的IP数据报。
作为链路层广播的数据报。
不是IP分片的第一片。
源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。
ICMP地址掩码请求与应答
这个请求用于无盘系统在引导过程中获取自己的子网掩码
这个过程与无盘系统在引导过程用RARP获得IP地址类似
ICMP时间戳请求与应答
ICMP时间戳请求允许一个系统向另一个系统查询当前时间,这个时间的单位是毫秒级的
ICMP端口不可达差错
有16种类型的ICMP不可达报文
第七章 Ping程序
ping程序发送一个ICMP回显请求报文给主机,并等待ICMP回显应答一台主机的可达性不只取决于IP层是否可达,还取决于使用何种协议以及端口号
ping只利用ICMP回显请求和回显应答报文,不用经过传输层。
一台主机的可达性不只取决于IP层是否可达,还取决于使用哪种协议和端口号
标识符字段设置为发送进程的ID号,在同一个主机上运行多个ping程序,ping程序也能够识别返回的信息
序列号从0开始,每发送一个回显请求就加1
第一个往返时间较长,由于目的端的硬件地址不在ARP的高速缓存中
IP记录路由选项
ping程序提供查看IP记录路由选项
每个处理这个数据报的路由器都把它的IP地址放入选项字段,返回途中的路由器的IP地址也会记录下来。
第八章 Traceroute程序
Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。Traceroute程序使用ICMP报文和IP首部中的TTL字段。
IP记录路由选项 记录的是路由器发送接口的地址
traceroute 记录的是路由器接收接口的地址
Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。
有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP报,目的主机任何一个应用程序都不可能使用这个端口,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了。
IP源站选路选项
由发送者指定路由
严格的源路由选择,发送端指定了路由,如果指定的路由不存在,则返回一个“源站路由失败”的ICMP差错报文
宽松的源路由选择,在指定的路由不存在的情况下,选择其他路由
第九章 IP选路
IP搜索路由表的步骤(1)搜索匹配的主机地址
(2)搜索匹配的网络地址
(3)搜索默认表项
路由表初始化[/b]
一些系统允许在某个文件中指定默认的路由器,每次重新启动系统是都要在路由表中加入该默认项。
在系统引导时显式地在初始化文件中运行route命令
ICMP主机与网络不可达差错
当路由器收到一份数据报但又不能转发,就要发送一份ICMP“主机不可达”差错报文。
主机产生一个数据报但是转发不出去,给发送这个数据报的应用程序返回个差错,或者是“主机不可达差错”或者“网络不可达差错”
ICMP重定向差错
IP数据报应该发送到另一个路由器,收到数据报的路由器就要发送ICMP重定向差错报文给IP数据报的发送端。(收到数据报的路由器发现正在发送的接口与数据报到达的接口是相同的)
重定向用来让具有很少选录信息的主句组件建立更完善的路由表
当IP数据报在某一个地方转向的时候,都会给发送IP报的源主机一个ICMP重定向报文,而源主机就可以利用这个信息来更新自己的路由表,这样,随着网络通信的逐渐增多,路由表也就越来越完备,数据转发的速度也会越来越快。我们需要注意的是:
重定向报文只能由路由器发出。
重定向报文为主机所用,而不是为路由器所用。
ICMP路由器发现报文
主机在引导以后要广播或多播传送一份路由器请求报文,一台或多台路由器响应路由器通告报文。此外,路由器要定期广播或者多播传送他们的路由器通告报文,允许每个正在监听的主机更新他们的路由表
路由器发现报文一般由守护进程创建和处理
第十章 动态选路协议
路由器之间的通信必须通过选路协议进行。而路由守护进程运行选路协议,与相邻的路由通信。路由是由路由守护程序进行增加和删除的
Unix选路守护程序
这个routed程序只使用RIP进行通信
还有一个程序gated,IGP和EGP都支持它
RIP选路信息协议
RIP报文包含在UDP数据报中,这种协议是用于小型到中型网络中的协议
这种报文可以通告25条路由
RIP使用的度量是以跳计算的。跳数的最大值为15,当跳数为16时,表示无路由可到达该IP地址
每个路由器根据它接收到的邻站的这些距离向量来更新自己的路由表
每个路由都有定时器,运行RIP的系统发现一个路由在3分钟类未更新,将该路由的度量设置为无穷大,并标注为删除
OSPF 开放最短路径优先
内部网关协议
他是一个链路状态协议,不与邻站交换距离信息。每个路由器主动地测试与其邻站相连链路的状态,将这些信息发送给它的其他邻站,邻站将这些信息在自制系统中传播出去。这种协议收敛速度更快。
OSPF是直接使用IP,其优点:
支持子网
路由器之间的点对点链路不需要每段都有一个IP地址
采用多播,而不是广播,减少不参与OSPF的系统负载
BGP边界网关协议
外部网关协议
第11章 UDP:用户数据报协议
面向数据报的运输层协议UDP有覆盖他们首部和数据部分的检验和,检验和是可选的,而TCP的检验和是必须的
接收端接收的UDP数据报的检验和有差错,会直接丢弃数据报,不产生任何差错报文
IP分片
IP层将MTU与数据报的长度进行比较,如果数据报的长度大于MTU,则需要进行分片。分片后,只能在目的端的IP层进行重新组装。这样使得分片和重组对于传输层都是透明
IP首部标识字段有一个比特表示“更多的片”,除了最后一片外,其余片这个比特都是1.
当路由器收到一份需要分片的IP数据报,但是它的IP首部设置了不分片的标志比特。这种情况下,会发出ICMP不可达差错报文
11.9 UDP和ARP之间的交互作用
当UDP数据报在IP层需要分片,而且ARP的缓存为空时。在发送数据报时,每个分片都引发了一个ARP请求。在大多数情况下,在等待ARP应答时,只将最后一个报文发送给特定的目的主机
当第一个数据报片(指的是第一个到达的,而不是指第一个数据报片)到达时,IP层会设置定时器(一般为30秒或60秒),如果定时器超时,数据报的所有数据片没有全部到达,则丢弃。如果不这么去做,会导致接收端的缓存溢出
没有收到ICMP消息的原因:(1)定时器超时时,丢弃,不会产生ICMP差错 (2)未接受到第一个数据报片,缺少UDP首部,ICMP差错接受者无法却分是哪个进程发送的数据报被丢弃(假设应用程序会超时重传)
11.11 ICMP源站抑制差错
当接收数据报的速度比其处理速度快时,可能产生这个差错。使用UDP很容易产生这种差错
11.12UDP 服务器设计
UDP协议的某些特性将会影响我们的服务器程序设计,大致总结如下:
关于客户IP和地址:服务器必须有根据客户IP地址和端口号判断数据包是否合法的能力(这似乎要求每一个服务器都要具备)
关于目的地址:服务器必须要有过滤广播地址的能力。
关于数据输入:通常服务器系统的每一个端口号都会和一块输入缓冲区对应,进来的输入根据先来后到的原则等待服务器的处理,所以难免会出现缓冲区溢出的问题,这种情况下,UDP数据包可能会被丢弃,而应用服务器程序本身并不知道这个问题。
服务器应该限制本地IP地址,就是说它应该可以把自己绑定到某一个网络接口的某一个端口上。
相关文章推荐
- tcpdump使用说明
- Python写的网络爬虫程序
- 卷积神经网络可视化套路
- 论文理解(二)
- 网络——JSON
- 网络爬虫入门教程(二):configs详解
- 网络爬虫入门教程(一):概述
- org.apache.tomcat.util.http.Parameters processParameters 警告: Parameters: Invalid chunk ignored.
- mysql 网络访问远程数据库
- Linux Tcpdump 使用举例 ---持续更新
- Http报头Accept与Content-Type的区别
- C++ 用libcurl库进行http通讯网络编程
- 如何获取URL链接是http还是https
- In Gradle projects, always use http://schemas.android.com/apk/res-auto for custom attributes
- 17年社交网络老司机解读网红现象
- Google搜索 配置 强制用HTTPS
- TCP连接状态详解及TIME_WAIT过多的解决方法
- Volley+ViewPager加载网络图片
- 网络请求框架
- 【httplistener监听获取Post请求参数】