Jirairya

TCP/IP


网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能,一个协议族,比如TCP/IP是一组不同层次上的多个协议组合。TCP/IP常被认为是一个四层协议系统

分层

通信模型

OSI和TCP/IP的关系

OSI七层

OSI七层

  • 第一层:物理层 机械性能:接口的型状,尺寸的大小,引脚的数目和排列方式等。 电气性能:接口规定信号的电压、电流、阻抗、波形、速率及平衡特性等。 工程规范:接口引脚的意义、特性、标准。 工作方式:确定数据位流的传输方式,如:单工、半双工或全双工。 物理层协议有: 美国电子工业协会(EIA)的RS232,RS422,RS423,RS485等; 国际电报电话咨询委员会(CCITT)的X.25、X.21等; 物理层的数据单位是位(BIT),典型设备是集线器HUB。 这层主要和硬件有关,与软件关系不大。

  • 第二层:链路层 链路层屏蔽传输介质的物理特征,使数据可靠传送。 内容包括介质访问控制、连接控制、顺序控制、流量控制、差错控制和仲裁协议等。 链路层协议有: 协议有面向字符的通讯协议(PPP)和面向位的通讯协议(HDLC)。 仲裁协议:802.3、802.4、802.5,即: CSMA/CD(Carrier Sense Multiple Access with Collision Detection)、Token Bus、Token Ring 链路层数据单位是帧,实现对MAC地址的访问,典型设备是交换机Switch。

  • 第三层:网络层 网络层管理连接方式和路由选择。 连接方式:虚电路(Virtual Circuits)和数据报(Datagram)服务。 虚电路是面向连接的(Connection-Oriented),数据通讯一次路由,通过会话建立的一条通路。 数据报是非连接的(Connectionless-Oriented),每个数据报都有路由能力。 网络层的数据单位是包,使用的是IP地址,典型设备是路由器Router。 (网络层协议包括IP协议(网际协议)、ICMP协议(internet互联网控制报文协议)以及IGMP协议(internet组管理协议))(路由器、三层交换机工作在这一层) 这一层可以进行流量控制,但流量控制更多的是使用第二层或第四层。

  • 第四层:传输层 提供端到端的服务。可以实现流量控制、负载均衡。 传输层信息包含端口、控制字和校验和。(包含端口号) 传输层协议主要是TCP和UDP。 传输层位于OSI的第四层,这层使用的设备是主机本身。 

  • 第五层:会话层 会话层主要内容是通过会话进行身份验证、会话管理和确定通讯方式。 一旦建立连接,会话层的任务就是管理会话。

  • 第六层:表示层 表示层主要是解释通讯数据的意义,如代码转换、格式变换等,使不同的终端可以表示。 还包括加密与解密、压缩与解压缩等。

  • 第七层:应用层 应用层应该是直接面向用户的程序或服务,包括系统程序和用户程序, 例如www、FTP、DNS、ssh、http、dhcp、https、POP3和SMTP等都是应用层服务。(小写的内容是自己加的) 数据在发送时是数据从应用层至物理层的一个打包的过程, 接收时是数据从物理层至应用层的一个解包的过程, 从功能角度可分为三组,1、2层解决网络信道问题,3、4层解决传输问题,5、6、7层处理对应用进程的访问。 从控制角度可分为二组,第1、2、3层是通信子网层,第4、5、6、7层是主机控制层。

TCP/IP四层

  1. 链路层:也称为数据链路层或者网络接口层,通常包括OS中的设备驱动程序和计算机中对应的网卡,它们一起处理电缆或其他任何传输媒介的物理接口细节
  2. 网络层:有时也称为互联网层,处理分组在网络中的活动。例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议(网际协议)、ICMP协议(因特网控制报文协议)、IGMP(因特网组管理协议)。
  3. 传输层:主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供可靠的数据通信。所做的工作是将应用程序交给其的数据分成小块交给下层的网络层,确认分组到达,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。另一方面,UDP为应用层提高一种简单服务,只是将称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端,任何必需的可靠性必须由应用层提供。
  4. 应用层:负责处理特定的应用程序细节。比如:telnet、FTP、SMTP、SNMP

TCP/IP的具体含义

TCP/IP指的是TCP(传输控制协议)和IP(网际协议),然而在很多情况下,它只是利用IP进行通信时所必须用到的协议群的统称。具体来说,IP或ICMP、TCP或UDPTELNET或FTP、以及HTTP等都属于TCP/IP的协议。TCP/IP泛指这些协议,有时也称为TCP/IP为网际协议族。

TCP——IP协议群

链路层

在 T C P / I P协议族中,链路层主要有三个目的:(1)为I P模块发送和接收I P数据报;( 2)为A R P模块发送 A R P请求和接收 A R P应答;( 3)为R A R P发送R A R P请求和接收R A R P应答。T C P / I P支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、 F D D I(光纤分布式数据接口)及 R S-2 3 2串行线路等.


IP网际协议

I P是T C P / I P协议族中最为核心的协议。所有的 T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。许多刚开始接触 T C P / I P的人对 I P提供不可靠、无连接的数据报传送服务感到很奇怪,特别是那些具有 X . 2 5或S N A背景知识的人。 不可靠( u n r e l i a b l e)的意思是它不能保证 I P数据报能成功地到达目的地。 I P仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P有一个简单的错误处理算法:丢弃该数据报,然后发送 I C M P消息报给信源端。任何要求的可靠性必须由上层来 提供(如T C P)。

IP是跨越网络传送数据包,使得整个互联网都能接收到数据的协议。IP协议使得数据能够发送到地球的另一端,这期间使用IP地址作为主机的标识。 IP还隐含着数据链路层的功能。通过IP相互通信的主机不论经过怎样的底层数据链路都能够实现通信。虽然IP也十分组交换的一种协议,但是它不具有重发机制。即使分组数据包未能到达对端主机也不会重发,属于非可靠性传输。

IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP就是为这一功能而制定的,有时ICMP也被用于诊断网络状况。

从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议

IP协议的作用是将分组数据包发送到目的主机 无连接( c o n n e c t i o n l e s s)这个术语的意思是 I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明, I P数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是 A,然后是 B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此 B可能在A到达之前先到达。

IP首部

最高位在左边,记为 0 bit ;最低位在右边,记为 31 bit。 4个字节的32 bit值以下面的次序传输:首先是 0~7 bit,其次8~15 bit,然后1 6~23 bit,最后是24~31 bit。这种传输次序称作 big endian字节序。由于 T C P / I P首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数的机器,如 little endian格式,则必须在传输数据之前把首部转换成网络字节序。目前的协议版本号是 4,因此I P有时也称作 I P v 4。3 . 1 0节将对一种新版的 I P协议进行讨论。 首部长度指的是首部占 32 bit字的数目,包括任何选项。由于它是一个 4比特字段,因此首部最长为6 0个字节。在第 8章中,我们将看到这种限制使某些选项如路由记录选项在当今已没有什么用处。普通 I P数据报(没有任何选择项)字段的值是 5。服务类型( TO S)字段包括一个 3 bit的优先权子字段(现在已被忽略),4 bit的TO S子字段和1 bit未用位但必须置 0。4 bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有 4bit均为0,那么就意味着是一般服务。

S L I P一般提供基于服务类型的排队方法,允许对交互通信数据在处理大块数据之前进行处理。由于大多数的实现都不使用 TO S字段,因此这种 排队机制由S L I P自己来判断和处理,驱动程序先查看协议字段(确定是否是一个 T C P段),然后检查T C P信源和信宿的端口号,以判断是否是一个交互服务。

IP路由选择

I P路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么I P数据报就直接送到 目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。大多数的主机都是采用这种简单机制。

在一般的体制中, I P可以从T C P、U D P、I C M P和I G M P接收数据报(即在本地生成的数据 报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。 I P层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时, I P首先检查目的I P地址是否为本机的 I P地址之一或者I P广播地址。如果确实是这样,数据报就被送到由 I P首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么:( 1)如果 I P层被设置为路由器的功能,那么就对数据报进行转发 (也就是说,像下面对待发出的数据报一样处理);否则( 2)数据报被丢弃。

路由表中的每一项都包含下面这些信息:

  • 目的IP地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标 志字段来指定(如下所述)。主机地址有一个非0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。
  • 下一站(或下一跳)路由器( next-hop router)的I P地址,或者有直接连接的网络IP地址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。
  • 标志。其中一个标志指明目的 IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口
  • 为数据报的传输指定一个网络接口。

IP路由选择是逐跳地( h o p - b y - h o p)进行的。

MAC寻址参考的表叫做地址转发表,IP寻址所参考的叫做路由控制表。MAC地址转发表中所记录的是实际的MAC地址本身,而路由表中记录的IP地址则是集中了之后的网络号。

根据地址转发表和路由表定位报文发送的目标设备.png

IP地址的定义

IP地址由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部以二进制方式被处理。 点分十进制:每8位一组,分成四组。ip地址用于在“连接到网络中的所有主机识别出进行通信的目标地址”

IP地址由“网络标识”和“主机标识”两部分组成。网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的主机标识则不允许在同一个网段内重复出现。

由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的IP地址都不会相互重叠。即IP地址有唯一性。

IP包被转发到途中某个路由器时,正是利用目标IP地址的网络标识进行路由。即使看不到主机标识,只要一见到网络标识就能判断出是否该网段内的主机。

IP地址分为四个级别:

  • A类:首位以0开头。第一到第八位是网络标识。0.0.0.0~127.0.0.0
  • B类:前两位为10。从第一位到十六位是网络标识。128.0.0.0~191.255.0.0
  • C类:前三位为110。从第一位到24位为网络标识。192.168.0.0~239.255.255.0(主机地址上限为254个)
  • D类:千丝位为1110。从第一位到第三十二位为网络标识。2224.0.0.0~239.255.255.255(无主机标识,常用于多播)

在分配IP地址时,关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为0或者全部为1.因为全部为只有0在表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1的主机地址通常作为广播地址。这就是C类地址最多只有254(2^8-2)个主机地址的原因

单播-广播-多播


路由控制

路由控制是指将分组数据发送到最终目标地址的功能。 数据链路实现某一个区间(一跳)内的通信。而IP实现直至最终目标地址的通信(点对点)。

多跳路由是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标地址为止的所有通路全部指定出来。因为每一个区间在转发IP数据包时分别指定下一跳的操作,直至包到达最终的目标地址。

所有主机都维护着一张路由控制表,该表记录了数据下一步发送的目标路由器。IP包将根据这个路由表在各个数据链路上传输。

  • 静态路由控制:管理员手动设置
  • 动态路由控制:路由器与其他路由器相互交换信息时自动刷新

ip地址与路由:

  • 默认路由:默认路由是指路由表中任何一个地址都能与之相配的记录。一般为0.0.0.0/0或default
  • 主机路由:ip地址/32也被称为主机路由。整个IP地址的所有位都参与路由
  • 环回地址:同一主机上的程序之间进行网络通信时所用的一个默认地址。

DNS查询

DNS解析器(进行DNS查询的主机和软件)为了调查IP,向域名服务器进行查询处理。接收这个查询请求的域名服务器首先会在自己的数据库进行查找。若由该域名对应的IP地址则返回。若没有则再向上一级域名服务器进行查询处理。

解析器和域名服务器将最新了解到的信息暂时保存在缓存里。这样可以减少查询性能消耗。

类型 编号 内容
A 1 主机名的IP地址(IPv4)
NS 2 域名服务器
CNAME 5 主机别名对应的规范名称
SOA 6 区域内权威记录起始标志
WKS 11 已知的服务
PTR 12 IP地址反向解析
HINFO 13 主机相关的信息
MINFO 14 邮箱与邮件组信息
MX 15 邮件交换
TXT 16 文本
SIG 24 安全证书
KEY 25 密钥
GPOS 27 地理位置
AAAA 28 主机的IPv6地址
NXT 30 下一代域名
SRV 33 服务器选择
* 255 所有缓存记录

ARP

ARP以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。若目标主机不再同一个链路上,可以通过ARP查找吓一跳路由器的MAC地址。只适用于IPv4,不适用于IPv6.IPv6中可以用ICMPv6替代ARP发送邻居探索消息。

ARP借助ARP请求和ARP响应两种类型的包确定MAC地址。

RARP

RARP是从MAC地址定位IP地址的一种协议。

代理ARP

通常ARP包会被路由器隔断,但是采用代理ARP的路由器就可以将ARP请求转发给邻近的网段。由此,两个以上的网段的节点之间可以像在同一个网段中一样进行通信。

传输层

传输层最主要的功能就是能够让应用程序之间实现通信。

TCP

TCP是一种面向有连接的传输层协议,它可以保证两端通信主机的通信可达。TCP能够正确处理在传输过程中丢包、传输乱序等异常情况。TCP还可以有效利用带宽,缓解网络拥堵。其不利于视频会议(音频、视频的数据量既定)等场合使用

UDP

UDP面向无连接传输层协议,其不会关注对端是否真的收到了传送的数据,若需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。UDP常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。


应用层(会话层以上的分层)

TCP/IP分层中将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。 TCP/IP应用的架构绝大多数属于C/S模型。

浏览器与服务端之间通信使用的是HTTP协议,所传输数据的主要格式是HTML。WWW中的HTTP数据OSI应用层的协议,而HTML属于表示层的协议。

发送电子邮件的协议叫做SMTP协议,在扩展MIME协议之后,就可以发送声音、图像等,MIME属于OSI参考模型的第6层——表示层。

FTP协议在进行文件传输时,会建立两个TCP连接,分别是发出传输请求时所需要的控制连接与实际传输所要用到的数据连接。

TCP/IP网络中远程登陆常用TELENET和SSH两种协议。

网络管理

在TCP/IP中进行网络管理时,采用SNMP协议(简单网络管理协议)。使用SNMP管理的主机、网桥、路由器等称作SNMP代理,而进行管理的那一段叫做管理器。在SNMP的代理端保存着网络接口的信息、通信数据量、异常数据量以及设备温度等信息。这些信息可以通过MIB(被称为是一种可透过网络的结构变量)访问。因此,在TCP/IP的网络管理中,SNMP属于应用协议,MIB属于表示层协议。一个网络范围越大、结构越复杂,就越需要对其进行有效管理,SNMP可以让管理员及时检查网络拥堵情况,及早发现故障,也可以为以后扩大网络收集必要的信息。


TCP/IP数据包

数据包首部

每个分层都会对所发送的数据附加一个首部,在这个首部中包含了该层的必要信息,如发送的目标地址以及协议相关信息。通常为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。

发送数据包

TCP_IP各层对邮件的处理

分层中包的结构

分组数据包经过以太网的数据链路时的大致流程如上图。 包流动时,从前往后依次附加以太网包首部、IP包首部、TCP包(或UDP包)首部以及应用自己的包首部和数据。而包的最后则追加了以太网包尾。 每个包首部中至少都会包含两个信息:一个是发送端和接收端地址,另一个是上一层的协议类型。 经过每个协议份分层时,都必须有识别包发送端和接收端的信息。以太网会用MAC地址,IP会用IP地址,而TCP/UDP则会用端口号作为识别两端主机的地址。即使是在应用程序中,像电子邮件这样的信息是一种地址标识。这些地址信息都在每个包经由各个分层时,附加到协议对应的包首部里边。 每个分层的包首部中还包含一个识别位,它是用来标识上一层协议的种类信息。例如以太网的包首部中的以太网类型,IP中的协议类型以及TCP/UDP中两个端口的端口号等都起着识别协议类型的作用。就是在应用的首部信息中,有时也会包含一个用俩识别其数据类型的标签。

数据包接收处理1 数据包接收处理2

互联网地址

互联网的每个接口必须有唯一的Internet地址(IP地址)。IP地址长为32位。

A类:
    7         24
----------------------------------------
|0| 网络号   |主机号                     |
----------------------------------------
      
B类:
       14             16
----------------------------------------
|1|0|         网络号   |   主机号        |
----------------------------------------

C类:
         21                       8
-----------------------------------------
|1|1|0|网络号                  |   主机号|
-----------------------------------------
     
D类:
             28
-----------------------------------------
|1|1|1|0|多播组号                        |
-----------------------------------------

E类:
					27
----------------------------------------
|1|1|1|1|0|备用						  |
-----------------------------------------

封装

当应用程序用TCP传送数据时,数据被送到协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息。

TCP传给IP的数据单元称为TCP报文段或简称为TCP段。IP传给网络接口层的数据单元称为数据报。通过以太网传输的比特流叫做帧。

封装数据进协议栈

以太网封装格式

网络的构成要素由

网络构成要素.png

数据链路

数据链路,指OSI参考模型中的数据链路层,是让互联计算机之间相互通信的一种协议,有时指以太网、无线局域网等通信手段。其协议定义了通过通信媒介互连的设备之间传输的规范。 数据链路层将物理层转换的0和1信号集合成帧,然后进行传输。 数据链路可以被视为网络传输中的最小单位。

计算机之间通过电缆相互连接。电缆可以分为双绞线电缆、光纤电缆、同轴电缆、串行电缆等。根据数据链路不同选择不同电缆类型。

不同数据链路的不同电缆.png

http://fnvfox.appspot.com/thankyou.html 数据传输的过程中,两个设备之间数据流动的物理速度称为传输速率,也称为带宽。(单位事件内传输的数据量)

主机之间的传输速率被称作吞吐量,不仅可以衡量带宽,同时也衡量主机的CPU处理能力、网络的拥堵程度、报文中数据字段的占有份额等信息。

网络的连接和构成的形态称为网络拓扑。

MAC地址:用于识别数据链路层中的互连节点,长48bit。在使用网卡(NIC)的情况下,MAC地址一般会被烧入到ROM中。任何一个网卡的MAC都具有“唯一性”。(MAC地址相同,只要不出现在同一数据链路中就不会出现问题)

MAC地址

数据链路层的每个通过点在接到包时,会从中将源MAC地址以及曾经接收该地址发送的数据包的接口作为对应关系记录到转发表中。以某个MAC地址作为源地址的包由某一接口接收,实质上可以理解为该MAC地址就是该接口的目标。以该MAC地址作为目标地址的包,经由该接口送出即可,这一过程叫做自学过程。

交换机自学原理

由于MAC地址没有层次性,转发表中的入口个数与整个数据链路中所有网络设备的数量有关。当设备数量增加,转发表也会随之变大,检索转发表所用的时间也就越来越长,当连接多个终端时,有必要将网络分成多个数据链路,采用类似于网络层的IP地址一样对地址进行分层管理。

交换机转发方式:

  • 存储转发:检查以太网数据帧末尾的FCS位后再进行转发。可避免发送由于冲突而被破坏的帧或噪声引起的错误帧
  • 直通转发:不需要将整个帧全部接收下来以后再进行转发,只需要得到目标地址即可开始转发。因此,它具有延迟短的优势,但不可避免发送错误帧。

中继器

中继器(Repeater)是在OSI的第一层——物理层面延长网络的设备。由电缆传过来的电信号或光信号经由中继器的波形调整和放大再传给另一个电缆。

  • 中继器对减弱的信号进行放大和发送
  • 中继器通过物理层的连接延长网络
  • 即使在数据链路层出现某些错误,中继器仍然转发数据
  • 中继器无法改变传输速度

网桥/2层交换机

网桥是在OSI模型的第二层——数据链路层面上连接两个网络的设备。能够识别数据链路层中的数据帧,并将这些数据帧临时存储于内存,再重新生成信号作为一个全新的帧转发给相连的另一个网段。(数据完整则发送,数据不完整则不发送)

  • 网桥根据数据帧的内容转发数据给相邻的其他网络
  • 网桥没有连接网段个数的限制
  • 网桥基本只连接相同类型的网络。但是有时也可以连接传输速率不同的网络。

网桥会检查数据链路的数据帧中的一个数据位——FCS(校验数据是否正确达到目的地),将损坏的数据丢弃,从而避免发送给其他的网段。

以太网等网络中常用的交换集线器(Hub),现基本属于网桥一种,其每个端口提供类似网桥的功能。

路由器/3层交换机

路由器是在OSI的第三层,网络层面上连接两个网络、并对分组报文进行转发的设备。网桥是根据无力地值(MAC地址)进行处理,路由器/3层交换机是根据IP地址进行处理。由此,TCP/IP中网络层的地址就成为了IP地址。

路由器可以连接不同的数据链路。可连接两个以太网,或者连接一个以太网和FDDI

路由器还有分担网络负荷的作用。

路由器传输

4~7层交换机

4~7层交换机负责处理OSI模型中从传输层到应用层的数据。若用TCP/IP分层模型表述,4~7层交换机就是以TCP等协议的传输层及其上面的应用层为基础,分析收发数据,并对其进行特定的处理。

负载均衡

网关

网关,进行协议翻译和转发数据,是OSI模型中从传输层到应用层的数据进行转换和转发的设备。它与4~7层交换机一样都是处理传输层以上的数据,但是网关不仅转发数据还负责对数据进行转换,它通常会使用一个表示层或应用层网关,在两个不能进行直接通信的协议之间进行翻译,最终实现通信。比如手机和电脑之间发送邮件。

使用万维网(www)时,为了控制网络流量以处于安全的考虑,有时会使用代理服务器,这种代理服务器也是网关的一种,称为应用网关(在同一种类型的协议之间转发数据叫做应用网关)

各设备对应网络分层.png

路由协议

IP地址与路由控制

互联网是由路由器连接的网络组合而成的。为了能够让数据包正确达到目的主机,路由器必须在途中进行正确转发。这种向“正确的方向”进行的处理就叫做路由控制或路由。

路由器根据路由控制表转发数据包。

静态路由和动态路由

路由控制分为静态路由和动态路由:

  • 静态路由:事先设置好路由器和主机中并将路由信息固定的一种方法
  • 动态路由:让路由协议在运行过程中自动设置路由控制信息

路由控制范围

根据路由控制的范围常使用IGP(外部网关协议)和EGP(内部网关协议)两种类型的路由协议

EGP和IGP就像根据IP地址中哦哦嗯的网络部分在网络之间进行路由选择、根据主机部分在链路内部进行主机识别一样,可以根据EGP在区域网络之间进行路由选择,也可以根据IGP在区域网络内部进行主机识别。

RIP

RIP是距离向量型的一种路由协议,广泛用于LAN。 RIP将路由控制信息定期向全网广播。若没有收到路由控制信息,连接就会被断开。

RIP基于距离向量算法决定路径。距离的单位为跳数。跳数是指所经过的路由器的个数。RIP希望尽可能少通过路由器将数据包转发到目标IP地址,根据距离向量生成距离向量表,再抽出较小的路由生成最终的路由控制表。

RIP使用子网掩码的网络环境:

  • 从接口的IP地址对应分类得出网络地址后,与根据路由控制信息流过此路由器的包中的IP地址对应的分类得出的网络地址进行比较。若两者的网络地址相同,那么就以接口的网络地址长度为准
  • 若两者的网络地址不同,那么以IP地址的分类所确定的网络地址长度为准

采用RIP进行路由控制的范围必须注意两点:

  • 因IP地址的分类而产生不同的网络地址时
  • 构造网络地址长度不同的网络环境时

OSPF

OSPF是根据OSI的IS-IS协议而提出的一种链路状态型路由协议。由于采用链路状态类型,所以即使网络中有环路,也能够进行稳定的路由控制。

OSPF支持子网掩码。在RIP中无法实现的可变长度子网构造的网络路由控制称为现实。

OSPF为链路状态型路由器。路由器之间交换链路状态生成网络拓扑信息,然后再根据这个拓扑信息生成路由控制表。

OSPF可以给每条链路赋予一个权重,并时钟选择一个权重最小的路径作为最终路由。

RIP选择路由器个数最少的路径,OSPF选择总的代价比较小的路径

TCP和UDP

TCP/IP中有两个具有代表性的传输层协议,它们分别是TCP和UDP。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。所以,根据通信的具体特征,选择何时的传输层协议是非常重要的。

传输层的作用

我们知道IP首部中有一个协议字段,用来标识网络层(IP)的上一层所采用的哪一种传输层协议。根据这个协议号,就可以识别IP传输的数据是TCP的内容还是UDP的内容。同样,传输层为了识别所传输的数据究竟应该发给哪个应用,也设定了这样的一个编号——端口号。比如httpd的端口号为80,sshd的端口号为22。

因此,传输协议TCP、UDP的作用就是通过接收数据中的目标端口号识别目标处理程序,然后将数据传给诸如HTTP、TELNET以及FTP等应用层协议进行处理。

TCP:面向连接的、可靠的流协议。为提供可靠传输,实现“顺序控制“、“重发控制”机制。此外还具备“流量控制”、“拥塞控制”、提高网络利用率等众多功能。

UDP:提供不具可靠性的数据报协议。细微的处理它会交给上层的应用去完成。

端口号

数据链路层用MAC地址识别同一链路中的不同计算机、IP层用IP地址识别TCP/IP网络中互联的主机和路由器,而传输层用的是端口号。端口号用于识别同一台计算机中进行通信的不同应用程序,也称程序地址。如下图所示:

根据端口号识别应用

通过IP地址、端口号、协议号进行通信识别

仅凭目标端口识别某一个通信是远远不够的。

TCP/IP或UDP/IP通信中通常采用5个信息来识别一个通信。它们是”源IP地址“、”目标IP地址“、”协议号“、”源端口号“、”目标端口号“。只要其中某一项不同,则被认为是其他通信。

端口号如何确定

  • 标准既定的端口号:也叫静态方法。指每个应用程序都有其指定的端口号。例如HTTP、TELNET、FTP等广为使用的应用协议中所使用的端口号就是固定的。这些端口号也称之为知名端口号(Well-Known Port Number)。知名端口号一般由0~1023的数字分配而成。应用程序应该避免使用知名端口号,以免产生冲突。除知名端口号外,还有一些端口号也被正是注册,它们分布在1024~49151的数字之间。不过,这些端口号可用于任何通信用途。

  • 时序分配法:时序(或动态的)分配法。此时,服务器有必要确定监听端口号,但是接收服务的客户端没必要确定端口号。在这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。根据这种动态分配端口号的机制,即使是在同一个客户端程序发起的多个TCP连接,也不会发送冲突。动态分配的端口号取值范围在49152~65535之间。

端口号与协议

不同的传输协议可以使用相同的端口号。数据到达IP层后,会先检查IP首部中的协议号,再传给相应协议的模块。如果是TCP则传给TCP模块、如果是UDP则传给UDP模块去做端口号的处理。

此外,那些知名端口号与传输层协议并无关系,只要端口一致都将分配同一种程序进行处理。例如,53端口号在TCP与UDP中都用于DNS服务,而80端口号用于HTTP通信。

端口号与其使用的传输层协议决定。不同的传输协议可以使用相同的端口号。 数据到达IP层后,会先检查IP首部中的协议号,再传给相应协议的模块。若是TCP则传给TCP模块,若是UDP则传给UDP模块去做端口号处理。即使是同一个端口号,由于传输协议是各自处理的,因此不会相互影响。

TCP具有代表性的知名端口号:

端口号 服务名 内容
0 - 保留端口
1 tcpmux TCP端口服务多路开关选择器
7 echo 回显协议
9 discard 丢弃协议
11 systat 活动用户
13 daytime Daytime协议
17 qotd 每日引用协议
19 chargen 字符发生器协议
20 ftp-data 文件传输(默认数据端口)
21 ftp 文件传输协议(控制端口)
22 ssh 远程登录协议,用于安全登录文件传输(SCP,SFTP)及端口重新定向
23 telenet 终端仿真协议(未加密文本通信)
25 smtp 简单邮件传输协议
26 rsftp 类似FTP的协议
43 nicname WHOIS协议
53 domain 域名服务器协议
70 gppher Gopher信息检索协议
79 finger Finger协议
80 HTTP 超文本传输协议- 用于传输网页
81 Torpark 洋葱路由
88 Kerberos 认证代理
101 hostname 主机名
102 iso-tsap ISO-TSAP协议
107 telnet 远程Telnet协议
109 pop2 POP (Post Office Protocol),“邮局协议”,第2版
110 POP3 “邮局协议”,第3版 - 用于接收电子邮件
111 sunrpc Sun远程过程调用协议
113 (auth) Ident 旧的服务器身份识别系统,仍然被IRC服务器用来认证它的用户
115 sftp 简单文件传输协议
117 uucp-path UNIX间复制协议(Unix to Unix Copy Protocol,UUCP)的路径确定服务
118 sql SQL服务
119 nntp 网络新闻传输协议 - 用来收取新闻组的消息
123 ntp NTP(Network Time Protocol) - 用于时间同步
135 EPMAP 微软终端映射器(End Point Mapper,EPMAP)
137 netbios NetBIOS NetBIOS 名称服务
138 netbios NetBIOS NetBIOS 数据报文服务
139 NetBIOS NetBIOS会话服务
143 imap4 IMAP4,Internet信息访问协议 4-用于检索 E-mails
161 SNMP 简单网络管理协议
170   打印服务
179 BGP 边界网关协议
194 IRC 互联网中继聊天
220 IMAP 交互邮件访问协议第3版
443 HTTPS HTTP over TLS/SSL(加密传输)
445 Microsoft-DS Active Directory,Windows 共享, Sasser worm,Agobot, Zobotworm
465 Cisco 专用协议  
515 Line Printer Daemon protocol 用于 LPD 打印机服务器
587   邮件消息提交SMTP,RFC 2476
636 LDAP over SSL 加密传输,也被称为LDAPS
989   FTP Protocol (data) over TLS/SSL
990   FTP Protocol (control) over TLS/SSL
993   基于 SSL的IMAP4 加密传输)
995   基于 SSL的POP3 加密传输

UDP

UDP是User Datagram Protocol的缩写。

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

及时是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中即使出现丢包,UDP也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交由采用UDP的应用程序去处理。

由于UDP面向无连接,它可以随时发送数据。再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:

  • 包总量较少的通信(DNS、SNMP等)
  • 视频、音频等多媒体通信(即时通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

TCP

TCP实现了对数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。根据TCP的这些机制,在IP这种无连接的网络上也能够实现高可靠性的通信。

TCP的特点及其目的

为了通过IP数据报实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。

TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

通过序列号与确认应答提高可靠性

在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)。如下图所示:

正常的数据传输

如果有确认应答,说明数据已经成功达到对端。反之,则数据丢失的可能性很大。如下图所示:

数据包丢失的情况

未收到确认应答并不意味着数据一定丢失。也有可能是数据对方已经收到,只是返回的确认应答在图中丢失。这种情况也会导致发送端因没有收到确认应答而认为数据没有达到目的地,从而进行重新发送。如下图所示:

确认应答丢失的情况

TCP是通过序列号机制实现确认应答处理、重发控制以及重复控制等功能的。序列号是按顺序给发送数据的每一个字节(8位字节)都标上号码的编号。接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接收的序号作为确认应答返回。就这样,通过序列号和确认应答号,TCP可以实现可靠传输。如下图所示:

发送的数据

重发超时如何确定

重发超时是指在重发数据之前,等待确认应答到来的哪个特定时间间隔。如果超过了这个时间仍未收到确认应答,发送端将进行数据重发。那么这个重发超时的具体时间长度是如何确定的?

最理想的是,找到一个最小时间,它能保证”确认应答一定能在这个时间内返回“。然而这个时间长短随着数据包途径的网络环境的不同而有所变化。即使是在同一个网络中,根据不同时间的网络拥堵程度时间的长短也会发生变化。

为此,TCP在每次发包时都会计算往返时间及其偏差。将这个往返时间和偏差相加,重发超时的时间就是碧这个总和要稍大一点的值。在BSD的Unix以及Windows系统中,超时都以0.5秒为单位进行控制,因此重发超时都是0.5秒的整数倍。不过,由于最初的数据包还不知道往返时间,所以其重发超时一般设置为6秒左右。

连接管理

TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作。通过TCP首部用于控制的字段来管理TCP连接,一个连接的建立与断开,正常过程至少需要来回发送7个包才能完成。如下图所示:

TCP连接的建立与断开

TCP以段为单位发送数据

在建立TCP连接的同时,也可以确定发送数据包的单位,我们也可以称其为”最大消息长度“(MSS:Maximun Segment Size)。最理想的情况是,最大消息长度正好是IP中不会被分片处理的最大数据长度。

TCP在传送大量数据时,是以MSS的大小将数据进行分割发送。进行重发时,也是以MSS为单位。

MSS是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自己的接口能够适应的MSS大小。然后会在两者之间选择一个较少的值投入使用。

利用窗口控制提高速度

TCP以1个段为单位,每发一个段进行一次确认应答处理,如下图。这样的传输方式有一个缺点。那就是,包的往返时间越长通信性能就越低。

按数据包进行确认应答

为了解决这个问题,TCP引入了窗口概念。如下图,确认应答不再是以每个分段,而是更大的单位进行确认时,转发时间将会被大幅度的缩短。即发送端主机在发送了一个段以后不必要一直等待确认应答,而是继续发送。

用滑动窗口方式并行处理

窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。上图中,窗口大小为4个段。

这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。如果窗口中的数据有丢失,就必须重发,如果收到确认应答,则将窗口滑动到确认应答的序列号的位置。所以,这种机制也被称为滑动窗口控制。如下图所示:

滑动窗口方式

窗口控制与重发控制

在使用窗口控制中,如果出现段丢失该怎么办?

首先,我们考虑确认应答未能返回的情况。在没有使用窗口控制的时候,没有收到确认应答的数据都会被重发。而使用了窗口控制,某些确认应答即便丢失也无需重发。如下图:

没有确认应答也不受影响

其次,我们来考虑一下某个报文段丢失的情况。如下图所示,接收主机如果收到一个自己应该接收的序号以外的数据时,会针对当前为止收到数据返回确认应答。发送端知己如果连续3次收到同一个确认应答,就会将其所对应的数据进行重发。这种机制比之前的超时管理更加高效,因此也被称作高速重发机制。

高速重发控制

流控制

为防止网络流量无端浪费,TCP提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量。具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。在前面介绍的窗口大小的值就是由接收端主机决定的。

在TCP首部中,专门有一个字段用来通知窗口大小。如果接收端的这个缓冲区数据溢出,窗口大小的值也会随之被设置为一个更小的值通知发送端。如果缓冲区满了,就暂时停止接收数据,发送端可以时不时发送窗口探测,获取最新的窗口大小。

拥塞控制

如果窗口比较大,一开始大家都发送大量数据包,就可能造成拥塞。TCP为了防止这个问题的出现,在通信开始的时候会通过慢启动算法得出数值,对发送数据量进行控制。

为了在发送端调节索要发送的数据量,定义了一个叫做“拥塞窗口”的概念。慢启动时,将拥塞窗口设置为1个数据段(1MSS),之后没收到一个确认应答,拥塞窗口的值就加1或者按其它方式增大。当然不会无线增加,关于这个拥塞窗口的控制由于篇幅就不继续展开了。


下一篇 Linux命令行

Comments

Content