网络通信学习——TCP/IP协议

虽然没有学过网络通信,但是也经常听人来来回回地说,还是得了解一下。
学习中,如有不足,还望指教。


首先从最通俗的开始讲起吧。
我们每天使用计算机,计算机要联网才能进行消息传递,那么计算机之间如何通过网络连接起来,他们之间如何进行消息传递呢,这就需要制定各种协议。

TCP/IP就是这样一种协议。
TCP是Transmission Control Protocol,传输控制协议。IP是Internet Protocol,因特网互联协议。
TCP/IP组合起来,就是网络通信协议。
它定义了电子设备(如计算机)如何接入因特网,以及数据如何在它们之间进行传输的一个标准。
它是Internet最基本的协议,也是其他互联网络的基础。


知道了大概是一个什么东西之后,我们看下它的具体结构吧。

最开始学计算机网络都会讲一个OSI参考模型,里面定义了网络互连的七层框架(应用层、表示层、会话层、传输层、网络层、数据链路层和物理层)。
分层是为了区分功能,每一层使用下层的服务,为上册提供服务。

网络通信学习——TCP/IP协议_第1张图片
(图片来自http://www.cnblogs.com/gdayq/p/5797645.html)

特别详细了吧,简单总结下各层功能:

  • 应用层(Application Layer):最高层,是用户与网络的接口,为网络应用提供访问OSI环境的手段,实现用户的应用需求,如文件传输、收发邮件等。
  • 表示层(Presentation Layer):处理两个通信系统交换信息的表示方式,包括数据格式交换、数据加解密、解压缩、终端类型转换等。
  • 会话层(Session Layer):这一层的功能是管理和协调不同主机上各进程直接的通信,即负责建立、管理、终止应用程序直接的会话。
  • 传输层(Transport Layer):这一层的作用是为上层协议提供端到端的可靠透明的数据传输服务,包括差错控制和流量控制等问题,传输层传送的协议数据单元称为段或报文。
  • 网络层(Network Layer):为传输层提供服务,通过寻址建立节点之间的连接,完成数据包从源端到目的端的传送,它需要选择路由、建立和维护连接、控制网络拥塞和计费等。
  • 数据链路层(Data Link Layer):这一层主要是解决两个相邻节点之间的通信问题,将数据分帧,通过校验、确认、反馈和重发等手段,在不可靠的物理链路上实现几乎无差错的数据传输,此外,他还控制数据传输速率(流量)。常用设备有:网桥、交换机。
  • 物理层(Physical Layer):模型的最底层,利用物理传输介质为数据链路层提供物理连接,以便透明地传送比特流。常用设备有:网线、中继器、调制解调器、网卡、卫星、微波等。

小结就是:
上面三层提供用户与应用程序之间的信息和数据处理;下面三层提供数据传输和交换实现节点之间的通信;中间的第四层传输层作为接口子网和通信子网的桥梁,充当一个承上启下的作用。 


上面这个呢,是一个概念上的模型,为实现网络通信标准的制定提供了一个框架,真实系统的实现不一定按这个来,比如我们的TCP/IP。

TCP/IP采用了一种四层模型结构,与OSI的对应关系如下:

网络通信学习——TCP/IP协议_第2张图片
(图片来自于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数据包,选择接收方主机路径,将数据包发往适当的网络接口;
  • 对于接收到的数据包,首先检查其合法性,然后寻径,如果到达接收方主机,则去掉解析数据包交给适当的传输协议,否则转发数据包;
  • 处理路径、流控、拥塞等问题。

回到发送数据包的问题。
发送数据包时,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数据包的数据部分。
最终,以太网数据包的格式就变成了:

网络通信学习——TCP/IP协议_第3张图片

那么应用层到底有哪些网络应用,它们又分别采用的什么协议呢?
具体来看看:

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

差不多就是这样啦~

你可能感兴趣的:(网络通信学习)