网络知识学习|网络入门知识学习( 四 )


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通信了 。
逆地址解析协议,即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服务器的响应信息,表示初始化失败 。
6. 路由选择协议
常见的路由选择协议有:RIP协议、OSPF协议 。
RIP协议:底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包 。
OSPF协议:Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟 。
回到顶部
7. 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连接就这样关闭了!