虽然没有学过网络通信,但是也经常听人来来回回地说,还是得了解一下。
学习中,如有不足,还望指教。
首先从最通俗的开始讲起吧。
我们每天使用计算机,计算机要联网才能进行消息传递,那么计算机之间如何通过网络连接起来,他们之间如何进行消息传递呢,这就需要制定各种协议。
TCP/IP就是这样一种协议。
TCP是Transmission Control Protocol,传输控制协议。IP是Internet Protocol,因特网互联协议。
TCP/IP组合起来,就是网络通信协议。
它定义了电子设备(如计算机)如何接入因特网,以及数据如何在它们之间进行传输的一个标准。
它是Internet最基本的协议,也是其他互联网络的基础。
知道了大概是一个什么东西之后,我们看下它的具体结构吧。
最开始学计算机网络都会讲一个OSI参考模型,里面定义了网络互连的七层框架(应用层、表示层、会话层、传输层、网络层、数据链路层和物理层)。
分层是为了区分功能,每一层使用下层的服务,为上册提供服务。
(图片来自http://www.cnblogs.com/gdayq/p/5797645.html)
特别详细了吧,简单总结下各层功能:
小结就是:
上面三层提供用户与应用程序之间的信息和数据处理;下面三层提供数据传输和交换实现节点之间的通信;中间的第四层传输层作为接口子网和通信子网的桥梁,充当一个承上启下的作用。
上面这个呢,是一个概念上的模型,为实现网络通信标准的制定提供了一个框架,真实系统的实现不一定按这个来,比如我们的TCP/IP。
TCP/IP采用了一种四层模型结构,与OSI的对应关系如下:
(图片来自于http://www.cnblogs.com/gdayq/p/5797645.html)
还是说下各层的功能:
具体每一层的详细解释与协议:
其实最下面应该还有一个实体层。
计算机需要接入网络,可以通过光纤、电缆、无线等方式。通过某种物理手段,表示网络的电气特性,来传送0和1的电信号。
通过物理手段传送的0和1,如何来解析呢,这就是链路层的工作,确定0和1的分组方式。
以太网(Ethernet)协议规定了电信号的分组方式,一组电信号构成一个数据包,也即是帧(Frame)。每一帧分为标头(Head)和数据(Data),标头为18字节,描述了数据的一些特征,如发送者、接受者、数据类型等;数据则是数据包的具体内容,为46字节到1500字节。如果数据过长,则需进行分割。
同时,以太网还规定了所有接入网络的设备需要有一个网卡接口,数据从一个网卡传递到另一个网卡。其中网卡的地址,也即数据包的发送地址和接收地址,就称为MAC地址(Media Access Control Address)。MAC地址为48位,用12个十六进制数据表示。
以太网发送数据时,采用一种广播的方式,向本网络内所有计算机发送数据包,计算机自行判断是否为接收方。
总结就是,链路层负责接收IP数据包并通过网络发送,或者从物理网络上接收数据包进行解析。
常见的协议有:Ethernet 802.3以太网、PPP(Point-to-Point Protocal)点到点、Token Ring 802.5、X.25、Frame relay帧中继、HDLC(High-Level Data Link Control Protocal)高级链路控制协议、ATM(Asynchronous Transfer Mode)等。
刚刚提到链路层发送数据,通过MAC地址找对应的接收方。这样有两个问题:
第一,以太网通过广播的方式发送数据,本网络内所有的计算机都可以接收到包;
第二,如果接受者不在本网络,广播就接收不到了。
为了解决这些问题,出现了IP(Internet Protocol)协议。
互联网是由无数的子网络组成的,因此发送数据包时,我们希望知道是通过广播的方式发往本网络,还是通过路由的方式发往特定的子网络。
IP协议规定了一个网络的地址,用于区分不同的计算机是否属于一个子网络。
注:网址和MAC地址没有联系,MAC地址由网卡决定,网址则由管理员分配。
目前广泛使用IP协议第四版(IPv4)。
IPv4规定,网址由32位组成,通常用四段十进制数表示,从0.0.0.0到255.255.255.255。
互联网中的每台计算机都会被分配一个IP地址,其中前面一部分表示网络,后部分表示主机。网络部分相同则表示两个IP地址属于统一网络。
子网掩码(subnet mask)是一个表示子网络特征的参数。它也由32位组成,但是网络部分全为1,主机部分全为0。
子网掩码 & IP地址 = 子网络
也就是,IP协议为每台计算机分配了一个IP地址,同时确定哪些地址位于同一子网络。
为了将数据包发往其他的子网络,我们需要依据IP协议将IP数据包封装到原始数据包中。
IP数据包分为标头和数据,总长度最大为65535字节,标头为20到60字节,包括版本、长度、IP地址等信息;数据为IP数据包的具体内容。
总结,网络层就是完成不同主机之间的消息传送。具体包括三部分:
回到发送数据包的问题。
发送数据包时,IP地址和MAC地址都封装好了,我们怎么获得这两个地址呢?
事实上,IP地址是已知的,那么,我们希望能够从IP地址解析得到MAC地址。
两种情况:
通信的两台主机不在一个子网络中,这时候只能把数据包发给子网络连接处的网关(gateway),交给网关去处理;
通信的两台主机在同一个子网络中,这时候就需要ARP(Address Resolution Protocol)地址转换协议。
ARP协议会发一个以太网数据包,包含待查询的主机IP地址,MAC则为FF:FF:FF:FF:FF:FF。这是一条广播,所在子网络每一台主机收到这个数据包后,提取了IP地址,和自己的IP地址对比,相同的话则回复自己的MAC地址,否则丢包。
这样,ARP协议就实现了从IP地址中解析出MAC地址。
此外还有RARP(Reverse ARP)反向地址转换协议,通过MAC地址确定IP地址。
IP协议可以实现跨网络数据包传送,但是它是一个面向无连接的网络服务,因此我们需要另外的协议,一旦数据包传送失败时,会返回异常通知,然后就有了ICMP(Internet Control Message Protocol)控制报文协议。
ICMP协议是网络层的补充,可以回送报文,来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。
有了网络层协议,就可以在互联网上任意主机之间建立连接实现通信,但是一个主机有多个网络应用,如何判断数据包是发送给哪个具体应用呢。
此时,需要一个参数,叫做端口(port)。
端口实际上是每一个使用网卡的程序的编号,不同的数据包发送给主机的特定端口,由不同的应用程序接收。端口是一个0到65535的整数,其中,0到1023被系统占用。
注:网络层建立主机到主机的通信,传输层则建立端口到端口的通信。
为了在数据包中加入端口,首先,出现了UDP(User Datagram Protocol)用户数据报协议。
UDP数据包总长度不超过65535字节,包括标头和数据,标头为8字节,定义了发送端口和接收端口,数据为具体内容。最后封装到IP数据包中。
UDP协议简单易实现,但是可靠性差,发出的数据包收不到反馈,为了提高网络的可靠性,出现了TCP(Transmission Control Protocol)传输控制协议。
TCP协议可以理解为有确认机制的UDP协议。每发出一个数据包都要求确认,当出现丢包收不到确认时,发送方就会重发这个数据包。TCP数据包封装在IP数据包中,理论上没有长度限制,但是为了确保网络效率,通常不会超过IP数据包的长度。
TCP协议能够确保数据不会遗失,但是过程复杂、实现困难、消耗更多资源。
为了保证这一点,TCP协议采用了三次握手策略(three-way handshaking)。
总结就是,TCP是一种面向连接的传输层协议,它保证两端通信主机之间的通信可达,而且能正确处理传输过程中丢包、顺序错乱等异常情况;UDP是一种面向无连接的传输层协议,它不关心对端是否真正收到了传送过去的数据,也不进行对端联网或收到数据包的检查。
UDP常用在分组数据较少,或多播、广播通信,以及视频通信等多媒体领域。
注:IP协议属于网络层,主要是找到对方的地址,只是尽可能快地把分组从源节点发送到目标节点,而不提供可靠性保证;TCP协议属于传输层,实现把数据安全地发送给对方,它采用了超时重传、端到端确认分组等机制,提供可靠传输服务。
现在,应用层可以收到传输层的数据了,它需要把这些数据进行解析成不同的应用程序可以理解的格式。
要想完成不同格式的数据解析,就必须有不同的协议来规定数据的格式,这些应用程序协议就构成了应用层。
应用层的数据也就是TCP数据包的数据部分。
最终,以太网数据包的格式就变成了:
那么应用层到底有哪些网络应用,它们又分别采用的什么协议呢?
具体来看看:
1、WWW
浏览网页时,传输的数据格式主要为HTML,浏览器和服务端之间通信的协议是HTTP(HyperText Transfer Protocol)超文本传送协议,端口为80。
2、电子邮件
发送电子邮件用到的协议为SMTP(Simple Mail Transfer Protocol)电子邮件传输协议,端口为25。最开始只能发文件格式,现在的电子邮件格式通过MIME协议扩展,可以发送声音图像等。
3、文件传输
文件传输实现了不同计算机磁盘上的文件的转移,如上传或下载。文件传输过程使用的协议为FTP(File Transfer Protocol)文件传输协议。
FTP进行文件传输时会建立两个TCP连接,一个是发送传输请求时的控制连接,端口为21H,另一个是实际传输数据时的数据连接,端口为20H。
4、远程登录
远程登录指登录到远程的计算机上运行上面的程序。常用的协议有TELNET(TELecommunications NETwork)虚拟终端协议和SSH协议。
远程登录通过TELNET协议提供在网络中其它主机上注册的接口,TELNET会话提供了基于字符的虚拟终端。
TELNET服务为23H端口,使用明码传送,简单方便,但是保密性差。
5、网络管理
网络管理时采用SNMP(Simple Network Management Protocol)协议。
使用SNMP协议管理的主机、网桥、路由器等称作SNMP代理,进行管理的那一端叫做管理器。SNMP就是管理器和代理之间使用的协议。
另外,在SNMP的代理端,保存着网络接口的信息、通信数据量、异常数据量以及设备温度等信息,这些信息可以通过MIB(Management Information Base)访问。
6、域名服务
互联网通过IP地址通信,但是这么一堆数字不符合人类的认知和记忆,因此出现了域名,对IP地址进行命名。
DNS(Domain names System)域名解析服务就提供了域名到IP地址之间的转换,端口为53。
7、文件共享
NFS(Network File System)是网络文件系统,可以实现网络中不同主机间的文件共享。
8、新闻传输
NNTP(Net News Transfer Protocol)网上新闻传输协议,用于新闻的发布、检索和获取。
最后进行下总结:
OSI参考模型 | 功能 | TCP/IP协议族 |
---|---|---|
应用层 | 文件传输、电子邮件、文件服务、虚拟终端等 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 |
表示层 | 数据格式化,代码转换,数据加密 | 无 |
会话层 | 解除或建立与别的接点的联系 | 无 |
传输层 | 提供端对端的接口 | TCP,UDP |
网络层 | 为数据包选择路由 | IP,ICMP,OSPF,EIGRP,IGMP |
数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
差不多就是这样啦~