网络通信概述

来源:互联网 发布:网络4大粪坑 编辑:程序博客网 时间:2024/06/06 03:41

要编写计算机网络通信的程序,首先要确定这些程序相互通信所用的协议

客户与服务器通信涉及多个网络协议层。例如web客户与服务器之间使用TCP通信,TCP又使用IP通信,IP再通过某种形式的数据链路层通信。

Tcp/Ip体系结构从上到下分为应用层,运输层,IP层,网络接口层。
应用层一般具有DNS,FTP,SMTP,HTTP,SNMP,Telnet等协议
运输层具有TCP和UDP协议
IP层又包括IP协议和ARP,ICMP,IGMP协议
网络接口层主要是数据在计算机内部传输,在五层协议中又细分为数据链路层和物理层。

网络编程主要考虑的是IP层往上的协议,一般不对底层细节进行考虑。

首先介绍一下网络层。
数据从一端的网络层发送到另一端的网络层中间要经过路由器,而数据在路由器之间转发的其实是一组一组的,也叫做ip数据报。这些ip数据报在路由器之间传输是不可靠的,意思就是所传输的分组有可能丢失,出错,重复,不按序到达。因为网络层之间是不需要建立连接,不像TCP协议那么规范,要经过三次握手。所以数据出现问题是不可避免的,但是这种传输带来的好处就是路由器不需要做太多的工作,因此路由器价格就不会太贵,但是传输到对端的数据不准确怎么办,这就要交到运输层负责,运输层有差错检测,流量控制等,可以对传输来的数据进行纠正。
我们知道一个个局域网之间的连接是通过路由器的,但是数据又是怎么找到路由器然后正确的交付到对方主机上的呢?这就要涉及到IP地址。
ip地址就是给因特网上的每一个主机或路由器的每一个接口分配一个全世界范围内唯一的32位标识符
IP地址分为A,B,C,D,E类,最常用的就是ABC这三种类,D类用于多播,E类保留。
每一类的IP地址都由固定长度的字段组成,前面的是网络号,后边的是主机号。在网络号最前边还有个类别位,用于区分是哪一类IP地址。
A类的类别位为0,B类的类别位为10,C类的类别位为110.
A类的网络号为8位,B类的网络号为16位,C类的网络号为24位。
所以说从IP地址来看,IP地址不仅能够确定主机,还能确定主机所在的网络。
首先我们看网络号
A类的网络号可用的为7位,但是当网络号全为0时,表示本网络。这7位全为1时(01111111)即网络号为127表示用于本地主机进程通信测试用。
而且主机号全为0和全为1也不分配,全为0表示这个主机处于哪个网络,全为1表示这个网络所有的主机。
B类和C类与A类类似,所以对于可指派的网络来说,A类第一个可指派的网络为1,最后一个为126,B类第一个为128.1(B类128.0.0.0不指派),最后一个为191.255,C类第一个为192.0.1(C类192.0.0.0不指派),最后一个为223.255.255.
因此有了IP地址,路由器就能根据目的地址的网络号转发分组。一般我们规定一个主机只能有一个IP地址,当主机连接到多个网络上时,一个主机就需要有多个IP地址,所以说路由器会存在多个IP地址。
这里还有一个问题,IP数据报一般会包括主机IP地址和目的IP地址,而且ip数据报在路由器转发过程中主机ip地址和目的ip地址是不会变的,这样不同的路由器才能根据目的ip地址找到目的主机所在的局域网然后找到主机,而且目的主机也会知道是谁发的信息。但是路由器太多了,我们把数据转发到最近的路由器上,那么下一步该走哪个路由器呢?这就要说到硬件地址MAC
硬件地址是嵌入到主板中的地址,每一个主机,路由器都有一个硬件地址。处理硬件地址的地方是数据链路层,ip地址的ip数据报交给数据链路层,就封装成了MAC帧,在主机和路由器,路由器和路由器之间的传输都使用的是MAC地址,这些MAC地址封装在MAC帧的首部。假设有主机H1,路由器L1,L2,L3,主机H2
主机H1向H2发送数据经过L1,L2,L3,在数据链路层,MAC帧首先封装H1和L1的MAC地址,然后传送到L1时,封装L1和L2的MAC地址。这样就可以一步步找到H2.
那么如果我们知道一个机器的IP地址,要如何知道硬件地址呢,这就需要地址解析协议ARP
每一个主机都设有ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表
当主机A要向本局域网上的某个主机b发送ip数据报时,就先在其ARP高速缓存中查看有无主机b的IP地址。如果没有
1 ARP进程在本局域网上广播发送一个ARP请求分组
2 本局域网所有主机收到ARP请求分组
3 b的ip地址和ARP请求分组中要查询的ip地址一致,就收下这个ARP请求分组,并向主机a发送ARP响应分组。
4 a收到b的响应分组后,在ARP高速缓存中写入b的ip地址到硬件地址的映射。

根据IP地址我们发现一个网络地址可以连很多台主机,但是规定一个网络中最多可以连1024台计算机,这样就会造成很多主机地址的浪费。而且这样还会造成路由器转发表特别大,所以我们改进了IP地址,又在主机号的前几位划分一段作为子网号段。这样我们还使用网络号找到目的主机所在的网络,但是当到达这个网络时,路由器会根据子网号将数据发送到指定的子网然后发送到主机。
那么路由器是怎样将数据传送到子网上的呢?从数据报来看,没办法看出网络是否划分子网,所以就要借用子网掩码。
假设一个B类IP地址为145.13.3.10,因为B类地址前16位为网络位,所以目的地址的网络地址为145.13.0.0,然后路由器根据网络地址将数据传送到目的网络的路由器,目的网络的路由器根据子网掩码将数据传送到目的子网上。那么这个子网掩码又是怎么得到的呢?因为会在主机号字段划分一部分作为子网号,所以子网掩码就是网络号子网号段全为1,主机号段为0。将IP地址与子网掩码相与可以得到子网号段。
因特网标准规定所有的网络都必须有子网掩码,即使不划分子网也有子网掩码。那么如果不划分子网,路由器要怎么处理呢,因为路由表中都有一段子网掩码,所以如果不划分,要使用默认子网掩码,A类地址的默认子网掩码为255.0.0.0,B类为255.255.0.0,c类为255.255.255.0

原创粉丝点击