前言
在有了一个大概了解之后,作为web 开发人员,我们还要重点学习某几层,就是网络层(IP),运输层(TCP,UDP),应用层(HTTP,DNS,STMP等)。IP的分配,子网掩码,IP协议确保数据流主机到主机,而计算机通信代表的是计算上进程之间的通信,所以TCP,UDP提出端口概念,一个进程占用一个端口,这样就实现了准确的通信。
TCP和UDP两者的不同是:TCP先建立连接且利用相关技术保证了可靠的传输,而UDP只是尽最大限度的进行传输,是面向非连接的,是不可靠的,两者在应用层都有相关利用。另外,ip+:+port就是套接字socket。所谓的socket通信中的socket是一个编程api,设计之初它的思想是不止用于TCP/IP协议,一般的用法是它指定源套接字和目的套接字,再指定使用的协议,这样就能实现通信,它能实现TCP/IP协议的通信,具体在后面章节结合图和实例阐述。
计算机网络-网络层(二)
知识点
网络层提供的两种服务
即虚电路服务和数据报服务。
虚电路:面向连接的,建立虚电路,以保证双方通信所需的一切资源,这是一条逻辑上的连接,不同于电话交换的物理连接,如果再使用可靠的网络传输协议,就可使所发送的分组无差错按步序到达终点。
数据报服务:无连接的通信方式,只提供尽最大能力交付的数据报服务。
这两种方式,在当时很有争议,焦点就是到底可靠的交付是在网络层还是运输层,有人觉得借助电信网成功经验,而互联网先驱却提出崭新的设计思路:交给上层即计算机来进行差错处理,充分利用了计算机的处理能力。多年实践证明,当时决定在交给上层去实现可靠传输就是正确决定。由于在网络层要保证可靠的传输成本很大,而现在只需成本较低的路由器就行。将可靠的交付交给运输层来解决,即我们的TCP协议。

虚拟互连网络—-解决网络互联
进行网络的互连可能借助以下设备:物理层-集线器;数据链路层-交换机;网络层-路由器;更高层-网关。而从网络层看使用集线器和交换机只是扩大了当前网络,并没有进行网络互连,从网络层来看它仍是一个网络。而网关比较复杂,所以一般采用路由器进行网络互连。
TCP/IP体系中在网络层采用了标准化协议,即使互连的网络是异构的,在网络层看了它好像是一个统一的网络,但是是逻辑互连,内部差异性仍然存在。
IP地址—-解决在互联网中准确定位一个主机
文档:RFC791;整个因特网是一个单一的,抽象的网络。IP地址就是给因特网上的每一个主机或路由器的每一个借口分配一个在全世界范围内唯一的32位标识符。IP地址表示为:{<网络号>,<主机号>}。分类如下图:

IP地址和硬件地址
物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。它们分别在IP数据报和MAC帧的首部。如下图所示:

尽管互连在一起的网络硬件地址体系各不相同,但IP层抽象的互联网却屏蔽了下层的这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或者路由器之间的通信。关于这方面有重要的两个协议。ARP和RARP。
ARP和RARP协议—屏蔽数据链路层的差异
地址解析协议ARP,和逆地址解析协议RARP。来实现IP地址和硬件地址的相互转换。现在RARP的功能在DHCP中已经完成,所以没人再单独使用了。而且ARP只使用在局域网。
ARP协议
ARP高速缓存,请求的时候广播,得到结果保存到缓存中,且定时更新,因为如果请求的主机网络适配器坏了,它的硬件地址也就坏了,改变了,定时更新防止这种情况。
详细细节参考这篇博文。ARP协议详解
IP数据报的格式—具体怎么传输

(1) 版本(version):包含IP地址的版本号,4个比特。
(2) 首部长度(header length):表示IP数据报头长度,4个比特。
(3) 优先级与服务器类型(priority and type of service):用于表示数据包的优先级和服务器类型,8个比特。
(4) 总长度(total length):表示整个IP数据包的长度,16个比特(两个字节)。
(5) 标识符(identification):用于表示IP数据包的标识符,16个比特。
(6) 标志(flags):标志字段,3个比特。
(7) 段偏移量(fragment offset):用于表示段的偏移量。
(8) TTL(time to time):表示IP数据包的生命周期,8个比特。当TTL为0时,该数据包将被丢弃。TTL还对应一个数据报通过的路由器的数目。一个数据报每经过一个路由器,TTL值就会减一。
(9) 协议号:(protocol):协议字段,8个比特,表示IP数据段封装的协议,是TCP还是UDP,TCP的协议号是6,UDP的协议号是17。
(10) 首部校验和(header chechsum):用于表示校验和,16个比特。
(11) 源地址(SA,source ip address):32比特位,表示数据包的源地址
(12) 目的地址(DA,destination ip address),32个比特位,表示数据报道目的地址。
(13) 可选项,内容其实很丰富,用来支持排错、测量以及安全等措施1-40个字节。
子网划分、路由表、超网——解决怎么更好转发
原始做法:
数据报在网络层怎么转发:分组转发算法。数据报在IP层转发分组就是从一个路由器转发到下一个路由器,直到到达目的主机。路由器中有路由表保存下面两个信息:(目的网络地址,下一跳地址),也有默认路由,中间可能经过多次的间接交付。
存在的问题:因为,第一:IP地址空间的利用率有时很低;第二:路由表太大导致性能变坏;第三:两级IP地址不够灵活。
策略:划分子网,采用三级IP地址。IP地址表示为{<网络号>,<子网号>,<主机号>},子网在外看仍然表现成一个网络,内部确感觉划分了若干个子网。增加灵活性,减少主机数。子网掩码:和IP按位与运算得到网络地址。在路由表中加入子网掩码信息。

在划分子网情况下,路由器转发分组算法
(1)从分组的首部提取目的IP地址D
(2)先用与该路由器直接相连的网络的子网掩码与D进行与运算,看结果是否与相应的网络 地址相匹配。若匹配,则进行直接交付。否则就是间接交付,马上执行3
(3)若路由表中有一条到目的主机D的特定路由,则将分组转发给其指明的下一跳路由器。否则执行4
(4)对路由表中每一行的子网掩码和D进行与运算,若结果与该行的目的网络地址匹配,则将分组传给该行指明的下一跳路由器。否则执行5
(5)若路由表中有一个默认路由,则将分组传给路由表中指明的默认路由器。否则执行6
(6)报告转发分组出错。
CIDR 无分类编址(构造超网)
出现问题:IP地址都快分完了。
解决办法:CIDR,特点:消除传统的A、B、C类地址以及划分子网的概念,回到二级地址,网络前缀+主机号,还可采用斜线法,斜线数字代表前缀中1的个数。
ipv4和ipv6
两者比较可参考这个博文:ipv4和ipv6之间区别比较,但是当前主流的仍然是v4,为什么,这个我看了下知乎上的答案:IPv6的概念都出来好久了,为什么现在的主流还是IPv4?,感觉主要是已经大范围的使用,如果要更新,很多软硬件需要换代,这样成本太高。。。
ICMP网际控制报文协议——解决怎么尽最大限度的保证可靠
详细细节参考博文:ping原理和ICMP协议,ICMP协议基础讲解。
ping 的原理
ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序列号从0开始计数,依次递增。而Windows ping程序的ICMP序列号是没有规律。
ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部+ 1472字节<数据大小>38字节
ICMP报文格式:IP首部(20字节)+8位类型+8位代码+16位校验和+(不同的类型和代码,格式也有所不同)
Ping工作过程
假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?
首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。
其中映射表由ARP实现。ARP(Address Resolution Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。
主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。
即先由IP地址,在网络层传输,然后再根据mac地址由数据链路层传送到目的主机
因特网路由选择协议——解决怎么进行路由选择
目前的因特网中,一个大的ISP(信息服务提供者)就是一个AS(自治系统),分两类内部网关协议IGP和外部网关协议EGP,自治系统之间的路由也叫做域间路由选择,内部叫做域内路由选择。
内部网关协议RIP和OSPF—-同一个AS的路由
两者的内容和比较可以参考博文:RIP和OSPF的区别比较。
结论:
RIP协议是一种传统的路由协议,适合比较小型的网络,但是当前Internet网络的迅速发展和急剧膨胀使RIP协议无法适应今天的网络。
OSPF协议则是在Internet网络急剧膨胀的时候制定出来的,它克服了RIP协议的许多缺陷。RIP是距离矢量路由协议;OSPF是链路状态路由协议。
RIP&OSPF管理距离分别是:120和110
- RIP协议一条路由有15跳(网关或路由器)的限制,如果一个RIP网络路由跨越超过15跳(路由器),则它认为网络不可到达,而OSPF对跨越路由器的个数没有限制。
- OSPF协议支持可变长度子网掩码(VLSM),RIP则不支持,这使得RIP协议对当前IP地址的缺乏和可变长度子网掩码的灵活性缺少支持。
- RIP协议不是针对网络的实际情况而是定期地广播路由表,这对网络的带宽资源是个极大的浪费,特别对大型的广域网。OSPF协议的路由广播更新只发生在路由状态变化的时候,采用IP多路广播来发送链路状态更新信息,这样对带宽是个节约。
- RIP网络是一个平面网络,对网络没有分层。OSPF在网络中建立起层次概念,在自治域中可以划分网络域,使路由的广播限制在一定的范围内,避免链路中继资源的浪费。
- OSPF在路由广播时采用了授权机制,保证了网络安全。
上述两者的差异显示了OSPF协议后来居上的特点,其先进性和复杂性使它适应了今天日趋庞大的Internet网,并成为主要的互联网路由协议。
外部网关协议 BGP—-不同AS的路由
BGP是不同自治系统的路由器之间交换路由信息的协议。只能是力求寻找一条能够到达目的网络且比较好的路由,而并非要找到一条最佳。
IP多播
基本概念
在因特网上进行多播,比如90个主机接收视频节目,并不能去一个个去发送,应该是发送一次,收听的人都收到。能运行多播协议的路由器叫多播路由器。
多播所用到的协议
IP多播需要两种协议:网际组管协议IGMP和多播路由选择协议(尚未标准化)
VPN和NAT
有的时候有些机构的很多部分分布在相距较远的地点。不同地点有自己的专用网,如果这些专用网要进行通信的话那么就有两种方式。一种是租用电信公司的线路,但是这样费用较高;另外一种就是建立VPN。

显然,每个场所至少要有一个路由器具有合法的全球IP地址,如图中R1、R2。这两个路由器和因特网的接口地址必须是合法的全球地址,在专用网内部的接口地址则是专用网的本地地址。如果场所A中的主机需要和场所B中的主机进行通信的话,那么就需要经过R1、R2。
现在有一个问题就是,在专用网内部的主机有一个专用地址,但是又想和因特网上的主机通信,那么该怎么办?
网络地址转换NAT(Network Address Translation),就用来解决这个问题。这种方法首先需要在专用网连接到因特网的路由器上安装NAT软件。就是当专用网的主机和外部网进行通信的时候,数据包经过NAT路由器的时,NAT路由器将专用网地址转换为一个全球地址,然后并记录下这个转换对。当收到发往某全球地址的数据包时候,再将此数据包转发到内部网中得某主机(与该地址对应的内部主机)。如下图:
如果NAT路由器有N个全球地址的话,那么就可以支持专用网内部N台主机同时与因特网进行通信。这样就可以使得专用网内较多的主机轮流使用这N个全球地址。注意:因为地址转换的关系,所以通过NAT路由器的通信必须由专用网内的主机发起。理解???因为一开始不知道如何转换。所以专用网内部的主机是不可以作为服务器的。
说明
文中出现的图片,文字描述有些来自互联网,但是出处无法考究,如果侵犯您的相关权益,请联系我,核实后我会马上加上转载说明。谢谢!