1. TCP/IP 协议栈和 OSI 模型简介
Transmission Control Protocol/Internet Protocol传输控制协议/因特网互联协议
TCP/IP是一个Protocol Stack,包括TCP、 IP、 UDP、CMP、 RIP、TELNET、FTP、 SMTP、ARP等许多协议,最早发源于美国国防部(缩写为DoD)的因特网的前身ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准
由互联网工程任务组负责维护
共定义了四层和ISO参考模型的分层有对应关系
ethr(IP(TCP(App([DATA]))SCR 
1.1. TCP/IP中各种协议服务工作的层级:
1.1.1. TCP/IP 应用层

- http协议也是工作于应用层
1.1.2. TCP/IP 传输层

1.2. 可靠性 vs.高效性

2. 传输层
2.1. TCP协议
2.1.1. 特性
- 工作在传输层
- 面向连接协议 :先建立连接,再传输数据(三次握手和四次挥手)
- 全双工协议
- 半关闭 :一方关闭,变成了单工传输
- 错误检查
- 将数据打包成段,排序
- 确认机制
- 数据恢复,重传
- 流量控制,滑动窗口
- 拥塞控制,慢启动和拥塞避免算法
2.1.2. TCP包头

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor (此值在三次握手阶段TCP选项Window scale协商得到)得出此值
校验和:提供额外的可靠性
紧急指针:标记紧急数据在数据字段中的位置
选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
- 常见选项:
- 最大报文段长度:Maxium Segment Size,MSS,通常1460字节
- 窗口扩大:Window Scale
- 时间戳: Timestamps
- 常见选项:
2.1.2.1. TCP包选项部分详解
- 最大报文段长度MSS(Maximum Segment Size)
指明自己期望对方发送TCP报文段时那个数据字段的长度。比如:1460字节。
数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,网络的利用率就不会超过1/41。
若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。
因此MSS应尽可能大,只要在IP层传输时不需要再分片就行。在连接建立过程中,双方都把自己能够支持的MSS写入这一字段。
MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中
MTU和MSS值的关系:MTU=MSS+IP Header+TCP Header
通信双方最终的MSS值=较小MTU-IP Header-TCP Header
窗口扩大 为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项
时间戳
可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。 也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文
2.1.3. TCP包注意点:
- 端口号指定的是输层TCP上一层工作的应用层协议或者服务的端口,比如ssh服务端口号就是22,ftp为21,telnet 23,smtp 25,pop110.
- 不同的软件和服务用不同的端口号,基于网络通讯的软件分为服务器和客户端软件,但这些服务器软件的端口都是固定端口,客户端的端口是随机分配的。通过源端口和目标端口就确认了应用程序唯一标识。
2.1.4. TCP协议PORT
2.1.4.1. 映射第四层到应用程序

2.1.4.2. 介绍
传输层通过port号,确定应用层协议
Port number:
- tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
0-65535 - udp:User Datagram Protocol,无连接的协议
0-65535 - IANA:互联网数字分配机构(负责域名,数字资源,协议分配)
- 0-1023:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用
- 22/tcp(ssh), 80/tcp(http), 443/tcp(https)
- 1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用
- 1433/tcp(SqlServer), 1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp(memcached)
- 49152-65535:动态端口或私有端口,客户端程序随机使用的端口
- 其范围的定义:
/proc/sys/net/ipv4/ip_local_port_range
- 其范围的定义:
- 0-1023:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用
2.1.4.3. PORT相关注意点—{/etc/services}
- Linux内私有端口(动态端口)范围(某些情况下可以更改它以免端口数量不够用):
/proc/sys/net/ipv4/ip_local_port_range - 查看已经被使用的固定端口号:
/etc/services
2.1.5. TCP三次握手

2.1.6. TCP四次挥手

2.1.7. sync半连接和accept全连接队列
命令查看:ss –lnt
/proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,建议调整大小为1024以上
/proc/sys/net/core/somaxconn 完成连接队列大小,建议调整大小为1024以上
- 以上两个值可以直接用 echo 1024 > 重定向的方式修改,但是无法永久保存,因此要修改相关配置文件
- 它们的数字决定了服务器主机在同一时间内建立半链接(1次握手)和全连接(3次握手)最大的客户端个数。也就是限制了链接的客户端最大数量。
- 这个半链接状态容易受到黑客攻击导致无法让其他的客户端访问(只发送建立链接的请求,但是不回复SYN=1的信息给服务器端),被称为半链接攻击。
2.1.8. TCP服务拥塞控制和超时重传相关文件
当前所使用的拥塞控制算法 :
/proc/sys/net/ipv4/tcp_congestion_control与TCP超时重传相关的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
/proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)
2.1.9. TCP超时重传
异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是
TCP的重传策略
- 与TCP超时重传相关的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3/proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)
2.1.10. TCP拥塞控制
网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞
TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分:
慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。
拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
- 当前所使用的拥塞控制算法
/proc/sys/net/ipv4/tcp_congestion_control
2.2. UDP协议
- 工作在传输层
- 提供不可靠的网络访问
- 非面向连接协议
- 有限的错误检查
- 传输性能高
- 无数据恢复特性
2.2.1. UDP包头

3. Internet层:

3.1. icmp协议:网络控制信息协议—{ping}
3.1.1. ICMP的报文封装

ICMP报文是使用IP数据报来封装和发送的,携带ICMP报文的IP数据报完全像其他类型数据的数据报那样在网络中被转发,没有额外的可靠性和优先级,由于IP数据报本身被放在底层物理数据帧中进行发送,因此,ICMP报文本身也可能丢失或者出现传输错误
3.1.2. ICMP报文类型

ICMP报文可以分为两大类:ICMP差错报告报文和ICMP查询报文。差错报告报文主要用来向IP数据报源主机返回一个差错报告信息,这个错误报告信息产生的原因是路由器或主机不能对当前数据报进行正常的处理,例如无法将数据报递交给有效的协议上层,数据报因为生存时间TTL为0而被删除等。查询报文用于一台主机向另一台主机查询特定的信息,通常查询报文都是成对出现的,即源主机发起一个查询报文,在目的主机收到该报文后,会按照查询报文约定的格式为源主机返回一个应答报文。
注意,ICMP差错报文并不能纠正差错,它只是简单地报告差错,差错报告报文总是被返回给数据报的原始发出者,因为数据报中关于路由的唯一可用信息就是源IP地址和目的IP地址,路由器在不能正常处理数据报时,会产生相应的差错报文并返回给数据报源端。差错的纠正需要留给高层协议,当源主机网络层收到差错报告报文后,或者直接根据报文做出相应的处理,或者向更高层的协议通知这个差错信息,由上层协议选择处理。查询报文能用于对某些网络问题的诊断,也可用于网络设备信息的交互,查询报文都是成对出现的
3.1.3. 报文格式

8位的类型字段标识了该ICMP报文的具体类型,8位的代码字段进一步指出产生这种类型ICMP报文的原因,每种类型报文的产生的原因都可能有多个,就拿目的站不可达报文来说,产生的原因可能有主机不可达、协议不可达、端口不可达等;16位校验和字段包括整个ICMP报文,即包括ICMP首部和数据区域。首部中的剩余4个字节在每种类型的报文中有特殊的定义
3.1.4. ICMP运用-Ping命令
ping命令就是ICMP协议中的服务,每次默认ping 一个数据包,里面包含64字节的数据。等数据包返回或者超时再ping下一个数据包. 注意 ping发送的数据包必须有去有回才算ping通,光去不回或者去都去不了都算没有ping通。
-c ping的次数
-w 等待时长,单位为妙
-f 泛洪ping,根据CPU频率能力尽最大可能去ping
-s 指定一个包的数据大小,centos里面最大65507字节
比如用 ping -f -s 65507 IP地址 用于简单的攻击效果,占用对方IP带宽,造成对方网络卡顿甚至影响系统速度。(当然安装防火墙之后可以防止这种简单的攻击)
ttl:time to live ping命令中显示的数据包在网络中最大生存时长,它表示的数量是默认值减去数据包经过的路由器的数量剩下的值。linux中ttl默认值为64.
/proc/sys/net/ipv4/ip_default_ttl,可以重定向直接更改ttl(注意这个TTL是IP协议报头中的生存时间项)
3.2. APR协议:地址解析服务协议
3.2.1. ARP报文
ARP的请求与应答都是依赖ARP报文结构进行的,ARP报文是放在以太网数据帧中进行发送的,下面是ARP报文的格式:

当它封装在以太网帧中的格式:

在ARP表建立前,主机并不知道目标MAC地址,所以在一开始的时候只能通过广播的方式将ARP请求包发送出去,处于同一局域网的主机都能接收到广播的数据包。所以一开始目标MAC地址是FF-FF-FF-FF-FF-FF,而以太网首部的帧类型是有多种,对于ARP数据包来说,其值为0x0806,对于IP数据报来说,其值为0x0800。
在ARP首部一开始的2个字节存储的是硬件类型,表示要知道目标网卡的硬件类型,其中,值为1表示以太网地址;接下来还有2字节的协议类型,其中,0x0800表示IP协议,其他还可能是ICMP/IGMP协议等;接下来有1个字节表示硬件地址长度,指出该报文中硬件地址的长度,对于以太网硬件类型,它的值为6;还有1字节的协议地址长度,如果是ARP协议、IP协议等,该值为4;ARP首部最后的op字段用于记录ARP操作的类型,分别是:
- ARP请求,其值为1。
- ARP应答,其值为2。
- RARP请求,其值为3。
- RARP应答,其值为4。
我们只关心ARP的请求与应答即可,RARP是逆地址解析协议,在这里我们就不用去了解,它在网络中基本已经被淘汰,用于主机在启动的时候获得自己的IP地址。
对于ARP首部后面的四个字段分别是源MAC地址、源IP地址、目标MAC地址、目标IP地址,这些就是比较简单的了。
3.2.2. APR作用
它的作用就是找到逻辑上的IP地址对应的网络中真正主机的位置,也就是其对应的MAC地址。
如果目标地址IP与本机就在同一网段,则当数据传出到这一个IP地址时,比如说ping IP地址,首先先通过ARP协议对IP其进行解析,找出物理上的MAC地址,然后将数据包向其转发
如果目标IP和本机不在一个网段之内,则会向路由器的端口转发,因为在ARP表中,这个IP地址对应的MAC就是路由器连接到此网段的端口,至于后面路由器怎么找到这个IP对应的真正的主机的地址,就是路由器和路由表中的工作了。它会一级一级经过路由器转发,直到最终找到目标IP地址的网段和其真正的MAC地址主机,将数据转发给目标
3.2.3. 同一网段内实现过程(ARP表的建立):
当知道目标的IP地址之后,第一次发送数据便以广播方式在当前网段内发送消息,询问目标IP地址的以太网协议(MAC)地址(注意在以太网协议中,这个广播信息帧的目标MAC地址也就是12个F,源地址就是本机的MAC地址)
当目标IP地址主机收到这个广播消息之后,他就会知道这条消息的源IP地址以及源MAC地址(因为在广播信息中写的有源MAC地址和IP地址,但需要注意MAC地址是二层以太网协议的报头中的,IP地址是第三层ARP协议中报头中的,其中IP地址包括本机的IP还包括目标主机的IP。这样目标IP主机收到广播才会处理这条信息,其他IP的发现不是发给本机的就会忽略掉这个广播。
- 注意这些信息存在数据中不同报头中,并存储在两个相互通讯的主机内存中的ARP表内(每个主机都有ARP表{IP和mac对应}和路由表{IP网段和网卡端口}对应)。
- 而之前说的MAC端口表是存在交换机中的内存内(MAC表只在交换机内,其内部是{MAC和prot端口表})
- 不要搞混淆了,它们并不是相同的表,而且存储的设备也不同,分别是主机和交换机。
当目标IP主机收到发给自己的询问的广播信息后,它会处理并以单播方式回复发送广播的这个IP和MAC地址的主机一条信息,(其中在以太网协议中的报头中就会包含本机的MAC地址)这样双方就都知道了对方的IP和MAC对应关系,就会把它各自存入自己内存的ARP表中,下次再进行相互访问时就不用再发送广播而是直接单播方式进行传输数据了。
- 注意:当网络服务重启(systemctl restart network)之后便会清空ARP表,之后便会再次重新进行上述过程进行对比寻找。
- 经过测试抓包信息可知,第一次双方通讯建立ARP表的时候,数据帧的内容很少。

发送广播方的帧内data区域:包含着发送ARP广播的源主机IP和目标IP,注意MAC在以太网帧报头处,目标MAC为12个f,源MAC就是本机MAC,type指定就是ARP(0806)
回复方数据data区域内:它本机的IP和对方的IP 同样的在以太网帧报头处,这时候已知了目标MAC(发送时源MAC),因此源MAC和目标MAC都会写上。

3.2.4. 跨网段(路由器隔离)的APR实现(APR表的建立)过程:
注意:ARP是分段广播的(不同网段内),路由表优先级高于ARP协议
- 每次先判断路由表,再决定是ARP广播寻找网关mac还是寻找目标主机mac
- 如果通过路由表得知,目标IP不在本机的网卡IP所连接的网段中,则ARP广播会去寻找网关的mac(以便之后将报文转发给网关(路由器)并让它继续处理)
- 如果通过本机路由表得知,目标IP就在本机的网卡IP所连接的网段中,(也就相当于在同一个LAN内)则ARP广播会去直接寻找目标主机mac
假如发送方和目标方主机之间隔着1个或者多个路由,则发送数据时(已知本机IP和目标IP),首先在本机网段的路由这一侧,发送数据时会先通过ARP广播找到本机网段的网关对应的MAC,也就是路由器接到这个网段接口IP对应的MAC(这里隐含了一个提前判断,就是主机已经判断过目标IP和本机IP不在一个网段内,因此它就会用广播寻找本机所在网段的路由网关IP接口的MAC地址。从这里也可以看出路由寻址是要高于APR协议的,先判断路由再判断ARP),然后本机就会将数据包转给网关到路由
转给第一级路由之后,路由器就会根据这个路由的路由表内的信息判断要将这个数据包从此路由的哪一个端口往外转发,并转到下一个路由的哪一个网关。在这第二个网段转发的过程中也是通过APR协议找到下一个网关对应的MAC,然后将数据包转发给下一个网关。
注意路由表一行内包含 1.目标网段(2.包括子网掩码),3.能发送到目标网段的出口端口 4.能转发给目标网段的下一个路由器的网关入口端口
当然路由这是在网络层说的,源IP和目标IP都仍然为最初的IP保持不变(因为这些IP地址并不在以太网帧报头内而是在网络层IP协议的报头数据内,路由器去掉以太网帧报头之后就会根据网络层报头内的目标IP地址进行路由表匹配,并再次以太网封装转发出去,不改变IP协议中的内容,除非是有NAT功能的路由)但在数据链路层来说,以太网帧报头内就是指从这个路由器转出的端口MAC到下个路由器接入的网关MAC,因此每经过一个路由器都会进行封装拆封的过程会不断改变。
第2个步骤重复进行直到数据转发到与目标IP网段相连的路由器,此时路由器就会把数据发送到目标IP的主机上。
注意直接与路由器相连的网段 其目标网段和子网掩码就是相连的这个网段和子网掩码不必多说,但注意其网关为0.0.0.0
全为0的IP地址 0.0.0.0,代表着IP地址不明,也可以认为是它代表了所有的IP地址。
- 如果它在路由表中的目标网段中,意味着这一条路由表项是默认路由条目,所有找不到匹配项的未知IP的数据都会往这一项写的网关上转发
- 而如果这全为0的地址写在路由表项网关一栏上,一种情况是它代表这一路由表项对应的转出端口就在这一项前面所写的目标网段上,也就相当于是路由器直连到前面写的目标网段。此时这个路由表就会从这个转出端口进行ARP广播来寻找目标IP的MAC地址。(注意在这里目标的IP地址和这一项对应的端口的IP地址在同一个网段)
- 而另一种情况就是此路由表项所写的目标网段和这个端口不在同一个网段,但是网关仍然写的都是0.0.0.0(正常情况下不在同一网段要写下一个路由的网关入口进行转发的);这种情况下就是为了让这个端口的主机的IP所在的网段能够与这个路由表项所写的目标网段进行相互通信,(注意它俩"主机在这个端口的IP"和"路由表在这个端口这一项写的目标网段"不在一个网段,和第一种情况不同,虽然也是直连)其实际效果就是让这个端口和路由表目标网段的IP进行通信时,进行ARP广播,直接寻找MAC地址进行相互通讯。实际应用中就是为了让交换机上不同VLAN的网段之间能够进行通讯但不需要增加路由器,只需要在路由表中添加入本机想要通讯的目标网段,把网关改为全部为0,端口写上,则它在和目标网段内IP进行通讯时,就会进行APR广播直接寻找MAC,因为交换机就是工作在数据链路层用MAC来寻找机器,因此便可不同网段的VLAN之间进行相互通讯了。
- 还有一种情况就是如果目标网段和网关全部都写0.0.0.0 则这个路由表不管数据要转发到任何IP地址,它都会直接在这一项对应的端口进行ARP广播来寻找目标IP的MAC,与这个端口物理上相连的(通过交换机,集线器等,但不能通过路由器,除非刚好要寻找的目标IP就是路由器接到这个物理连接的网络中的端口IP,)所有不论任何IP的机器都可以相互通讯了。但是注意由于它也算是默认路由,因此它路由优先级比较低,如果有优先级高的路由网段
3.2.5. linux中arp 命令—{arp,ip neigh -n}
arp :查看arp表
ip neigh -n :不显示名称只显示数字IP
3.2.6. ARP欺骗
- 在交换机同一个网段内,伪装自己为某个接收方的IP的MAC地址,分别攻击发送方和接收方,让发送方误认为自己是接收方,而让接收方误认为自己是发送方。进而这两个主机之间的通讯便会中间途径ARP欺骗的机器,在经过这个机器转发到真正的接收和发送方。因此数据信息就被窃听甚至能被修改。
- 在一个网段内伪装自己为路由器网关的IP以及MAC,这样这个网段内所有的联通外网的数据都会经过自己,然后再进行转发(或者不转发造成断网),这样就能够盗取密码等敏感信息。
- 因为ARP每次重启网络服务都会重新刷新再次进行动态学习,所以很不安全。因此为了防止ARP欺骗,比较简单的方法就是将网关以及与本机重要连通方的IP和MAC绑定为静态地址,并让它重启不丢失即可(linux中开机自动运行某个脚本进行环境设置,注意重启网络服务也得重写别忘了,windows中自带命令开机不丢失),这样它就不会再被ARP欺骗(静态优先级比动态高)。
3.3. 反向ARP(RARP协议)
发送方主机发送数据的时候不知道对方IP, 需要向DHCP服务器申请IP地址。发送一条ARP广播,其中只包含本机MAC,不含本机IP以及对方IP和MAC,当具有DHCP服务功能的服务器收到广播后回复并分配给它一个IP,并告知对方自己的IP以及MAC。
反向ARP(MAC解析为IP):发送方只有发送方MAC,回复方4个信息都包含,有效信息为两个IP和回复方的MAC;
ARP(ip解析为MAC):发送方有MAC,本机和对方两个IP,回复方虽然两个MAC,两个IP都包含,但是有效信息只有回复方的MAC。
网吧中的无盘电脑就是这样,开机直接申请IP,DHCP服务器查询提前配置好的IP和MAC对应表,匹配MAC给启动的电脑分配一个固定的IP,然后将此电脑将远程硬盘中的系统载入内存启动。
3.3.1. 附加知识点:
centos7 可以tab按键自动补全命令,centos6中不可,但可以装一个软件包名字叫做bash-completion,在yum的epel源里面
留言