TCP等协议大全
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
协议大全
一、什么是IP分片技术
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。
以太网的MTU是1500,你可以用netstat -i 命令查看这个值。
如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。
我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。
如果数据部分大于1472字节,就会出现分片现象。
IP首部包含了分片和重组所需的信息:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |R|DF|MF| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|<-------------16-------------->|<--3-->|<---------13---------->|
Identification:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。
R:保留未用。
DF:Don't Fragment,―不分片‖位,如果将这一比特置1 ,IP层将不对数据报进行分片。
MF:More Fragment,―更多的片‖,除了最后一片外,其他每个组成数据报的片都要把该比特置1。
Fragment Offset:该片偏移原始数据包开始处的位置。
偏移的字节数是该值乘以8。
另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。
二、UDP协议简介
UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。
根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据报的形式。
一个典型的数据报就是一个二进制数据的传输单位。
每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
0UDP报头
UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:
源端口号
目标端口号
数据报长度
校验值
UDP协议使用端口号为不同的应用保留其各自的数据传输通道。
UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。
数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。
有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。
因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。
一般来说,大于49151的端口号都代表动态端口。
数据报的长度是指包括报头和数据部分在内的总的字节数。
因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。
数据报的最大长度根据操作环境的不同而各异。
从理论上说,包含报头在内的数据报的最大长度为65535字节。
不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。
UDP协议使用报头中的校验值来保证数据的安全。
校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。
如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校
验计算值将不会相符,由此UDP协议可以检测是否出错。
这与TCP协议是不同的,后者要求必须具有校验值。
UDPvs.TCP
UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。
TCP 协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。
与TCP不同,UDP协议并不提供数据传送的保证机制。
如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。
因此,通常人们把UDP协议称为不可靠的传输协议。
相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突法性的多个数据报。
不同于TCP,UDP并不能确保数据的发送和接收顺序。
例如,一个位于客户端的应用程序向服务器发出了以下4个数据报
D1
D22
D333
D4444
但是UDP有可能按照以下顺序将所接收的数据提交到服务端的应用:
D333
D1
D4444
D22
事实上,UDP协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情
况下才有可能发生。
UDP协议的应用
也许有的读者会问,既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。
因为UDP
具有TCP所望尘莫及的速度优势。
虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。
反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
关于UDP协议的最早规范是RFC768,1980年发布。
尽管时间已经很长,但是UDP 协议仍然继续在主流应用中发挥着作用。
包括视频电话会议系统在内的许多应用都证明了UDP协议的存在价值。
因为相对于可靠性来说,这些应用更加注重实际性能,所以为了获得更好的使用效果(例如,更高的画面帧刷新速率)往往可以牺牲一定的可靠性(例如,会面质量)。
这就是UDP和TCP两种协议的权衡之处。
根据不同的环境和特点,两种传输协议都将在今后的网络世界中发挥更加重要的作用.
用户数据报协议(UDP)
介绍
用户数据报协议是定义用来在互连网络环境中提供包交换的计算机通信的协议。
此协议默认认为网路协议(IP)是其下层协议。
此协议提供了向另一用户程序发送信息的最简便的协议机制。
此协议是面向操作的,未提供提交和复制保护。
如果应用程序要求可靠的数据传送应该使用传输控制协议(TCP)。
数据报格式如下:
0 7 8 15 16 23 24 31
+-----------+-----------+----------+------------+
| 源端口| 目的端口|
+-----------+-----------+----------+------------+
| 长度| 校验码|
+-----------+-----------+----------+------------+
| 数据 ......
+-----------+----------.......
用户数据报格式
用户数据报头格式
域
源端口是可选域,当其有意义时,它指的是发送进程的端口,这也就假定了在没有其它信息的情况下,返回信息应该向什么地方发送。
如果不使用它,则在此域中填0。
目的端口在有特定的目的网络地址时有意义。
长度指的是此用户数据报长度的八进制表示。
(这表明最小的数据报长度是 8。
)校验码有16位,是对IP头,UDP头和数据中信息包头的数位取反之和再取反得到的。
包头从概念上说是在UDP头信息之前的,它包括有源地址,目的地地址,所使用的协议和UDP长度。
这些信息使信息不能被错误地接收。
这个校验过程与TCP 中使用的过程一致。
0 7 8 15 16 23 24 31
+-----------+-----------+----------+------------+
| 源地址|
+-----------+-----------+----------+------------+
| 目的地址|
+-----------+-----------+----------+------------+
| 0 | 协议| UDP长度|
+-----+-----+----+------+-----+-----+----+------+
如果计算出的校验码为零,它将被全零发送。
全零的校验值意味着发送者未产生校验码。
用户接口
用户接口应该允许创建新的接收端口,在接收端口的接收操作有:应该返回一个八进制数说明源端口和源地址,允许数据报传送,指定数据,
源和目标端口和目的地地址。
IP层接口
UDP模块必须能够决定源和目标的网络地址,而且必须能够从包头中得知所使用的协议。
一个可能的接口方式是返回整个数据报,包括接收操作返回的包头。
这样的接口还应该允许UDP向IP传送完整的带包头的数据报用于传送。
由IP来确定一致性并计算校验码。
协议应用
此协议的最主要的用途是网际名称服务器和小文件传输协议(TFTP)。
协议号
在IP中使用它时,它的协议号是17(八进制中是21)。
三、什么是SIP协议及其简单介绍
1、SIP协议的背景和功能
SIP(会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务。
因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确保这种演进实现而需要的NGN(下一代网络)系列协议中重要的一员。
SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的。
它用来建立,改变和终止基于IP网络的用户间的呼叫。
为了提供电话业务它还需要结合不同的标准和协议:特别是需要确保传输(RTP),与当前电话网络的信令互连,能够确保语音质量(RSVP),能够提供目录(LDAP),能够鉴权用户(RADIUS)等等。
SIP被描述为用来生成,修改和终结一个或多个参与者之间的会话。
这些会话包括因特网多媒体会议,因特网(或任何IP网络)电话呼叫和多媒体发布。
会话中的成员能够通过多播或单播联系的网络来通信。
SIP支持会话描述,它允许参与者在一组兼容媒体类型上达成一致。
它同时通过代理和重定向请求到用户当前位置来支持用户移动性。
SIP不与任何特定的会议控制协议捆绑。
本质上,SIP提供以下功能:
名字翻译和用户定位:无论被呼叫方在哪里都确保呼叫达到被叫方。
执行任何描述信息到定位信息的映射。
确保呼叫(会话)的本质细节被支持。
特征协商:它允许与呼叫有关的组(这可以是多方呼叫)在支持的特征上达成一致(注意:不是所有方都能够支持相同级别的特征)。
例如视频可以或不可以被支持。
总之,存在很多需要协商的范围。
呼叫参与者管理:呼叫中参与者能够引入其它用户加入呼叫或取消到其它用户的连接。
此外,用户可以被转移或置为呼叫保持。
呼叫特征改变:用户应该能够改变呼叫过程中的呼叫特征。
例如,一呼叫可以被设置为“voice-only”,但是在呼叫过程中,用户可以需要开启视频功能。
也就是说一个加入呼叫的第三方为了加入该呼叫可以开启不同的特征。
2、SIP网络元素
SIP中有两个要素。
SIP用户代理和SIP网络服务器。
用户代理是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备。
用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS)。
客户机元素初始呼叫而服务器元素应答呼叫。
这允许点到点的呼叫通过客户机-服务器协议来完成。
SIP服务器元素提供多种类型的服务器。
有三种服务器形式存在于网络中——SIP有状态代理服务器,SIP无状态代理服务器和SIP重定向服务器。
由于呼叫者未必知道被呼叫方的IP地址或主机名,SIP服务器的主要功能是提供名字解析和用户定位。
可以获得的是email形式的地址或与被呼叫方关联的电话号码。
使用该信息,呼叫者的用户代理能够确定特定服务器来解析地址信息——这可能涉及网络中很多服务器。
SIP代理服务器接收请求,决定将这些请求传送到何处,并且将它们传送到下一服务器(使用下一跳路由原理)。
在网络中可以有多跳。
有状态和无状态代理服务器的区别是有状态代理服务器记住它接收的入请求,以及回送的响应和它转送的出请求。
无状态代理服务器一旦转送请求后就忘记所有的信息。
这允许有状态代理服务器生成请求以并行地尝试多个可能的用户位置并且送回最好的响应。
无状态代理服务器可能是最快的,并且是SIP结构的骨干。
有状态代理服务器可能是离用户代理最近的本地设备,它控制用户域并且是应用服务的主要平台。
重定向服务器接收请求,但不是将这些请求传递给下一服务器而是向呼叫者发送响应以指示被呼叫用户的地址。
这使得呼叫者可以直接联系在下一服务器上被呼叫方的地址
3、SIP协议的实现机制
SIP是一个分层结构的协议,这意味着它的行为根据一组平等独立的处理阶段来描述,每一阶段之间只是松耦合。
协议分层描述是为了表达,从而允许功能的描述可在一个部分跨越几个元素。
它不指定任何方式的实现。
当我们说某元素包含某层,我们是指它顺从该层定义的规则集。
不是协议规定的每个元素都包含各层。
而且,由SIP规定的元素是逻辑元素,不是物理元素。
一个物理实现可以选择作为不同的逻辑元素,甚至可能在一个个事务的基础上。
SIP的最底层是语法和编码。
它的编码使用增强Backus-Nayr形式语法(BNF)来规定。
第二层是传输层。
它定义了网络上一个客户机如何发送请求和接收响应以及一个服务器如何接收请求和发送响应。
所有的SIP元素包含传输层。
第三层是事务层。
事务是SIP的基本元素。
一个事务是由客户机事务发送给服务器事务的请求(使用传输层),以及对应该请求的从服务器事务发送回客户机的所有响应组成。
事务层处理应用层重传,匹配响应到请求,以及应用层超时。
任何用户代理客户机(UAC)完成的任务使用一组事务产生。
用户代理包含一个事务层,有状态的代理也有。
无状态的代理不包含事务层。
事务层具有客户机组成部分(称为客户机事务)和服务器组成部分(称为服务器事务),每个代表有限的状态机,它被构造来处理特定的请求。
事务层之上的层称为事务用户(TU)。
每个SIP实体,除了无状态代理,都是事务用户。
当一个TU希望发送请求,它生成一个客户机事务实例并且向它传递请求和IP地址,端口,和用来发送请求的传输机制。
一个TU生成客户机事务也能够删除它。
当客户机取消一个事务时,它请求服务器停止进一步的处理,将状态恢复到事务初始化之前,并且生成特定的错误响应到该事务。
这由CANCEL请求完成,它构成自己的事务,但涉及要取消的事务。
SIP通过EMAIL形式的地址来标明用户地址。
每一用户通过一等级化的URL 来标识,它通过诸如用户电话号码或主机名等元素来构造(例如:SIP:)。
因为它与EMAIL地址的相似性,SIP URLs容易于用户的EMAIL 地址关联。
SIP提供它自己的可靠性机制从而独立于分组层,并且只需不可靠的数据包服务即可。
SIP可典型地用于UDP或TCP之上。
SIP提供必要的协议机制以保证终端系统和代理服务器提供以下业务:
● 用户定位
● 用户能力
● 用户可用性
● 呼叫建立
● 呼叫处理
● 呼叫前转,包括:(1)等效800类型的呼叫,(2)无应答呼叫前转,(3)遇忙呼叫前转,(4)无条件呼叫前转
● 呼叫号码传递,该号码可以是任何命名机制。
● 个人移动性,例如通过一个单一的、位置无关的地址来到达被呼叫方,即使被呼叫方改变了终端。
● 终端类型的协商和选择:呼叫者可以给出选择如何到达对方,例如通过因特网电话,移动电话或应答业务等。
● 终端能力协商
● 呼叫者和被呼叫者鉴权
● 不知情和指导式的呼叫转移
● 多播会议的邀请
当一用户希望呼叫另一用户,呼叫者用INVITE请求初始呼叫,请求包含足够的信息用以被呼叫方参与会话。
如果客户机知道另一方的位置它能够直接将请求发送到另一方的IP地址。
如果不知道,客户机将请求发送到本地配置的SIP 网络服务器。
如果服务器是代理服务器它将解析被呼叫用户的位置并且将请求发送给它们。
有很多方法完成上步,例如搜索DNS或访问数据库。
服务器也可以是重定向服务器,它可以返回被呼叫用户的位置到呼叫客户机用以它直接与用户联系。
在定位用户的过程中,SIP网络服务器当然能够代理或重定向呼叫到其它的服务器,直到到达一个明确地知道被呼叫用户IP地址的服务器。
一旦发现用户地址,请求就发送给该用户,此时将产生几种选择。
在最简单的情况,用户电话客户机接收请求——也就是,用户的电话振铃。
如果用户接受呼叫,客户机用客户机软件的指定能力响应请求并且建立连接。
如果用户拒绝呼叫,会话将被重定向到语音邮箱服务器或另一用户。
“指定能力”参照用户想启用的功能。
例如,客户机软件可以支持视频会议,但用户只想使用音频会议,那则只会启用音频功能。
SIP还具有另外两个有重要意义的特征。
第一个是有状态SIP代理服务器具有分割入呼叫或复制入呼叫的能力,从而可以同时运行几个扩展分支。
第一个应答的分支接受呼叫。
该特征在用户工作在两位置之间(例如实验室和办公室)或者同时对经理和其秘书振铃时是非常便利的。
第二个特征是SIP独特的返回不同媒体类型的能力。
举个用户联系公司的例子。
当SIP服务器接收到客户机的连接请求,它能够通过WEB交互式语音响应页面来返回到顾客的客户机,该页面具有可获得的部门分支或提供在列表上的用户。
点击适当的链接后将发送一请求到所点击选择的用户从而建立起呼叫
4、SIP消息的组成
有两种类型的SIP消息:
● 请求:从客户机发到服务器
● 响应:从服务器发到客户机
SIP请求消息包含三个元素:请求行、头、消息体。
SIP响应消息包含三个元素:状态行、头、消息体。
请求行和头域根据业务、地址和协议特征定义了呼叫的本质,消息体独立于SIP协议并且可包含任何内容。
SIP定义了下述方法:
INVITE——邀请用户加入呼叫。
BYE——终止一呼叫上的两个用户之间的呼叫。
OPTIONS——请求关于服务器能力的信息。
ACK——确认客户机已经接收到对INVITE的最终响应。
REGISTER——提供地址解析的映射,让服务器知道其它用户的位置。
INFO——用于会话中信令。
5、结束语
SIP协议凭借其简单、易于扩展、便于实现等诸多优点越来越得到业界的青睐,它正逐步成为NGN(下一代网络)和3G多媒体子系统域中的重要协议,并且市场上出现越来越多的支持SIP的客户端软件和智能多媒体终端,以及用SIP 协议实现的服务器和软交换设备。
虽然SIP协议目前还不成熟,但可以预见SIP 必定是将来网络多媒体通信中的明星
四、有了IP和MAC 为什么还需要ARP协议?
首先我们需要先大致了解一下MAC地址,MAC(Media Access Control, 介质访问控制)地址是烧录在Network Interface Card(网卡,NIC)里的,也叫硬件地址,是由48比特长(6字节),16进制的数字组成.0-23位叫做组织唯一标志符(organizationally unique ,是识别LAN(局域网)节点的标识.24-47位是由厂家自己分配。
网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。
如何才能知道自己PC的IP地址?一个很简单的方法是使用ipconfig/all 命令,如下图:
如果你的PC中安装有多个网卡,那么相对于每块网卡Ethernet adapter 项所显示的内容都会有所不同,相信大多数PC上显示的都是“本地连接”,这是中文版WIDNOWS XP系统中以太网卡的默认命名。
此处Physical Address项目所显示的就是“本地连接”的MAC地址。
在以太网中,如果主机A需要向主机B发送数据,在发送前必须先解决一个问题——我怎么才能知道主机B“位置”呢?可能有人会说我知道主机B的IP 地址啊……,但实际上,在以太网环境中数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。
在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC 地址。
但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。
所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行
在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC 地址是一一对应的,我们可以使用arp –a命令查看当前缓存表,如下图:
我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。
当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。
如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。
这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。
同时它还更新了自己的ARP
缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。
ARP 缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
下面我们通过一个实例来简单说明一下ARP协议是如何工作的:如下图,小编首先使用arp –d命令将ARP缓存表清空,第二步Ping一个IP地址
192.168.99.252,第三步使用arp –a命令查看ARP缓存表,这时表中出现了一条 192.168.99.252 00-19-21-0a-95-9d dynamic 记录,该条记录的类型为Dynamic,意思是说,这条记录是动态产生的。
ARP记录也会出现静态的记录条目,相应的类型为static。
正如前面所说的,ARP缓存表具有老化机制,几分钟后小编再次使用arp –a命令查看缓存表,刚才的那条记录已经不存在了。
下图是小编使用wireshark(一个抓包工具)抓到的刚才ARP数据包的信息,由于在本机ARP缓存表中没有IP地址192.168.99.252相对应的MAC地址记录,所以在通讯之前系统会向网络中首先发送一个广播包——所有字符都为”f”的MAC 地址,用来询问192.168.99.252的MAC地址是什么?局域网中所有的PC都将收到这个广播包,但只有IP地址为192.168.99.252的PC才会对此请求作出回应——告之192.168.99.204我的MAC地址是00:19:21:0a:95:9d,其它PC则将数据包直接丢弃,在发送方知到了目的主机的MAC地址后便可以进行通讯了。
ARP Request 数据包
ARP Reply 数据包
五、TCP/IP协议总结(上)
TCP/IP协议是网络技术应用的基础,我们已经进行过多次介绍与报道,不过,因为其重要,我们再次进行系统的总结。
尽管OSI 参考模型得到了全世界的认同,但是因特网历史上和技术上的开发标准都是TCP/IP模型(传输控制协议/网际协议,Transmission Control Protocol/Internet Protocol)。
从网络设备厂商的研发部门,到各个系统集成公司工程师的桌面,总能发现TCIP/IP详解一类的书籍。
TCP/IP技术的学习似乎研究和管理网络的一项业内行规,如果你坐在地铁或公交车上,手里抱着一本TCP/IP分析的书本,我们能预知你的明天是光明的,并且有可能是辉煌的。