1.ARP 协议

地址解析协议,即 ARP(Address Resolution Protocol),是根据 IP 地址获取物理地址的一个 TCP/IP 协议。主机发送消息时将包含目标 IP 地址的 ARP 请求广播道网络上的所有主机,并接受返回消息,以此确定目标的物理地址;收到返回消息后将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送 ARP 应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机 ARP 缓存;由此攻击者就可以向某一主机发送伪 ARP 应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个 ARP 欺骗。ARP 命令可用于查询本机 ARP 缓存中 IP 地址和 MAC 地址的对应关系、添加或删除静态对应关系等。

ARP 工作流程举例:

主机 A 的 IP 地址为 192.168.1.1,MAC 地址为 0A-11-22-33-44-01
主机 B 的 IP 地址为 192.168.1.2,MAC 地址为 0A-11-22-33-44-02
当主机 A 要与主机 B 通信时,地址解析协议可以将主机 B 的 IP 地址(192.168.1.2)解析成主机 B 的 MAC 地址,以下为工作流程:

(1)根据主机 A 上的路由表内容,IP 确定用于访问主机 B 转发 IP 地址是 192.168.1.2。然后 A 主机就在自己的本地 ARP 缓存中检查主机 B 的匹配 MAC 地址。
(2)如果主机 A 再 ARP 缓存中没有找到映射,它将询问 192.168.1.2 的硬件地址,从而将 ARP 请求帧广播道本地网络上的所有主机。源主机 A 的 IP 地址和 MAC 地址都包括在 ARP 请求中。本地网络上的每台主机都接收到 ARP 请求并且检查是否与自己的 IP 地址匹配。如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,他将丢弃 ARP 请求。
(3)主机 B 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 A 的 IP 地址和 MAC 地址映射添加到本地 ARP 缓存中。
(4)主机 B 将包含其 MAC 地址的 ARP 回复消息直接发送回主机 A。
(5)当主机 A 收到从主机 B 发来的 ARP 回复消息时,会用主机 B 的 IP 和 MAC 地址映射更新 ARP 缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机 B 的 MAc 地址一旦确定,主机 A 就能向主机 B 发送 IP 通信了。

2.RARP 协议

逆地址解析协议,即 RARP,功能和 ARP 协议相对,其将局域网中某个主机的物理地址转换为 IP 地址,比如局域网中有一台主机只知道物理地址而不知道 IP 地址,那么可以通过 RARP 协议发出征求自身 IP 地址的广播请求,然后由 RARP 服务器负责回答。

RARP 协议工作流程

(1)给主机发送一个本地的 RARP 广播,在此广播包中,声明自己的 MAC 地址并且请求任何收到此请求的 RARP 服务器分配一个 IP 地址;
(2)本地网段上的 RARP 服务器收到此请求后,检查其 RARP 列表,查找该 MAC 地址对应的 IP 地址;
(3)如果存在,RARP 服务器就给源主机发送一个响应数据包并将此 IP 地址提供给对方主机使用;
(4)如果不存在,RARP 服务器对此不做任何的响应;
(5)源主机收到从 RARP 服务器的响应信息,就利用得到的 IP 地址进行通讯;如果一直没有收到 RARP 服务器的响应信息,表示初始化失败。

3. 路由选择协议

常见的路由选择协议有:RIP 协议、OSRF 协议

RIP 协议:底层是贝尔曼福特算法,它选择路由的度量标准(metric) 是跳数,最大跳数是 15 跳,如果大于 15 跳,它就会丢弃数据包。
OSPF 协议Open Shortest Path First 开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。

4.TCP/IP 协议

TCP/IP 协议是 Internet 最基本的协议、Internet 国际互联网络的基础,由网络层的 IP 协议和传输层的 TCP 协议组成。通俗而言:TCP 负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而 IP 是给因特网的每一台联网设备规定一个地址。

IP 层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层 ---TCP 或 UDP 层;相反,IP 层也把从 TCP 或 UDP 层接收来的数据包传送到更低层。IP 数据包是不可靠的,因为 IP 并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

TCP 是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于 TCP 是面向连接的所以只能用于端到端的通讯。TCP 提供的是一种可靠的数据流服务,采用 “带重传的肯定确认” 技术来实现传输的可靠性。TCP 还采用一种称为 “滑动窗口” 的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。

TCP 报文首部格式:

TCP 协议的三次握手和四次挥手:

注:seq:"sequance" 序列号;ack:"acknowledge" 确认号;SYN:"synchronize" 请求同步标志;;ACK:"acknowledge"确认标志";FIN:"Finally" 结束标志。

TCP 连接建立过程:首先 Client 端发送连接请求报文,Server 端接受连接后回复 ACK 报文,并为这次连接分配资源。Client 端接收到 ACk 报文后也向 Server 端发送 ACK 报文,并分配资源,这样 TCP 连接就建立了。

TCP 连接断开过程:假设 Client 端发起中断连接请求,也就是发送 FIN 报文。Server 端接到 FIN报文后,意思是说 “我 Client 端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必着急关闭 Socket,可以继续发送数据。所以你先发送 ACK,“告诉 Client 端,你得请求我收到了,但是我还没准备好,请你继续等我的消息”。这个时候 Client 端就进入 FIN_WAIT 状态,继续等待 Server 端的 FIN 报文,当 Server 端确定数据已发送完成,则向 Client 端发送 FIN 报文,“告诉 Client 端,好了,我这边数据发完了,准备好关闭连接了”。Client 端收到 FIN 报文后就知道可以关闭连接了,但是他还是不相信网络,怕 Server 端不知道要关闭,所以发送 ACK 后进入 TIME_WAIT 状态,如果 Server 端没有收到 ACK 则可以重传。Server 端收到 ACK 后,就知道可以断开连接了。Client 端等待了 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭,那好,我 Client 端也可以关闭连接了。Ok,TCP 连接就这样关闭了!

为什么要三次握手?

在只有两次 “握手” 的情形下,假设 Client 想跟 Server 建立连接,但是却因为中途连接请求的数据报丢失了,故 Client 端不得不重新发送一遍;这个时候 Server 端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候 Client 端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下 Server 端将先后收到 2 次请求,并持续等待两个 Client 请求向他发送数据... 问题就在这里,Cient 端实际上只有一次请求,而 Server 端却有 2 个响应,极端的情况可能由于 Client 端多次重新发送请求数据而导致 Server 端最后建立了 N 多个响应在等待,因而造成极大的资源浪费!所以,“三次握手”很有必要!

为什么要四次挥手?

试想一下,假如现在你是客户端你想断开跟 Server 的所有连接该怎么做?第一步,你自己先停止向 Server 端发送数据,并等待 Server 的回复。但事情还没有完,虽然你自身不往 Server 发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故 Server 端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!

使用的协议:FTP(文件传输协议)、Telnet(远程登录协议)、SMTP(简单邮件传输协议)、POP3(和 SMTP 相对,用于接收邮件)、HTTP 协议等。

5.UDP 协议

UDP 用户数据报协议,是面向无连接的通讯协议,UDP 数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP 通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。

UDP 与 TCP 位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP 不被应用于那些使用虚电路的面向连接的服务,UDP 主要用于那些面向查询 --- 应答的服务,例如 NFS。相对于 FTP 或 Telnet,这些服务需要交换的信息量较小。

每个 UDP 报文分 UDP 报头和 UDP 数据区两部分。报头由四个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP 报头由 4 个域组成,其中每个域各占用 2 个字节,具体如下:
(1)源端口号、(2)目标端口号、(3)数据报长度、(4)校验值

使用 UDP 协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFSBOOTP

TCP 与 UDP 的区别:TCP 是面向连接的,可靠的字节流服务;UDP 是面向无连接的,不可靠的数据报服务

6.DNS 协议

DNS 是域名系统 (DomainNameSystem) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将 URL 转换为 IP 地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的 IP 地址,在 Internet 上域名与 IP 地址之间是一一对应的,DNS 就是进行域名解析的服务器。DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。

7.NAT 协议

NAT 网络地址转换 (Network Address Translation) 属接入广域网 (WAN) 技术,是一种将私有(保留)地址转化为合法 IP 地址的转换技术,它被广泛应用于各种类型 Internet 接入方式和各种类型的网络中。原因很简单,NAT 不仅完美地解决了 lP 地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

8.DHCP 协议

DHCP 动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用 UDP 协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配 IP 地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

9.HTTP 协议

超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。

10. 一个举例

在浏览器输入 www.baidu.com 后执行的全部过程

1)客户端浏览器通过 DNS 解析到 www.baidu.com 的 IP 地址 220.181.27.48,通过这个 IP 地址找到客户端到服务器的路径。客户端浏览器发起一个 HTTP 会话到 220.161.27.48,然后通过 TCP 进行封装数据包,输入到网络层。

2)在客户端的传输层,把 HTTP 会话请求分成报文段,添加源和目的端口,如服务器使用 80 端口监听客户端的请求,客户端由系统随机选择一个端口如 5000,与服务器进行交换,服务器把相应的请求返回给客户端的 5000 端口。然后使用 IP 层的 IP 地址查找目的端。

3)客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

4)客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定 IP 地址的 MAC 地址,然后发送 ARP 请求查找目的地址,如果得到回应后就可以使用 ARP 的请求应答交换的 IP 数据包现在就可以传输了,然后发送 IP 数据包到达服务器的地址。