常使用的网络有广域网(WAN)、城域网、局域网(LAN),一般我们遇到的场景是广域网和局域网,广域网就是常说的外网,而局域网一般用于学校、公司等场合。在家庭路由器中对应WAN口和LAN口。网络是极为复杂的,为了使开发方面,提出了网络分层的概念。
一.网络分层
业内普遍的分层方式有两种。OSI七层模型 和TCP/IP四层模型。
实际应用中是TCP/IP四层模型,下面对这种模型进行描述。如下图。
应用层协议:
我们一般常见的http、Telnet协议属于应用层,此处不进行详细描述。
传输层协议:
1.TCP:
(1)面向连接;
(2)每一条TCP连接只能是点对点的(一对一);
(3)提供可靠交付的服务;
(4)提供全双工通信;
(5)面向字节流。
2.UDP:
(1)无连接;
(2)尽最大努力交付;
(3)面向报文;
(4)无拥塞控制;
(5)支持一对一、一对多、多对一和多对多的交互通信;
(6)首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。
网络层协议:
1.
IP:网际协议(互连网协议),用来使互连起来的网络能够相互通信。
2.
ARP:地址解析协议,用来把IP地址映射成物理地址。
3.
RARP:逆地址解析协议,使只知道自己硬件地址的主机能够知道其IP地址。
4.
ICMP:互连网控制报文协议,允许主机或路由器报告差错情况和提供有关是否有异常情况的报告。
(应用在ping包命令,用于检查两设备之间网络连接是否正常)
链路层协议:
常规的网络开发场合用不到,此处不详细描述。
二、每一个网络层的工作方式
1.链路层:
每一个网卡都有一个唯一的地址,我们叫其为mac地址。mac地址,就是数据包的发送地址和接收地址。可以用于标识通信过程的发送端与接收端。
每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。
外网情况下通过IP通信,然后ARP和RARP实现MAC地址与IP地址的映射、从而实现两张网卡链路层mac地址与mac地址的交互。链路层的交互对应的就是两张网卡的MAC地址的信息交互。
2.网络层
在上海的主机和北京的主机要完成交互时,单纯用上海主机的mac地址和北京主机的mac地址通信实现交互是无法高效率完成的。
针对这种外网情况,提出了网络层的概念。
网络中有对应的外网IP地址,把外网IP地址当成唯一标识符实现外网通信的身份标记,IP地址难以被人熟记(比如14.119.104.189),并且通过IP地址无法确认设备所处位置和关系,因而可以用一个网址将IP与一个字符串对应起来,这个网址实际上就对应IP地址(如:www.xxxxx.com -> 14.119.xxx.xxx),实现网站与IP之间的转换所需要的协议是DNS。
3.传输层
前面所述链路层设备的交互靠MAC地址标识、外网的交互靠IP地址标识。若一台主机IP确定和MAC均已确认是唯一的,此时用户在同时微信聊天和百度网页。此主机同时与腾讯服务器和百度的服务器同时通信,怎样知道收到的内容是哪一个服务器发送过来的呢。 这里面就要提交一个概念,也就是端口,"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口,通过端口就能确认这个主机是在与哪一个服务器交互,内容是供主机的哪个进程使用。传输层有UDP和TCP协议。两种协议各有特点,前面已描述。
4.应用层
应用层协议很多比如http、FTP等,均是基于TCP、或UDP传输。这个用户可以根据后期项目进行深入了解
通过上面的内容对网络分层的概念和各层对应的协议有一个直观的了解。下面我们分析一下一个TCP包的组成。
如上图所示为一个TCP包,可以看出此包为主机1(IP:192.168.6.95 端口:1949)向主机2(IP:192.168.6.139 端口:8899)发送的一个长度为310字节(负载长度为256字节)的TCP包。
图中1:所指信息为主机1发包主机2收包
图中2:包长度310
图中3:14字节的以太网标头,用于描述主机1的mac和主机2的mac地址。(对应链路层)
图中4:20字节的IP标头,用于搭述IP类型,主机1的IP和主机2的IP地址。(对应网络层)
图中5:20字节的TCP标头,里面包含主机1和主机2端口等信息(对应传输层)
图中6: 负载,对应于应用层
一帧TCP数据结构如下:
下图可以看到在TCP通信过程中,数据的流动情况。