[关闭]
@XiangZhou 2015-08-04T15:08:56.000000Z 字数 1323 阅读 1862

Linux服务器编程(1)

linux 网络 服务器


前言

虽然有OSI七层标准协议,但是现在Internet上的实际协议是四层的TCP/IP协议族,从上倒下,分别是应用层,传输层,网络层和数据链路层。其是一个分层,多协议的通讯体系。每一层通过不同的协议完成不同的功能,上层使用下层提供的服务,如下图所示。

数据链路层

数据链路层实现了网卡接口的驱动程序,来处理在数据在物理媒介的传输。不同的物理网络,比如以太网,令牌环,wlan,其具体的电气属性时不同的,那么数据链路层必须隐藏这些细节,为上层提供统一的服务接口。
数据链路层包含两个常用协议,一个是ARP(Address Resolve Protocol, 地址解析协议),另一个是RARP(Reverse Address Resolve Protocol,逆地址解析协议)。
数据链路层的上层是使用IP地址来寻找一台主机,而数据链路层使用MAC地址,也就是硬件地址来寻址一台主机。所以网路层需要对IP地址进行转换才能使用数据链路层的功能,那么数据链路层提供了一个协议来帮助网络层完成这样的转换。RARP主要用于如果自身不能保存IP地址,那么其可以通过RARP协议,得到自己在当前网络中的IP地址。

网络层

网络层完成数据包的选路和转发。internet是一个个规模更小的网络组成的,一般通讯的主机不可能是直接连接的,而是通过中间节点连接。网络层的主要任务就是选择这些中间节点,来确定两台主机的通讯路径。对上层,其屏蔽了网络拓扑的细节,在上层看来,两台主机时直接连接的。
网络层的核心协议是IP协议。IP协议根据数据包的目标IP地址来确定如何投递它,如果不能直接发送,那么其会根据一定的算法,找到合适的下一跳节点路由器,将数据包转发给它转发,循环重复这一过程,直接发送到目标主机或者TTL为0。
另一个网络协议时ICMP协议,其主要用于检测网络。

传输层

传输层为两台主机的进程提供端到端的通信能力。数据链路层封装了电气细节,网络层封装了网络连接的细节,传输层为应用程序封装了一条端到端的逻辑通信链路,负责链路数据的收发,超时重载等。
传输层主要有TCP和UDP两种协议。
TCP协议提供可靠的,面向连接和基于流的连接。其使用超时重传,数据确认来保证TCP的可靠性。
UDP协议提供不可靠的,无连接的和基于数据报的服务。UDP无法保证数据的可靠发送,如果在途中发送失败,其指示简单的通知一些应用程序,而没有重传的机制。

应用层

应用层处理处理应用程序的逻辑。
应用层可以使用下层传输层协议,也可以直接使用网络层的协议。

封装和拆包

上层协议是如何使用下层协议,上层协议时怎么解析下层传上来的数据了?其实这就是一个封装和拆包的过程。
应用层需要使用传输层提供的可靠连接传输功能,那么就需要在原来的数据包上添加TCP报头。然后传输层使用了网络层的IP协议,那在TCP报外面又要加上一些IP协议数据报头。使用数据链路层的功能实现真正的发送,就需要在IP数据包外面加上具体物理媒介的头。到达目的主机时,从数据链路层往上开始拆包,那么到达应用层还是对方应用层数据。封装和拆包是互逆的过程。这个过程也就是我们在水平方面上看,为什么他们在每一次上都具有一条逻辑链路。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注