A. 急!!!tcp/ip网络协议现状及发展趋势 注意关键词:现状、发展趋势
TCP/IP网络协议是目前来说比较完善的协议了,基于OSI七层模型构建,为未来网络模型提供了参数依据和技术上的借鉴.目前的互联网绝大多数服务器和终端均使用TCP/IP协议进行互联互通.TCP/IP也涵盖了多领域和多个桌面系统.而TCP/IP协议需要针对不同的网络进行不同的设置,且每个节点一般需要一个“IP地址”、一个“子网掩码”、一个“默认网关”。不过,可以通过动态主机配置协议(DHCP),给客户端自动分配一个IP地址,避免了出错,也简化了TCP/IP协议的设置。 而IP地址的分配和计算出现了以下的情况:现有的互联网是在IPv4协议的基础上运行的。IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,而地址空间的不足必将妨碍互联网的进一步发展。为了扩大地址空间,拟通过IPv6以重新定义地址空间。IPv4采用32位地址长度,只有大约43亿个地址,估计在2005~2010年间将被分配完毕,而IPv6采用128位地址长度,几乎可以不受限制地提供地址。按保守方法估算IPv6实际可分配的地址,整个地球的每平方米面积上仍可分配1000多个地址。在IPv6的设计过程中除解决了地址短缺问题以外,还考虑了在IPv4中解决不好的其它一些问题,主要有端到端IP连接、服务质量(QoS)、安全性、多播、移动性、即插即用等。
与IPv4相比,IPv6主要有如下一些优势。第一,明显地扩大了地址空间。IPv6采用128位地址长度,几乎可以不受限制地提供IP地址,从而确保了端到端连接的可能性。第二,提高了网络的整体吞吐量。由于IPv6的数据包可以远远超过64k字节,应用程序可以利用最大传输单元(MTU),获得更快、更可靠的数据传输,同时在设计上改进了选路结构,采用简化的报头定长结构和更合理的分段方法,使路由器加快数据包处理速度,提高了转发效率,从而提高网络的整体吞吐量。第三,使得整个服务质量得到很大改善。报头中的业务级别和流标记通过路由器的配置可以实现优先级控制和QoS保障,从而极大改善了IPv6的服务质量。第四,安全性有了更好的保证。采用IPSec可以为上层协议和应用提供有效的端到端安全保证,能提高在路由器水平上的安全性。第五,支持即插即用和移动性。设备接入网络时通过自动配置可自动获取IP地址和必要的参数,实现即插即用,简化了网络管理,易于支持移动节点。而且IPv6不仅从IPv4中借鉴了许多概念和术语,它还定义了许多移动IPv6所需的新功能。第六,更好地实现了多播功能。在IPv6的多播功能中增加了“范围”和“标志”,限定了路由范围和可以区分永久性与临时性地址,更有利于多播功能的实现。
目前,随着互联网的飞速发展和互联网用户对服务水平要求的不断提高,IPv6在全球将会越来越受到重视。
B. 什么是“TCP/IP协议”TCP和IP各有什么作用
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。
TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP作用:当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。
IP作用:IP信息包的传送。P信息包的分割与重组。
TCP/IP协议缺陷
(1)该模型没有明显地区分服务、接口和协议的概念。因此,对于使用新技术来设计新网络,TCP/IP模型不是一个太好的模板。
(2)TCP/IP模型完全不是通用的,并且不适合描述除TCP/IP模型之外的任何协议栈。
(3)链路层并不是通常意义上的一层。它是一个接口,处于网络层和数据链路层之间。接口和层间的区别是很重要的。
以上内容参考网络-IP
以上内容参考网络-TCP
以上内容参考网络-TCP/IP协议
C. 谈计算机网络TCP协议的仿真与实现
谈计算机网络TCP协议的仿真与实现
TCP是计算机网络中运输层协议,连接着应用层和网络层,发挥着非常关键的作用。那么,计算机网络TCP协议的仿真与实现是?
作为计算机网络中较为重要的一种运输层协议,TCP连接着应用层和网络层,发挥着非常关键的作用。在TCP/IP协议中,我们重点关注TCP。本文主要立足于TCP协议的特点,详细介绍了TCP协议的主要特性。
一、TCP协议的概述
(一) TCP协议的特点
首先,TCP提供的连接服务稳定性有保证。相关的连接有着和打电弧相似的建立过程。先拨电话号码,当对方接通回复“喂”的时候,再告知对方自己是谁,完成任务后释放;其次,TCP提供连接必须是只针对两个客户端,也就是实现一对一的传输;最后,TCP提供全双工通信。这个特点就是保证通信的两端在使用TCP的时候可以随时通信,这样就可以及时传输数据。
(二) TCP端口号和套接字地址
TCP端口号:端口号只能对计算机中的进程进行标记,一般使用两个字节来完成标记工作,这也就是端口号的本地意义。当端口号并不是我们熟悉的状况时,要使用数值为1024~49151的等记端口号,使用的过程中要在UANA上登记,避免中间重复使用。无连接的UDP和TCP也有着自己的端口号,但是两个端口号彼此之间是相互独立的,各自有着不同的用途。套接字地址:CP中的套接字,一般在表达的过程中会用同一个名词表达不一样的含义。也就是说,当套接字被一个程序使用,那么socket函数中使用的函数以及调用它的端口都会叫做scocket。当紧急URG给系统发出有关紧急数据传输的通知时,相关的紧急数据应该作为优先级任务,尽快被传送。
二、 TCP的连接与释放
(一)建立连接
全双工是TCP传输数据的主要方式,在整个过程中有三次握手的方式来完成对该项目的建立,并且TCP的连接和释放都是使用客户—服务器方式,连接的建立也是从服务器开始。首先将SYN设置为1,然后将数据包头部的那个确认字段设置为x+1,接下来将最开始的序列号放在数据包头部的数列中。当这个链接的数据段被接受之后,那么相应的数据段就会被送到缓冲区,同时,服务器也能够及时收到客户端从另外一边发来的数据段,最后完成相关输出的确认。
(二) TCP的连接释放
TCP传输数据的'主要方式是全双工,因此,数据传输结束后,所有的连接都会被释放,并且每个连接的释放都是单个放行的。首先,当被A发送的数据能够到达B,为了杜绝失效的报文段在文本中存在,最后一个一个ACK被发送完后,相关的环节就会处理。这种办法就能够及时高效地处理掉连接过程中请求报文段的问题。
(三) TCP的连接复位
一般情况下,有三种情况需要复位。首先,当TCP连接的端口并不存在时,另一端TCP就能发送一个报文段,这时需要关闭相关的连接;其次,如果一端的TCP出现一些异常情况,那么就可以通过发送复位来终止连接;最后一种情况是,当一端的TCP长时间没有使用,那么就可以发送复位信息报,将其关闭。
(四) TCP拥塞控制
TCP的拥塞控制是TCP工作中存在的一种现实问题,会对整个工作造成一定程度的影响,因此,必须针对这种情况进行改进。首先,慢启动和拥塞避免。TCP用来发送数据是慢启动和拥塞避免算法展开的依据,这种算法的实现必须通过在TCP中增加两个变量;其次,快恢复和快重传。这种主要是针对发送端展开的,多种网络会导致端口查收到重复ACK,因此,应该找到事故原因,及时处理。
三、TCP的仿真实验
(一)仿真实验的设置
我们都知道TCP是有链接的可靠的传输层协议,所以在传输运用过程中也会出现错误。下面我们通过以下仿真实验,来了解TCP在传输FTP文件时一数据报丢失的情况,来详细分析下这一解决过程。
我们用OPNET来做TCP的仿真实验,这只是在一个比较简单的环境下在做关于TCP的仿真实验,测试出数据图通过分析和比较来观察TCP处理数据丢失包的具体工作原理和过程。选择“结果- - > >安排Pannels显示所有“查看保存结果。
顶部多媒体的快速decovery conquestion窗口由于“TCP雷诺”,在重新传输。这个conquestion窗口只是减少了一半,而不是1MSS,从而快速恢复。graphe的底部显示了发送之间的关系序列号码和收到seqment ack服务器上的数量。服务器故意把一个数据包给丢失,这时客户服务器就会发出三个ACK,会被重新发送。
这时把FTP的Command Mix的值设置为100%,把Inter-Requests设置为constant 3600,把File Size设置为FTP,把Server,type of serveice值设置为best effort,把RSVP parameters值设置为 None;用NotUsed来设置Back-End Custom Application值。
(二)仿真实验的过程
针对TCP数据传输开始时,拥塞窗口设置为最大的MSS值,慢启动算法开始,cwnd被设置为200,那么400,800,1600.......以103S,拥塞窗口达到6500的最大阈值,为了不让拥塞窗口将不会太增加网络阻塞引起的,然后执行拥塞避免算法,每一个RTT,拥塞窗口将增加一个单位,然后在107s当FTP数据包丢失,然后进行处理,拥塞窗口的值下降,TCP协议在慢启动和拥塞避免算法的实现,窗口的大小增长将呈现线性增长。设置最大窗口阈值,根据3响应消息重复判断丢包,重传丢失的数据包和直接的阈值,为当前拥塞窗口6500的一半,这是快速重传(Tahoe),然后转移到慢启动。然后再转入慢开始。
在窗口大小到达大约80000后,应该是收到3个连续ACK,若根据3个重复的应答报文就会知道有没有丢包,而且丢失的分组会被重传,此时的ssthresh的值就为拥塞窗口的一半,这样就进入了进入拥塞避免阶段。
(三)仿真实验小结
用OPNET做TCP的仿真实验,数据包丢失,TCP数据的变化都被形象的描绘出来了,很好的诠释了这一失误和改正过程。为TCP以后出错改正做了很好的例子。
四、结语
综上所述,网络普及的这个时代,让我们不断地认识到了计算机网络的重要性,学生们也开始越来越重视对TCP的研究。在简单的OSI体系中,TCP发挥着较为重要的作用,因此,我们必须深入研究其工作原理,便于在运输层中顺利地运用TCP协议。
;D. 3G网络遵循什么通信协议TCP/IP吗
我晕啊,TCP/IP是网络层协议,适用于互联网的。
3G的协议有几种,WCDMA是主流也就是联通用的,还有CMDA2000电信用的,这些都是外国制定的标准。还有就是移动用的TD-SCDMA这是我国自主制定的标准 很差
E. TCP协议详解及实战解析【精心整理收藏】
TCP协议是在TCP/IP协议模型中的运输层中很重要的一个协议、负责处理主机端口层面之间的数据传输。主要有以下特点:
1.TCP是面向链接的协议,在数据传输之前需要通过三次握手建立TCP链接,当数据传递完成之后,需要通过四次挥手进行连接释放。
2.每一条TCP通信都是两台主机和主机之间的,是点对点传输的协议。
3.TCP提供可靠的、无差错、不丢失、不重复,按序到达的服务。
4.TCP的通信双方在连接建立的任何时候都可以发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
5.面向字节流。在数据传输的过程中如果报文比较长的话TCP会进行数据分段传输,每一条分段的TCP传输信息都带有分段的序号,每一段都包含一部分字节流。接收方根据每段携带的的序号信息进行数据拼接,最终拼接出来初始的传输数据。但是在整个传输的过程中每一段TCP携带的都是被切割的字节流数据。所以说TCP是面向字节流的。
a.TCP和UDP在发送报文时所采用的方式完全不同。TCP并不关心应用程序一次把多长的报文发送到TCP缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用程序给出的)。
b.如果应用程序传送到TCP缓存的数据块太大,TCP就可以把它划分短一些再传。TCP也可以等待积累有足够多的字节后再构建成报文段发送出去。
各字段含义:
源端口:发送端的端口号
目的端口:接收端的端口号
序号:TCP将发送报文分段传输的时候会给每一段加上序号,接收端也可以根据这个序号来判断数据拼接的顺序,主要用来解决网络报乱序的问题
确认号:确认号为接收端收到数据之后进行排序确认以及发送下一次期待接收到的序号,数值 = 接收到的发送号 + 1
数据偏移:占4比特,表示数据开始的地方离TCP段的起始处有多远。实际上就是TCP段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。数据偏移以32位为长度单位,因此TCP首部的最大长度是60(15*4)个字节。
控制位:
URG:此标志表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;
ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;
PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;
RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;
SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;
FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志 位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。
窗口:TCP里很重要的一个机制,占2字节,表示报文段发送方期望接收的字节数,可接收的序号范围是从接收方的确认号开始到确认号加上窗口大小之间的数据。后面会有实例讲解。
校验和:校验和包含了伪首部、TCP首部和数据,校验和是TCP强制要求的,由发送方计算,接收方验证
紧急指针:URG标志为1时,紧急指针有效,表示数据需要优先处理。紧急指针指出在TCP段中的紧急数据的最后一个字节的序号,使接收方可以知道紧急数据共有多长。
选项:最常用的选项是最大段大小(Maximum Segment Size,MSS),向对方通知本机可以接收的最大TCP段长度。MSS选项只在建立连接的请求中发送。
放在以太网帧里看TCP的位置
TCP 数据包在 IP 数据包的负载里面。它的头信息最少也需要20字节,因此 TCP 数据包的最大负载是 1480 - 20 = 1460 字节。由于 IP 和 TCP 协议往往有额外的头信息,所以 TCP 负载实际为1400字节左右。
因此,一条1500字节的信息需要两个 TCP 数据包。HTTP/2 协议的一大改进, 就是压缩 HTTP 协议的头信息,使得一个 HTTP 请求可以放在一个 TCP 数据包里面,而不是分成多个,这样就提高了速度。
以太网数据包的负载是1500字节,TCP 数据包的负载在1400字节左右
一个包1400字节,那么一次性发送大量数据,就必须分成多个包。比如,一个 10MB 的文件,需要发送7100多个包。
发送的时候,TCP 协议为每个包编号(sequence number,简称 SEQ),以便接收的一方按照顺序还原。万一发生丢包,也可以知道丢失的是哪一个包。
第一个包的编号是一个随机数。为了便于理解,这里就把它称为1号包。假定这个包的负载长度是100字节,那么可以推算出下一个包的编号应该是101。这就是说,每个数据包都可以得到两个编号:自身的编号,以及下一个包的编号。接收方由此知道,应该按照什么顺序将它们还原成原始文件。
收到 TCP 数据包以后,组装还原是操作系统完成的。应用程序不会直接处理 TCP 数据包。
对于应用程序来说,不用关心数据通信的细节。除非线路异常,否则收到的总是完整的数据。应用程序需要的数据放在 TCP 数据包里面,有自己的格式(比如 HTTP 协议)。
TCP 并没有提供任何机制,表示原始文件的大小,这由应用层的协议来规定。比如,HTTP 协议就有一个头信息Content-Length,表示信息体的大小。对于操作系统来说,就是持续地接收 TCP 数据包,将它们按照顺序组装好,一个包都不少。
操作系统不会去处理 TCP 数据包里面的数据。一旦组装好 TCP 数据包,就把它们转交给应用程序。TCP 数据包里面有一个端口(port)参数,就是用来指定转交给监听该端口的应用程序。
应用程序收到组装好的原始数据,以浏览器为例,就会根据 HTTP 协议的Content-Length字段正确读出一段段的数据。这也意味着,一次 TCP 通信可以包括多个 HTTP 通信。
服务器发送数据包,当然越快越好,最好一次性全发出去。但是,发得太快,就有可能丢包。带宽小、路由器过热、缓存溢出等许多因素都会导致丢包。线路不好的话,发得越快,丢得越多。
最理想的状态是,在线路允许的情况下,达到最高速率。但是我们怎么知道,对方线路的理想速率是多少呢?答案就是慢慢试。
TCP 协议为了做到效率与可靠性的统一,设计了一个慢启动(slow start)机制。开始的时候,发送得较慢,然后根据丢包的情况,调整速率:如果不丢包,就加快发送速度;如果丢包,就降低发送速度。
Linux 内核里面 设定 了(常量TCP_INIT_CWND),刚开始通信的时候,发送方一次性发送10个数据包,即"发送窗口"的大小为10。然后停下来,等待接收方的确认,再继续发送。
默认情况下,接收方每收到 两个 TCP 数据包,就要 发送 一个确认消息。"确认"的英语是 acknowledgement,所以这个确认消息就简称 ACK。
ACK 携带两个信息。
发送方有了这两个信息,再加上自己已经发出的数据包的最新编号,就会推测出接收方大概的接收速度,从而降低或增加发送速率。这被称为"发送窗口",这个窗口的大小是可变的。
注意,由于 TCP 通信是双向的,所以双方都需要发送 ACK。两方的窗口大小,很可能是不一样的。而且 ACK 只是很简单的几个字段,通常与数据合并在一个数据包里面发送。
即使对于带宽很大、线路很好的连接,TCP 也总是从10个数据包开始慢慢试,过了一段时间以后,才达到最高的传输速率。这就是 TCP 的慢启动。
TCP 协议可以保证数据通信的完整性,这是怎么做到的?
前面说过,每一个数据包都带有下一个数据包的编号。如果下一个数据包没有收到,那么 ACK 的编号就不会发生变化。
举例来说,现在收到了4号包,但是没有收到5号包。ACK 就会记录,期待收到5号包。过了一段时间,5号包收到了,那么下一轮 ACK 会更新编号。如果5号包还是没收到,但是收到了6号包或7号包,那么 ACK 里面的编号不会变化,总是显示5号包。这会导致大量重复内容的 ACK。
如果发送方发现收到 三个 连续的重复 ACK,或者超时了还没有收到任何 ACK,就会确认丢包,即5号包遗失了,从而再次发送这个包。通过这种机制,TCP 保证了不会有数据包丢失。
TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动窗口控制的,而滑动窗口的大小实际上是由两个窗口共同决定的,一个是接收端的通告窗口,这个窗口值在TCP协议头部信息中有,会随着数据的ACK包发送给发送端,这个值表示的是在接收端的TCP协议缓存中还有多少剩余空间,发送端必须保证发送的数据不超过这个剩余空间以免造成缓冲区溢出,这个窗口是接收端用来进行流量限制的,在传输过程中,通告窗口大小与接收端的进程取出数据的快慢有关。另一个窗口是发送端的拥塞窗口(Congestion window),由发送端维护这个值,在协议头部信息中没有,滑动窗口的大小就是通告窗口和拥塞窗口的较小值,所以拥塞窗口也看做是发送端用来进行流量控制的窗口。滑动窗口的左边沿向右移动称为窗口合拢,发生在发送的数据被确认时(此时,表明数据已被接收端收到,不会再被需要重传,可以从发送端的发送缓存中清除了),滑动窗口的右边沿向右移动称为窗口张开,发生在接收进程从接收端协议缓存中取出数据时。随着发送端不断收到的被发送数据的ACK包,根据ACK包中的确认序号和通告窗口大小使滑动窗口得以不断的合拢和张开,形成滑动窗口的向前滑动。如果接收进程一直不取数据,则会出现0窗口现象,即滑动窗口左边沿与右边沿重合,此时窗口大小为0,就无法再发送数据。
在TCP里,接收端(B)会给发送端(A)报一个窗口的大小,叫Advertised window。
1.在没有收到B的确认情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在
未收到确认之前都必须暂时保留,以便在超时重传时使用。
2.发送窗口里面的序号表示允许发送的序号。显然,窗口越大,发送方就可以在收到对方确认之前连续
发送更多数据,因而可能获得更高的传输效率。但接收方必须来得及处理这些收到的数据。
3.发送窗口后沿的后面部分表示已发送且已收到确认。这些数据显然不需要再保留了。
4.发送窗口前沿的前面部分表示不允许发送的,应为接收方都没有为这部分数据保留临时存放的缓存空间。
5.发送窗口后沿的变化情况有两种:不动(没有收到新的确认)和前移(收到了新的确认)
6.发送窗口前沿的变化情况有两种:不断向前移或可能不动(没收到新的确认)
TCP的发送方在规定时间内没有收到确认就要重传已发送的报文段。这种重传的概念很简单,但重传时间的选择确是TCP最复杂的问题之一。TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到响应的确认的时间
这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间。超时重传时间RTO略大于加权平均往返时间
RTT:
即Round Trip Time,表示从发送端到接收端的一去一回需要的时间,tcp在数据传输过程中会对RTT进行采样(即对发送的数据包及其ACK的时间差进行测量,并根据测量值更新RTT值,具体的算法TCPIP详解里面有),TCP根据得到的RTT值更新RTO值,即Retransmission TimeOut,就是重传间隔,发送端对每个发出的数据包进行计时,如果在RTO时间内没有收到所发出的数据包的对应ACK,则任务数据包丢失,将重传数据。一般RTO值都比采样得到的RTT值要大。
如果收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?
答案是可以的,选择确认就是一种可行的处理方法。
如果要使用选项确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,而双方必须都事先商定好。如果使用选择确认,
那么原来首部中的“确认号字段”的用法仍然不变。SACK文档并没有明确发送方应当怎么响应SACK.因此大多数的实现还是重传所有未被确认的数据块。
一般说来,我们总是希望数据传输的更快一些,但如果发送方把数据发送的过快,接收方就可能来不及接收,这会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
在计算机网络中的链路容量,交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞。
拥塞控制方法:
1.慢开始和拥塞避免
2.快重传和快恢复
3.随机早期检测
1.一开始,客户端和服务端都处于CLOSED状态
2.先是服务端主动监听某个端口,处于LISTEN状态(比如服务端启动,开始监听)。
3.客户端主动发起连接SYN,之后处于SYN-SENT状态(第一次握手,发送 SYN = 1 ACK = 0 seq = x ack = 0)。
4.服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RCVD状态(第二次握手,发送 SYN = 1 ACK = 1 seq = y ack = x + 1)。
5.客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处于ESTABLISHED状态(第三次握手,发送 SYN = 0 ACK = 1 seq = x + 1 ack = y + 1)。
6.服务端收到客户端的ACK之后,处于ESTABLISHED状态。
(需要注意的是,有可能X和Y是相等的,可能都是0,因为他们代表了各自发送报文段的序号。)
TCP连接释放四次挥手
1.当前A和B都处于ESTAB-LISHED状态。
2.A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。
3.B收到连接释放报文段后即发出确认,然后B进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时TCP连接处于半关闭状态,即A已经没有数据发送了。
从B到A这个方向的连接并未关闭,这个状态可能会持续一些时间。
4.A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文端。
5.若B已经没有向A发送的数据,B发出连接释放信号,这时B进入LAST-ACK(最后确认)状态等待A的确认。
6.A再收到B的连接释放消息后,必须对此发出确认,然后进入TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉,必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入CLOSED状态。
7。B收到A发出的确认消息后,进入CLOSED状态。
以请求网络为例,看一下三次握手真实数据的TCP连接建立过程
我们再来看四次挥手。TCP断开连接时,会有四次挥手过程,标志位是FIN,我们在封包列表中找到对应位置,理论上应该找到4个数据包,但我试了好几次,实际只抓到3个数据包。查了相关资料,说是因为服务器端在给客户端传回的过程中,将两个连续发送的包进行了合并。因此下面会按照合并后的三次挥手解释,若有错误之处请指出。
第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
原因有二:
一、保证TCP协议的全双工连接能够可靠关闭
二、保证这次连接的重复数据段从网络中消失
先说第一点,如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN,此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求。所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。
再说第二点,如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。
硬件速度
网络和服务器的负载
请求和响应报文的尺寸
客户端和服务器之间的距离
TCP 协议的技术复杂性
TCP 连接建立握手;
TCP 慢启动拥塞控制;
数据聚集的 Nagle 算法;
用于捎带确认的 TCP 延迟确认算法;
TIME_WAIT 时延和端口耗尽。
介绍完毕,就这?
是的,就这。
补充:
大部分内容为网络整理,方便自己学习回顾,参考文章:
TCP 协议简介
TCP协议图文详解
什么是TCP协议?
wireshark抓包分析——TCP/IP协议
TCP协议的三次握手和四次挥手
TCP协议详解
TCP带宽和时延的研究(1)
F. TCP/IP、SIP协议
TCP/IP协议 (传输控制协议/网间协议)
TCP/IP 协议集确立了 Internet 的技术基础。TCP/IP 的发展始于美国 DOD (国防部)方案。 IAB (Internet 架构委员会)的下属工作组 IETF (Internet 工程任务组)研发了其中多数协议。 IAB 最初由美国政府发起,如今转变为公开而自治的机构。IAB 协同研究和开发 TCP/IP 协议集的底层结构,并引导着 Internet 的发展。TCP/IP 协议集记录在请求注解(RFC)文件中,RFC 文件均由 IETF 委员会起草、讨论、传阅及核准。所有这些文件都是公开且免费的,且能在 IETF 网站上列出的参考文献中找到。
TCP/IP 协议覆盖了 OSI 网络结构七层模型中的六层,并支持从交换(第二层)诸如多协议标记交换,到应用程序诸如邮件服务方面的功能。TCP/IP 的核心功能是寻址和路由选择(网络层的 IP/IPV6 )以及传输控制(传输层的 TCP、UDP)。
IP (网际协议)
在网络通信中,网络组件的寻址对信息的路由选择和传输来说是相当关键的。相同网络中的两台机器间的消息传输有各自的技术协定。LAN 是通过提供6字节的唯一标识符(“MAC”地址)在机器间发送消息的。SNA 网络中的每台机器都有一个逻辑单元及与其相应的网络地址。DECNET、AppleTalk 和 Novell IPX 均有一个用来分配编号到各个本地网和工作站的配置。
除了本地或特定提供商的网络地址,IP 为世界范围内的各个网络设备都分配了一个唯一编号,即 IP 地址。IPV4 的 IP 地址为4字节,按照惯例,将每个字节转化成十进制(0-255)并以点分隔各字节。IPV6 的 IP 地址已经增加到16字节。关于 IP 和 IPV6 协议的详细说明,在相关文件中再另作介绍。
TCP (传输控制协议)
通过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟连接服务。TCP 主要提供数据流转送,可靠传输,有效流控制,全双工操作和多路传输技术。可查阅 TCP 部分获取更多详细资料。
在下面的 TCP/IP 协议表格中,我们根据协议功能和其在 OSI 七层网络通信参考模型的映射关系将其全部列出。然而,TCP/IP 并不完全遵循 OSI 模型,例如:大多数 TCP/IP 应用程序是直接在传输层协议 TCP 和 UDP 上运行,而不涉及其中的表示层和会话层。
主要协议表
IP TCP UDP IPsec HTTP POP3 SNMP MPLS DNS SMTP
应用层(Application Layer)
--------------------------------------------------------------------------------
BOOTP:引导协议 (BOOTP:Bootstrap Protocol)
DCAP:数据转接客户访问协议 (DCAP:Data Link Switching Client Access Protocol)
DHCP:动态主机配置协议 (DHCP:Dynamic Host Configuration Protocol)
DNS:域名系统(服务)系统 (DNS:Domain Name Systems)
Finger:用户信息协议 (Finger:User Information Protocol)
FTP:文件传输协议 (FTP:File Transfer Protocol)
HTTP:超文本传输协议 (HTTP:Hypertext Transfer Protocol)
S-HTTP:安全超文本传输协议 (S-HTTP:Secure Hypertext Transfer Protocol)
IMAP & IMAP4:信息访问协议 & 信息访问协议第4版 (IMAP & IMAP4:Internet Message Access Protocol)
IPDC:IP 设备控制 (IPDC:IP Device Control)
IRCP/IRC:因特网在线聊天协议 (IRCP/IRC:Internet Relay Chat Protocol)
LDAP:轻量级目录访问协议 (LDAP:Lightweighted Directory Access Protocol)
MIME/S-MIME/Secure MIME:多用途网际邮件扩充协议 (MIME/S-MIME/Secure MIME:Multipurpose Internet Mail Extensions)
NAT:网络地址转换 (NAT:Network Address Translation)
NNTP:网络新闻传输协议 (NNTP:Network News Transfer Protocol)
NTP:网络时间协议 (NTP:Network Time Protocol)
POP&POP3:邮局协议 (POP & POP3:Post Office Protocol)
RLOGIN:远程登录命令 (RLOGIN:Remote Login in Unix)
RMON:远程监控 (RMON:Remote Monitoring MIBs in SNMP)
RWhois:远程目录访问协议 (RWhois Protocol)
SLP:服务定位协议 (SLP:Service Location Protocol)
SMTP:简单邮件传输协议 (SMTP:Simple Mail Transfer Protocol)
SNMP:简单网络管理协议 (SNMP:Simple Network Management Protocol)
SNTP:简单网络时间协议 (SNTP:Simple Network Time Protocol)
TELNET:TCP/IP 终端仿真协议 (TELNET:TCP/IP Terminal Emulation Protocol)
TFTP:简单文件传输协议 (TFTP:Trivial File Transfer Protocol)
URL:统一资源管理 (URL:Uniform Resource Locator)
X-Window/X Protocol:X 视窗 或 X 协议(X-Window:X Window or X Protocol or X System)
表示层(Presentation Layer)
--------------------------------------------------------------------------------
LPP:轻量级表示协议 (LPP:Lightweight Presentation Protocol)
会话层(Session Layer)
--------------------------------------------------------------------------------
RPC:远程过程调用协议 (RPC:Remote Procere Call protocol)
传输层(Transport Layer)
--------------------------------------------------------------------------------
ITOT:基于TCP/IP 的 ISO 传输协议 (ITOT:ISO Transport Over TCP/IP)
RDP:可靠数据协议 (RDP:Reliable Data Protocol)
RUDP:可靠用户数据报协议 (RUDP:Reliable UDP)
TALI:传输适配层接口 (TALI:Transport Adapter Layer Interface)
TCP:传输控制协议 (TCP:Transmission Control Protocol)
UDP:用户数据报协议 (UDP:User Datagram Protocol)
Van Jacobson:压缩 TCP 协议 (Van Jacobson:Compressed TCP)
网络层(Network Layer)
--------------------------------------------------------------------------------
路由选择(Routing)
BGP/BGP4:边界网关协议 (BGP/BGP4:Border Gateway Protocol)
EGP:外部网关协议(EGP:Exterior Gateway Protocol)
IP:网际协议 (IP:Internet Protocol)
IPv6:网际协议第6版 (IPv6:Internet Protocol version 6)
ICMP/ICMPv6:Internet 信息控制协议 (ICMP/ICMPv6:Internet Control Message Protocol)
IRDP:ICMP 路由器发现协议 (IRDP:ICMP Router Discovery Protocol)
Mobile IP: 移动 IP (Mobile IP:IP Mobility Support Protocol for IPv4 & IPv6)
NARP:NBMA 地址解析协议 (NARP:NBMA Address Resolution Protocol)
NHRP:下一跳解析协议 (NHRP:Next Hop Resolution Protocol)
OSPF:开放最短路径优先 (OSPF:Open Shortest Path First)
RIP/RIP2:路由选择信息协议 (RIP/RIP2:Routing Information Protocol)
RIPng:路由选择信息协议下一代 (RIPng:RIP for IPv6)
RSVP:资源预留协议 (RSVP:Resource ReSerVation Protocol)
VRRP:虚拟路由器冗余协议 (VRRP:Virtual Router Rendancy Protocol)
组播(Multicast)
BGMP:边界网关组播协议 (BGMP:Border Gateway Multicast Protocol)
DVMRP:距离矢量组播路由协议 (DVMRP:Distance Vector Multicast Routing Protocol)
IGMP:Internet 组管理协议 (IGMP:Internet Group Management Protocol)
MARS:组播地址解析服务 (MARS:Multicast Address Resolution Server)
MBGP:组播协议边界网关协议 (MBGP:Multiprotocol BGP)
MOSPF:组播OSPF (MOSPF:Multicast OSPF)
MSDP:组播源发现协议 (MSDP:Multicast Source Discovery Protocol)
MZAP:组播区域范围公告协议 (MZAP:Multicast Scope Zone Announcement Protocol)
PGM:实际通用组播协议 (PGM:Pragmatic General Multicast Protocol)
PIM-DM:密集模式独立组播协议 (PIM-DM:Protocol Independent Multicast - Dense Mode)
PIM-SM:稀疏模式独立组播协议 (PIM-SM:Protocol Independent Multicast - Sparse Mode)
MPLS 协议(MPLS Protocols)
CR-LDP:基于路由受限标签分发协议 (CR-LDP: Constraint-Based Label Distribution Protocol)
GMPLS:通用多协议标志交换协议 (GMPLS:Generalized Multiprotocol Label Switching)
LDP:标签分发协议 (LDP:Label Distribution Protocol)
MPLS:多协议标签交换 (MPLS:Multi-Protocol Label Switching)
RSVP-TE:基于流量工程扩展的资源预留协议 (RSVP-TE:Resource ReSerVation Protocol-Traffic Engineering)
数据链路层(Data Link Layer)
--------------------------------------------------------------------------------
ARP and InARP:地址转换协议和逆向地址转换协议 (ARP and InARP:Address Resolution Protocol and Inverse ARP)
IPCP and IPv6CP:IP控制协议和IPV6控制协议 (IPCP and IPv6CP:IP Control Protocol and IPv6 Control Protocol)
RARP:反向地址转换协议 (RARP:Reverse Address Resolution Protocol)
SLIP:串形线路 IP (SLIP:Serial Line IP)
SIP
介绍
新一代的服务
历史回顾
SIP 的优点:类似 Web 的可扩展开放通信
SIP 会话构成
介绍
通信提供商及其合作伙伴和用户越来越渴求新一代基于 IP 的服务。现在有了 SIP(会话启动协议),一解燃眉之急。SIP 是不到十年前在计算机科学实验室诞生的一个想法。它是第一个适合各种媒体内容而实现多用户会话的协议,现在已成了 Internet 工程任务组 (IETF) 的规范。
今天,越来越多的运营商、CLEC(竞争本地运营商)和 ITSP(IP 电话服务商)都在提供基于 SIP 的服务,如市话和长途电话技术、在线信息和即时消息、IP Centrex/Hosted PBX、语音短信、push-to-talk(按键通话)、多媒体会议等等。独立软件供应商 (ISV) 正在开发新的开发工具,用来为运营商网络构建基于 SIP 的应用程序以及 SIP 软件。网络设备供应商 (NEV) 正在开发支持 SIP 信令和服务的硬件。现在,有众多 IP 电话、用户代理、网络代理服务器、VOIP 网关、媒体服务器和应用服务器都在使用 SIP。
SIP 从类似的权威协议--如 Web 超文本传输协议 (HTTP) 格式化协议以及简单邮件传输协议 (SMTP) 电子邮件协议--演变而来并且发展成为一个功能强大的新标准。但是,尽管 SIP 使用自己独特的用户代理和服务器,它并非自成一体地封闭工作。SIP 支持提供融合的多媒体服务,与众多负责身份验证、位置信息、语音质量等的现有协议协同工作。
本白皮书对 SIP 及其作用进行了概括性的介绍。它还介绍了 SIP 从实验室开发到面向市场的过程。本白皮书说明 SIP 提供哪些服务以及正在实施哪些促进发展的方案。它还详细介绍了 SIP 与各种协议不同的重要特点并说明如何建立 SIP 会话。
返回页首
新一代的服务
SIP 较为灵活,可扩展,而且是开放的。它激发了 Internet 以及固定和移动 IP 网络推出新一代服务的威力。SIP 能够在多台 PC 和电话上完成网络消息,模拟 Internet 建立会话。
与存在已久的国际电信联盟 (ITU) SS7 标准(用于呼叫建立)和 ITU H.323 视频协议组合标准不同,SIP 独立工作于底层网络传输协议和媒体。它规定一个或多个参与方的终端设备如何能够建立、修改和中断连接,而不论是语音、视频、数据或基于 Web 的内容。
SIP 大大优于现有的一些协议,如将 PSTN 音频信号转换为 IP 数据包的媒体网关控制协议 (MGCP)。因为 MGCP 是封闭的纯语音标准,所以通过信令功能对其进行增强比较复杂,有时会导致消息被破坏或丢弃,从而妨碍提供商增加新的服务。而使用 SIP,编程人员可以在不影响连接的情况下在消息中增加少量新信息。
例如,SIP 服务提供商可以建立包含语音、视频和聊天内容的全新媒体。如果使用 MGCP、H.323 或 SS7 标准,则提供商必须等待可以支持这种新媒体的协议新版本。而如果使用 SIP,尽管网关和设备可能无法识别该媒体,但在两个大陆上设有分支机构的公司可以实现媒体传输。
而且,因为 SIP 的消息构建方式类似于 HTTP,开发人员能够更加方便便捷地使用通用的编程语言(如 Java)来创建应用程序。对于等待了数年希望使用 SS7 和高级智能网络 (AIN) 部署呼叫等待、主叫号码识别以及其他服务的运营商,现在如果使用 SIP,只需数月时间即可实现高级通信服务的部署。
这种可扩展性已经在越来越多基于 SIP 的服务中取得重大成功。Vonage 是针对用户和小企业用户的服务提供商。它使用 SIP 向用户提供 20,000 多条数字市话、长话及语音邮件线路。Deltathree 为服务提供商提供 Internet 电话技术产品、服务和基础设施。它提供了基于 SIP 的 PC 至电话解决方案,使 PC 用户能够呼叫全球任何一部电话。Denwa Communications 在全球范围内批发语音服务。它使用 SIP 提供 PC 至 PC 及电话至 PC 的主叫号码识别、语音邮件,以及电话会议、统一通信、客户管理、自配置和基于 Web 的个性化服务。
某些权威人士预计,SIP 与 IP 的关系将发展成为类似 SMTP 和 HTTP 与 Internet 的关系,但也有人说它可能标志着 AIN 的终结。迄今为止,3G 界已经选择 SIP 作为下一代移动网络的会话控制机制。Microsoft 已经选择 SIP 作为其实时通信策略并在 Microsoft XP、Pocket PC 和 MSN Messenger 中进行了部署。Microsoft 同时宣布 CE.net 的下一个版本将使用基于 SIP 的 VoIP 应用接口层,并承诺向用户 PC 提供基于 SIP 的语音和视频呼叫。
另外,MCI 正在使用 SIP 向 IP 通信用户部署高级电话技术服务。用户将能够通知主叫方自己是否有空以及首选的通信方式,如电子邮件、电话或即时消息。利用在线信息,用户还能够即时建立聊天会话和召开音频会议。使用 SIP 将不断地实现各种功能。
返回页首
历史回顾
SIP 出现于二十世纪九十年代中期,源于哥伦比亚大学计算机系副教授 Henning Schulzrinne 及其研究小组的研究。Schulzrinne 教授除与人共同提出通过 Internet 传输实时数据的实时传输协议 (RTP) 外,还与人合作编写了实时流传输协议 (RTSP) 标准提案,用于控制音频视频内容在 Web 上的流传输。
Schulzrinne 本来打算编写多方多媒体会话控制 (MMUSIC) 标准。1996 年,他向 IETF 提交了一个草案,其中包含了 SIP 的重要内容。1999 年,Shulzrinne 在提交的新标准中删除了有关媒体内容方面的无关内容。随后,IETF 发布了第一个 SIP 规范,即 RFC 2543。虽然一些供应商表示了担忧,认为 H.323 和 MGCP 协议可能会大大危及他们在 SIP 服务方面的投资,IETF 继续进行这项工作,于 2001 年发布了 SIP 规范 RFC 3261。
RFC 3261 的发布标志着 SIP 的基础已经确立。从那时起,已发布了几个 RFC 增补版本,充实了安全性和身份验证等领域的内容。例如,RFC 3262 对临时响应的可靠性作了规定。RFC 3263 确立了 SIP 代理服务器的定位规则。RFC 3264 提供了提议/应答模型,RFC 3265 确定了具体的事件通知。
早在 2001 年,供应商就已开始推出基于 SIP 的服务。今天,人们对该协议的热情不断高涨。Sun Microsystems 的 Java Community Process 等组织正在使用通用的 Java 编程语言定义应用编程接口 (API),以便开发商能够为服务提供商和企业构建 SIP 组件和应用程序。最重要的是,越来越多的竞争者正在借助前途光明的新服务进入 SIP 市场。SIP 正在成为自 HTTP 和 SMTP 以来最为重要的协议之一。
返回页首
SIP 的优点:类似 Web 的可扩展开放通信
使用 SIP,服务提供商可以随意选择标准组件,快速驾驭新技术。不论媒体内容和参与方数量,用户都可以查找和联系对方。SIP 对会话进行协商,以便所有参与方都能够就会话功能达成一致以及进行修改。它甚至可以添加、删除或转移用户。
不过,SIP
不是万能的。它既不是会话描述协议,也不提供会议控制功能。为了描述消息内容的负载情况和特点,SIP 使用 Internet 的会话描述协议 (SDP) 来描述终端设备的特点。SIP 自身也不提供服务质量 (QoS),它与负责语音质量的资源保留设置协议 (RSVP) 互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议 (LDAP)、负责身份验证的远程身份验证拨入用户服务 (RADIUS) 以及负责实时传输的 RTP 等多个协议。
SIP 规定了以下基本的通信要求:
1. 用户定位服务
2. 会话建立
3. 会话参与方管理
4. 特点的有限确定
SIP 的一个重要特点是它不定义要建立的会话的类型,而只定义应该如何管理会话。有了这种灵活性,也就意味着 SIP 可以用于众多应用和服务中,包括交互式游戏、音乐和视频点播以及语音、视频和 Web 会议。
下面是 SIP 在新的信令协议中出类拔萃的一些其他特点
SIP 消息是基于文本的,因而易于读取和调试。新服务的编程更加简单,对于设计人员而言更加直观。
SIP 如同电子邮件客户机一样重用 MIME 类型描述,因此与会话相关的应用程序可以自动启动。
SIP 重用几个现有的比较成熟的 Internet 服务和协议,如 DNS、RTP、RSVP 等。不必再引入新服务对 SIP 基础设施提供支持,因为该基础设施很多部分已经到位或现成可用。
对 SIP 的扩充易于定义,可由服务提供商在新的应用中添加,不会损坏网络。网络中基于 SIP 的旧设备不会妨碍基于 SIP 的新服务。例如,如果旧 SIP 实施不支持新的 SIP 应用所用的方法/标头,则会将其忽略。
SIP 独立于传输层。因此,底层传输可以是采用 ATM 的 IP。SIP 使用用户数据报协议 (UDP) 以及传输控制协议 (TCP),将独立于底层基础设施的用户灵活地连接起来。
SIP 支持多设备功能调整和协商。如果服务或会话启动了视频和语音,则仍然可以将语音传输到不支持视频的设备,也可以使用其他设备功能,如单向视频流传输功能。
返回页首
SIP 会话构成
SIP 会话使用多达四个主要组件:SIP 用户代理、SIP 注册服务器、SIP 代理服务器和 SIP 重定向服务器。这些系统通过传输包括了 SDP 协议(用于定义消息的内容和特点)的消息来完成 SIP 会话。下面概括性地介绍各个 SIP 组件及其在此过程中的作用。
SIP 用户代理 (UA) 是终端用户设备,如用于创建和管理 SIP 会话的移动电话、多媒体手持设备、PC、PDA 等。用户代理客户机发出消息。用户代理服务器对消息进行响应。
SIP 注册服务器是包含域中所有用户代理的位置的数据库。在 SIP 通信中,这些服务器会检索参与方的 IP 地址和其他相关信息,并将其发送到 SIP 代理服务器。
SIP 代理服务器接受 SIP UA 的会话请求并查询 SIP 注册服务器,获取收件方 UA 的地址信息。然后,它将会话邀请信息直接转发给收件方 UA(如果它位于同一域中)或代理服务器(如果 UA 位于另一域中)。
SIP 重定向服务器允许 SIP 代理服务器将 SIP 会话邀请信息定向到外部域。SIP 重定向服务器可以与 SIP 注册服务器和 SIP 代理服务器同在一个硬件上。
以下几个情景说明 SIP 组件之间如何进行协调以在同一域和不同域中的 UA 之间建立 SIP 会话:
在同一域中建立 SIP 会话
下图说明了在预订同一个 ISP 从而使用同一域的两个用户之间建立 SIP 会话的过程。用户 A 使用 SIP 电话。用户 B 有一台 PC,运行支持语音和视频的软客户程序。加电后,两个用户都在 ISP 网络中的 SIP 代理服务器上注册了他们的空闲情况和 IP 地址。用户 A 发起此呼叫,告诉 SIP 代理服务器要联系用户 B。然后,SIP 代理服务器向 SIP 注册服务器发出请求,要求提供用户 B 的 IP 地址,并收到用户 B 的 IP 地址。SIP 代理服务器转发用户 A 与用户 B 进行通信的邀请信息(使用 SDP),包括用户 A 要使用的媒体。用户 B 通知 SIP 代理服务器可以接受用户 A 的邀请,且已做好接收消息的准备。SIP 代理服务器将此消息传达给用户 A,从而建立 SIP 会话。然后,用户创建一个点到点 RTP 连接,实现用户间的交互通信。
1.呼叫用户 B
2.查询捻没?B 在哪里??br> 3.响应捻没?B 的 SIP 地址?br> 4.挚�顶呼叫
5. 响应
6. 响应
7. 多媒体通道已建立
返回页首
在不同的域中建立 SIP 会话
本情景与第一种情景的不同之处如下。用户 A 邀请正在使用多媒体手持设备的用户 B 进行 SIP 会话时,域 A 中的 SIP 代理服务器辨别出用户 B 不在同一域中。然后,SIP 代理服务器在 SIP 重定向服务器上查询用户 B 的 IP 地址。SIP 重定向服务器既可在域 A 中,也可在域 B 中,也可既在域 A 中又在域 B 中。SIP 重定向服务器将用户 B 的联系信息反馈给 SIP 代理服务器,该服务器再将 SIP 会话邀请信息转发给域 B 中的 SIP 代理服务器。域 B 中的 SIP 代理服务器将用户 A 的邀请信息发送给用户 B。用户 B 再沿邀请信息经由的同一路径转发接受邀请的信息。
1. 呼叫用户 B 2. 询问撑胰绾谓油ㄓ?B 中的用户 B?? 3. 响应挚�砜刂破鞯挠虻刂窋 4. 挚�顶呼叫域 B 的 SIP 代理 5. 查询捻没?B 在哪里?? 6. 用户 B 的地址 7. 代理呼叫 8. 响应 9. 响应 10.响应 11.多媒体通道已建立
无缝、灵活、可扩展:展望 SIP 未来
SIP 能够连接使用任何 IP 网络(有线 LAN 和 WAN、公共 Internet 骨干网、移动 2.5G、3G 和 Wi-Fi)和任何 IP 设备(电话、PC、PDA、移动手持设备)的用户,从而出现了众多利润丰厚的新商机,改进了企业和用户的通信方式。基于 SIP 的应用(如 VOIP、多媒体会议、push-to-talk(按键通话)、定位服务、在线信息和 IM)即使单独使用,也会为服务提供商、ISV、网络设备供应商和开发商提供许多新的商机。不过,SIP 的根本价值在于它能够将这些功能组合起来,形成各种更大规模的无缝通信服务。
使用 SIP,服务提供商及其合作伙伴可以定制和提供基于 SIP 的组合服务,使用户可以在单个通信会话中使用会议、Web 控制、在线信息、IM 等服务。实际上,服务提供商可以创建一个满足多个最终用户需求的灵活应用程序组合,而不是安装和支持依赖于终端设备有限特定功能或类型的单一分散的应用程序。
通过在单一、开放的标准 SIP 应用架构下合并基于 IP 的通信服务,服务提供商可以大大降低为用户设计和部署基于 IP 的新的创新性托管服务的成本。它是 SIP 可扩展性促进本行业和市场发展的强大动力,是我们所有人的希望所在。
G. TCP协议解析
主要特点:面向连接、面向字节流、全双工通信、通信可靠。
优缺点:
应用场景:要求通信数据可靠时,即 数据要准确无误地传递给对方。如:传输文件:HTTP、HTTPS、FTP等协议;传输邮件:POP、SMTP等协议
ps:首部的前 20 个字节固定,后面有 4n 字节根据需要增加。故 TCP首部最小长度 = 20字节(最大60个字节)。
TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
重要字段:
客户端与服务器来回共发送三个TCP报文段来建立运输连接,三个TCP报文段分别为:
(1)客户端A向服务器B发送的TCP请求报段“SYN=1,seq=x”;
(2)服务器B向客户端A发送的TCP确认报文段“SYN=1,ACK=1,seq=y,ack=x+1”;
(3)客户端A向服务器B发送的TCP确认报文段“ACK=1,seq=x+1,ack=y+1”。
ps:在建立TCP连接之前,客户端和服务器都处于关闭状态(CLOSED),直到客户端主动打开连接,服务器才被动打开连接(处于监听状态 = LISTEN),等待客户端的请求。
TCP 协议是一个面向连接的、安全可靠的传输层协议,三次握手的机制是为了保证能建立一个安全可靠的连接。
通过上述三次握手, 双方确认自己与对方的发送与接收是正常的,就建立起一条TCP连接,即可传送应用层数据 。ps:因 TCP提供的是全双工通信,故通信双方的应用进程在任何时候都能发送数据;三次握手期间,任何1次未收到对面的回复,则都会重发。
为什么两次握手不行呢 ?
结论:防止服务器接收了 早已经失效的连接请求报文 ,服务器同意连接,从而一直等待客户端请求, 最终导致形成死锁、浪费资源 。
ps:SYN洪泛攻击:(具体见下文)
为什么不需要四次握手呢 ?
SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK确认序号标志消息响应。这样在客户机和服务器之间才能建立起可靠的 TCP 连接,数据才可以在客户机和服务器之间传递。
如何来解决半连接攻击?
如何来解决全连接攻击?
请注意 ,现在 TCP 连接还没有释放掉。必须经过 时间等待计时器 设置的时间 2MSL(MSL:最长报文段寿命)后,客户端才能进入到 CLOSED 状态,然后撤销传输控制块,结束这次 TCP 连接。当然如果服务器一收到 客户端的确认就进入 CLOSED 状态,然后撤销传输控制块。所以在释放连接时,服务器结束 TCP 连接的时间要早于客户端。
TCP是全双工的连接,必须两端同时关闭连接,连接才算真正关闭。 简言之,客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器才会发送 FIN 连接释放报文,对方确认后就完全关闭了TCP连接。
举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
ps:设想这样一个情景: 客户端已主动与服务器建立了 TCP 连接。但后来客户端的主机突然发生故障。 显然,服务器以后就不能再收到客户端发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就需要使用 TCP的保活计时器 。基本原理:
tcp11种状态及变迁其实基本包含在正常的三次握手和四次挥手中,除开CLOSING。
正常的三次握手包括4中状态变迁:
服务器打开监听(LISTEN)->客户端先发起SYN主动连接标识->服务器回复SYN及ACK确认->客户端再确认即三次握手TCP连接成功。这里边涉及四种状态及变迁:
正常的四次握手包含6种tcp状态变迁,如主动发起关闭方为客户端:
客户端发送FIN进入FIN_WAIT1 -> 服务器发送ACK确认并进入CLOSE_WAIT(被动关闭)状态->客户端收到ACK确认后进入FIN_WAIT2状态 -> 服务器再发送FIN进入LAST_ACK状态 -> 客户端收到服务器的FIN后发送ACK确认进入TIME_WAIT状态 -> 服务器收到ACK确认后进入CLOSED状态断开连接 -> 客户端在等待2MSL的时间如果期间没有收到服务器的相关包,则进入CLOSED状态断开连接。
CLOSING状态 :连接断开期间,一般是客户端发送一个FIN,然后服务器回复一个ACK,然后服务器发送完数据后再回复一个FIN,当客户端和服务器同时接受到FIN时,客户端和服务器处于CLOSING状态,也就是此时双方都正在关闭同一个连接。
在进入CLOSING状态后,只要收到了对方对自己发送的FIN的ACK,收到FIN的ACK确认就进入TIME_WAIT状态,因此,如果RTT(Round Trip Time TCP包的往返延时)处在一个可接受的范围内,发出的FIN会很快被ACK从而进入到TIME_WAIT状态,CLOSING状态持续的时间就特别短,因此很难看到这种状态。
我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。IP协议虽然能把数据报文送到目的主机, 但是并没有交付给主机的具体应用进程 。而 端到端的通信才应该是应用进程之间的通信 。
应用场景 :UDP协议比TCP协议的效率更高,TCP协议比UDP协议更加安全可靠。
下面主要对 数据传输出现错误/无应答/堵塞/超时/重复 等问题。
注意:TCP丢包:TCP是基于不可靠的网路实现可靠传输,肯定会存在丢包问题。如果在通信过程中,发现缺少数据或者丢包,那边么 最大的可能性是程序发送过程或者接受过程中出现问题。
总结:为了满足TCP协议不丢包,即保证可靠传输,规定如下:
注意:TCP丢包有三方面的原因,一是网络的传输质量不好,二是安全策略,三是服务器性能瓶颈
先理解2个基础概念:发送窗口、接收窗口
工作原理:
注意点:
关于滑动窗口的知识点:
滑动窗口中的数据类型:
ARQ解决的问题:出现差错时,让发送方重传差错数据:即 出错重传
类型:
流量控制和拥塞控制解决的问题:当接收方来不及接收收到的数据时,可通知发送方降低发送数据的效率:即 速度匹配
流量控制 :
注意:
拥塞控制 :
慢开始与拥塞避免 :
快重传和快恢复 :
补充:流量控制和拥塞控制的区别
什么情况造成TCP粘包和拆包?
解决TCP粘包和拆包的方法:
传输层无法保证数据的可靠传输 ,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
最简单的方式是在应用层模仿传输层TCP的可靠性传输。 下面不考虑拥塞处理,可靠UDP的简单设计。
https://www.jianshu.com/p/65605622234b
http://www.open-open.com/lib/view/open1517213611158.html
https://blog.csdn.net/dangzhangjing97/article/details/81008836
https://blog.csdn.net/qq_30108237/article/details/107057946
https://www.jianshu.com/p/6c73a4585eba