参考视频:网络协议 TCP/IP 视频教程全集(23P)| 14 小时从入门到精通
七层模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
运行FTP的两台主机
通过路由器连接的两个网络
下图可以说明TCP在不可靠的IP层上提供一个可靠的传输
首先IP层只负责尽量把数据从源端送到目的端,并不保证可靠性。如果数据丢包,类比与快递丢件,买家会找卖家协商解决,比如重传,TCP重传机制保证了数据就算丢包也能重写传输,保证让目的端收到,确保了可靠性。因此TCP在不可靠的IP层上提供一个可靠的传输
每个首部都会有一定的位数标识紧接着的下一个头部是什么
ifconfig
和netstat
最后一个字段是任选项,是数据报中的一个可变长的可选信息,目前,这些任选项定义如下:
这些选项很少被使用,并非所有的主机和路由器都支持这些选项,选项字段一直都是以32bit作为界限,再必要的时候插入值0的填充字节。这样就保证IP首部始终是32bit的整数倍(首部长度字段所要求的)
源地址和目的地址在同一个网络
源地址和目的地址在不同一个网络
例子
通过ftp badi
ARP高效运行的关键时由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起
查看缓存arp -a
在以太网上解析IP地址时,ARP请求和应答分组的格式如下,(ARP可以用于其他类型的网络,可以解析IP地址以外的地址。紧跟着帧类型字段的前四个字段指定了最后四个字段的类型和长度)
两个作用:
a:b:c:d:e:f
发送来重复的IP地址。这样就可以警告系统管理员,某个系统又不正确的设置(ARP源和目的都为自己的ARP请求)0 0 ping应答
8 0 ping请求
TYPE | CODE | Description | Query | Error |
0 | 0 | Echo Reply——回显应答(Ping应答) | x | |
3 | 0 | Network Unreachable——网络不可达 | x | |
3 | 1 | Host Unreachable——主机不可达 | x | |
3 | 2 | Protocol Unreachable——协议不可达 | x | |
3 | 3 | Port Unreachable——端口不可达 | x | |
3 | 4 | Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 | x | |
3 | 5 | Source routing failed——源站选路失败 | x | |
3 | 6 | Destination network unknown——目的网络未知 | x | |
3 | 7 | Destination host unknown——目的主机未知 | x | |
3 | 8 | Source host isolated (obsolete)——源主机被隔离(作废不用) | x | |
3 | 9 | Destination network administratively prohibited——目的网络被强制禁止 | x | |
3 | 10 | Destination host administratively prohibited——目的主机被强制禁止 | x | |
3 | 11 | Network unreachable for TOS——由于服务类型TOS,网络不可达 | x | |
3 | 12 | Host unreachable for TOS——由于服务类型TOS,主机不可达 | x | |
3 | 13 | Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 | x | |
3 | 14 | Host precedence violation——主机越权 | x | |
3 | 15 | Precedence cutoff in effect——优先中止生效 | x | |
4 | 0 | Source quench——源端被关闭(基本流控制) | ||
5 | 0 | Redirect for network——对网络重定向 | ||
5 | 1 | Redirect for host——对主机重定向 | ||
5 | 2 | Redirect for TOS and network——对服务类型和网络重定向 | ||
5 | 3 | Redirect for TOS and host——对服务类型和主机重定向 | ||
8 | 0 | Echo request——回显请求(Ping请求) | x | |
9 | 0 | Router advertisement——路由器通告 | ||
10 | 0 | Route solicitation——路由器请求 | ||
11 | 0 | TTL equals 0 during transit——传输期间生存时间为0 | x | |
11 | 1 | TTL equals 0 during reassembly——在数据报组装期间生存时间为0 | x | |
12 | 0 | IP header bad (catchall error)——坏的IP首部(包括各种差错) | x | |
12 | 1 | Required options missing——缺少必需的选项 | x | |
13 | 0 | Timestamp request (obsolete)——时间戳请求(作废不用) | x | |
14 | Timestamp reply (obsolete)——时间戳应答(作废不用) | x | ||
15 | 0 | Information request (obsolete)——信息请求(作废不用) | x | |
16 | 0 | Information reply (obsolete)——信息应答(作废不用) | x | |
17 | 0 | Address mask request——地址掩码请求 | x | |
18 | 0 | Address mask reply——地址掩码应答 |
什么情况不会导致差错报文
这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴
为什么不用IP记录路径选项
源站选路(source routing)的思想是由发送者指定路由。它可以采用以下两种形式:
•严格的源路由选择。发送端指明I P数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个"源站路由失败"的I C M P差错报文。
•宽松的源站选路。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。
这个格式与记录路由选项格式基本一致。不同之处是,对于源站选路,我们必须在发送I P数据报前填充I P地址清单;而对于记录路由选项,我们需要为IP地址清单分配并清空一些空间,并让路由器填充该清单中的各项。同时,对于源站选路,只要为所需要的IP地址数分配空间并进行初始化,通常其教量小于9。而对于记录路由选项来说,必须尽可能地分配空间,以达到9个地址.
对于宽松的源站选路来说,cod e字段的值是0x83;而对于严格的源站选路,其值为0 x 8 9。1 e n和p t r字段与记录路由选项所描述的一样。
可以使用宽松源站路由+traceroute实现双向trace
netstat -r
命令采显示路由表.我们列出了IP搜索路由表的几个步骤:
ping不通使用debug ip icmp
PC启动服务才能转发,二层交换机不转发,三层交换机启动ip routing功能才能转发
只有在源端没有ip routing才生效
查询类:DNS
数据传输:TFTP
语音视频流
端口号表示发送进程和接收进程
TC端口号与UDP端口号是相互独立的。(rsh和syslog=514)
尽管相互独立,如果T C P和U D P同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。(dns )
UDP长度字段指的是UDP首部和UD数据的字节长度.该字段的最小值为8字节
大多数的系统在某一时刻只允许一个程序端点与某个本地IP地址及UDP端口号相关联。当目的地为该IP地址及端口号的UDP数据报到达主机时,就复制一份传给该端点。
TCP提供一种面向连接的、可靠的字节流服务。
面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。
在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。
TCP通过下列方式来提供可靠性:
两个应用程序通过TCP连接交换8bit字节构成的字节流。 TCP不在字节流中插入记录标识符。我们将这称为字节流服务(byte stream service)。如果一方的应用程序先传10字节又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4次接收这80个字节,每次接收20字节。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。
另外,TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBC DIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。
每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。
一个IP地址和一个端口号也称为一个插口(socket)插口对(socketpair)
序号用来标识从TCP发端向TCP收端发送的数据字节流,它标识在这个报文段中的的第一个数据字节的序号。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32bit的无符号数,序号到达2的32次方减1后又从0开始。SYN标志消耗了一个序号(将在下章详细介绍如何建立和终止连接,届时我们将看到FIN标志也要占用一个序号)。
确认序号应当是上次已成功收到数据字节序号加1只有ACK标志(下面介绍)为1时确认序号字段才有效。
发送ACK无需占用任何序号,因为32bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置,AC K标志也总是被设置为1。
TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号
TCP可以表述为一个没有选择确认(现已支持选择性确认)或否认的滑动窗口协议(滑动窗口协议用于数据传输将在20.3节介绍)。我们说TCP缺少选择确认是因为TCP首部中的确认序号表示发方已成功收到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。例如,如果11024字节已经成功收到,下一报文段中包含序号从20493072的字节,收端并不能确认这个新的报文段。它所能做的就是发回一个确认序号为1025的ACK。它也无法对一个报文段进行否认。例如,如果收到包含1025~2048字节的报文段,但它的检验和错,TCP接收端所能做的就是发回一个确认序号为1025的ACK。
首部长度给出首部中32bit字的数目。需要这个值是因为任选字段的长度是可变的。这个字段占4bit,因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节。
在TCP首部中有6个标志比特。它们中的多个可同时被设置为1。
建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(half-c lose)造成的。既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN它必须通知应用层另一端几经终止了那个方向的数据传送。发送FIN通常是应用层进行关闭的结果。
收到一个FIN只意味着在这一方向上没有数据流动。一个TCP连接在收到一个FIN后仍能发送数据。而这对利用半关闭的应用来说是可能的,尽管在实际应用中只有很少的TCP应用程序这样做。
首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。通常一方完成主动关闭而另一方完成被动关闭。
发送FIN将导致应用程序关闭它们的连接,这些FIN的ACK是由TCP软件自动产生。
在这个输出中有趣的一点是客户间隔多长时间发送一个SYN试图建立连接。第2个SYN与第1个的间隔是5.8秒,而第3个与第2个的间隔是24秒
作为一个附注,这个例子是运行38分钟后客户机启动tcp连接。这对应初始序号为291008001(约为38x60x64000x2)。我们曾经介绍过使用典型的伯克利实现版的系统将初始序号初始化为1然后每隔05秒就增加64000。另外,因为这是系统启动后的第一个TCP连接,因此客户的端口号是1024。
时间差值是76秒。大多数伯克利系统将建立一个新连接的最长时间限制为75秒。我们将在21.4节看到由客户发出的第3个分组大约在162529超时,客户在它第3个分组发出后48秒而不是75秒后放弃连接。
上个例子中一个令人困惑的问题是第一次超时时间为5.8秒,接近6秒,但不准确,相比之下第二个超时时间几乎准确地为24秒。运行十多次测试,发现第一次超时时间在5.59秒~5.93秒之间变化。然而,第二次超时时间则总是24.00秒(精确到小数点后面两位)。
sun%rsh bsdi sort
TIMEWAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(MaximumSegmentLifetime)。它是任何报文段被丢弃前在网络内的最长时间。
RFC793[Postel1981c]指出MSL为2分钟。然而,实现中的常用值是30秒,1分钟,或2
分钟。
对一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIMEWAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)。
这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口(处于timewait的那一端(客户/服务器)的IP地址和端口号)不能再被使用。这个连接只能在2MSL结束后才能再被使用。
在连接处于2MSL等待时,任何迟到的报文段将被丢弃。因为处于2MSL等待的、由该插口对(socketpair)定义的连接在这段时间内不能被再用,因此当要建立一个有效的连接时,来自该连接的一个较早替身(incarnation)的迟到报文段作为新连接的一部分不可能不被曲解
客户执行主动关闭并进入TIMEWAIT是正常的。服务器通常执行被动关闭,不会进入TIME WAIT状态。这暗示如果我们终止一个客户程序,并立即重新启动这个客户程序,则这个新客户程序将不能重用相同的本地端口。这不会带来什么问题,因为客户使用本地端口,而并不关心这个端口号是什么。
对于服务器,情况就有所不同,因为服务器使用知名端口。如果我们终止一个已经建立连接的服务器程序,并试图立即重新启动这个服务器程序,服务器程序将不能把它的这个知名端口赋值给它的端点,因为那个端口是处于2MSL连接的一部分。在重新启动服务器程序前,它需要在1~4分钟。
我们已经介绍了TCP首部中的RST比特是用于“复位”的。(收到RST比特,链接直接断掉)
一般说来,无论何时一个报文段发往基准的连接(referenced connection)出现错误,TCP都会发出一个复位报文段(这里提到的“基准的连接”是指由目的IP地址和目的端口号以及源IP地址和源端口号指明的连接)。
到不存在的端口的链接请求
终止一个连接的正常方式是一方发送FIN。有时这也称为有序释放(orderlyrelease)。
有可能发送一个复位报文段而不是FIN来中途释放一个连接。有时称这为异常释放(abortive release)。
异常终止一个连接对应用程序来说有两个优点:(1)丢弃任何待发数据并立即发送复位报文段(快);(2)RS T的接收方会区分另一端执行的是异常关闭还是正常关闭。应用程序使用的API必须提供产生异常关闭而不是正常关闭的手段。
检测半打开链接(服务器重启,发送reset)
原端口号,目的端口号,协议号是,发送时间一样
Nagle算法中:
1)称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
2)当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
3)当右边沿向左移动时,我们称之为窗口收缩。HostRequirements RFC强烈建议不要使用这种方式。
左边沿移动到ACK确定的序号位置
右边沿移动到ACK确定的序号位置+winsize
4)发送方不必发送一个全窗口大小的数据。
5)来自接收方的一个报文段确认数据并把窗口左边沿向右滑动。这是因为窗口的大小是相对于确认序号的。
6正如从报文段7到报文段8中变化的那样,窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。
7)接收方在发送一个ACK前不必等待窗口被填满。在前面我们看到许多实现每收到两个报文段就会发送一个ACK。
在每一个TCP例子中,我们都看到了PUSH标志,但一直没有介绍它的用途发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。这里的数据包括与PUSH一起传送的数据以及接收方TCP已经为接收进程收到的其他数据。
capacity(bit)=bandwidth(b/s)xround-triptime(s)
高速电路到低速电路
汇聚电路
TCP提供了"紧急方式(urgentmode)”,它使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据流中。另一端被通知这个紧急数据已被放置在普通数据流中,由接收方决定如何处理。可以通过设置TC P首部(图17-2)中的两个字段来发出这种从一端到另一端的紧急数据已经被放置在数据流中的通知。URG比特被置1,并且一个16bit的紧急指针被置为一个正的偏移量,该偏移量必预与TCP首部中的序号字段相加,以便得出紧急数据的最后一个字节的序号。
TCP必须通知接收进程,已接收到一个紧急数据指针。接收进程读取数据流并被告知何时碰到紧急数据指针。只要从接收方当前读取位置到紧急数据指针之间有数据存在,就认为应用程序处于“紧急方式”。在紧急指针通过之后,应用程序便转回到正常方式。
TCP本身对紧急数据知之其少。没有办法指明紧急数据从数据流的何处开始。 TCP通过连接传送的唯一信息就是紧急万式已经开始(TCP首部中的URG比特)和指向紧急数据最后一个字节的指针。其他的事情留给应用程序去处理。
紧急方式有什么作用呢?两个最常见的例子是Telnet和Rlogin。当交互用户键入中断键时,我们在第26章将看到使用紧急方式来完成这个功能的例子。另一个例子是FTP,当交互用户放弃一个文件的传输时。
Telnet和Rlogin从服务器到客户使用紧急万式是因为在这个方向上的数据流很可能要被客户的TCP停止(也即,它通告了一个大小为0的窗口)。但是如果服务器进程进入了紧急方式,尽管它不能够发送任何数据,服务器TCP也会立即发送紧急指针和UR G标志。当客户TCP接收到这个通知时就会通知客户进程,于是客户可以从服务器读取其输入、打开窗口并使数据流动。
例子
该图还可以让我们观察TCP是如何对应用进程写的数据进行重新分组化的,体现了TCP传送的是字节流。当进入紧急方式时待输出的1个字节是与在缓存中的后面1023个字节一同发送的。下一个报文段也包含1024字节的数据,而最后一个报文段则只包含一个字节
TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送端发送数据时时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到接收方确认,发送端就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和重传的间隔。
对每个连接,TCP管理4个不同的定时器
1)重传定时器用于当发送一个数据报文时,在规定时间内,发送方需要收到另一端发出的接收报文确认。在本章我们将详细讨论这个定时器以及一些相关的问题,如拥塞避免。
2)坚持(persis))定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
3)保活(keepalive)定时器用于检测一个空闲连接的另一端是否依然还保持连接。
4)2MSL定时器测量一个连接处于TIMEWAIT状态的时间。
检查连续重传之间不同的时间差,它们取整后分别为1、3、6、12、24、48和多个64秒
当第一次发送后所设置的超时时间实际上为1.5秒
首次分组传输(第6行,24.480秒)与复位信号传输(第19行566.488秒)之间的时间差约为9分钟。
Solaris2.2允许管理者改变这个时间(E.4节中的tcp_ip ortin erval变量),且其默认值为2分钟,而不是常用的9分钟。
意义:TCP超时与重传中最重要的部分就是对一个TCP连接的往返时间(RTT)的测量由于网络状况的多变性,RTT时间经常会发生变化,TCP应该跟踪这些变化并相应地改变超时重传时间。
RFC793计算方法
TCP使用低通过滤器来更新一个被平滑的RTT值(记为0)。 R←&R+(1-&)M(M当前测出的RTT)
&是一个推荐值为0.9的平滑因子。每次进行新测量的时候,这个被平滑的RTT将得到更新。每个新估计的90%来自前一个估计,而10%则取自新的测量。
该算法在给定这个随RTT的变化而变化的平滑因子的条件下,RFC793推荐的重传超时时间RTO(RetransmissionTimeOut)的值应该设置为 RTO=R@
这里的**@是一个推荐值为2的时延离散因子**。
在RTT变化范围很大时,使用这个方法无法跟上这种变化,从而引起不必要的重传。正如Jacobson记述的那样,当网络已经处于饱和状态时,不必要的重传会增加网络的负载,对网络而言这就像在火上浇油一样。
除了被平滑的RTT,还需要跟踪RTT的方差,这样,在往返时间变化起伏很大的情况下,基于均值和方差来计算RTO,比只用均值的常数倍数来计算RTO提供更好的对网络传送数据状况的表示方法
M为当前测出的RTT,A为之前的RTT
A是被平滑的RTT(均值的估计器)而D则是被平滑的均值偏差。Err是刚得到的测量结果与当前的RTT估计器之差。A和D均被用于计算下一个重传时间(RTO)。增量g起平均作用,取为1/8(0.125)。偏差的增益是h,取值为0.25。当RTT变化时,较大的偏差增益将使RTO快速上升
Jacobson阐述了一种使用整数运算来计算这些公式的方法,并被许多实现所采用(这也就是g,h和倍数4均是2的乘方的一个原因,这样一来,计算只需要通过移位操作而不需要乘、除运算来完成)。
两种测量方法比较
Jacobson计算RTO的公式依赖于被平滑的RTT和被平滑的均值偏差,而 RFC793方法则使用了被平滑的RTT的一个倍数。
在一个分组重传时会产生这样一个问题:假定一个分组被发送。当超时发生时,RTO正进行指数退避,分组以更长的RTO进行重传,然后收到一个确认。那么这个ACK是针对第一个分组的还是针对第二个分组呢?
Karn算法
当一个超时和重传发生时,在重传数据的确认最后到达之前,不能更新RTT估计器
大多数源于伯克利的TCP实现在任何时候对每个连接仅测量一次RTT值。在发送一个报文段时,如果给定连接的定时器已经被使用,则该报文段不被计时。
对每个连接而言,除了这个滴答计数器,报文段中数据的起始序号也被记录下来。当收到一个包含这个序号的确认后,该定时器就被关闭。如果ACK到达时数据没有被重传(定时器没有超时),则被平滑的RTT和被平滑的均值偏差将基于这个新的测量值进行更新。
RTT估计器(平滑的RTT和平滑的均值偏差)
变量A和D被初始化为0和3秒
1.初始的重传超时
RTO=A+2D=0+2x3=6s
当超时在6秒后发生时,计算当前的RTO值为 RTO=A+4D=0+4x3=12s
2.测量到第一个RTT后重传超时时间的计算
当第1个数据报文段的ACK(如上图)到达时,经历了3个时钟滴答,A和D被初始化为 :
A=M+0.5=1.5+0.5=2
D=A/2=1
(3个时钟滴答,M取值为1.5)。
使用第1个RTT的测量结果M对估计器进行首次计算的初始值。计算的RTO值为
RTO=A+4D=2+4x1=6s
3.当第2个数据报文段的ACK到达时,经历了1个时钟滴答(0.5秒),估计器按如下更新:
Err=M-A=0.5-2=-1.5
A=A+gErr=2-0.125x1.5=1.8125
D=D+h(|Err|-D)=1+0.25x(1.5-1)=1.125
RTO=A+4D=1.8125+4x1.125=6.3125
采用上面公式计算的E1A和D的信与实际使用的定点计算方法得到结果有一些微小的差别。后一种方法得到的RTO值为6秒(而非63125秒)
有两种分组丢失的指示:超时和接收到重复的确认。
重复确认(收到新的数据,但新的数据的起始序列号都不是接收方需要的,所以不断重传ACK,收到3个重复的ACK就默认为丢包)
——使用超时作为丢包指示,需要一个好的RTT算法
拥塞避免算法是一种处理丢失分组的方法
该算法假定由于分组受到损坏引起的丢失是非常少的(远小于1%),因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞。
拥塞避免算法和慢启动算法是两个目的不同、独立的算法。当拥塞发生时,我们希望降低分组进入网络的传输速率,于是可以调用慢启动来实现这一点。在实际中这两个算法通常在一起实现。
拥塞避免和慢启动都是发送方使用的流量控制(慢启动允许一方发送连续的未经确认的分组的增加方式采用指数增加,拥塞避免允许一方发送连续的未经确认的分组的增加方式采用线性增加),而通告窗口则是接收方进行的流量控制。拥塞避免是发送方对网络可能发生拥塞的估计,而后者则与接收方分配给该连接的接收缓存大小有关。
拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh。算法的工作过程如下:
1)对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节
2)TCP发出未经确认的报文总大小不能超过cwnd和接收方通告窗口的大小。
3)当拥塞发生时(超时或收到重复确认)ssthresh被设置为当前窗口大小的一半(cwnd和接收方通告窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则cwnd被设置为1个报文段(这就是慢启动)。
4)当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免。如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。慢启动一直持续到我们回到当拥塞发生时所处位置一半时才停止(因为我们记录了在步骤3中给我们制造麻烦的窗口大小的一半,就是ssthresh),接下来执行的是拥塞避免。
慢启动算法初始设置cwnd为1个报文段,此后每收到一个确认就加1这会使窗口按指数方式增长:发送1个报文段,然后是2个,接着是4个
拥塞避免算法要求每次收到一个确认时将cwnd增加1/cwnd。与慢启动的指数增加比起来,这是一种加性增长(additiveincrease)。我们希望在一个往返时间内最多为cwnd增加1个报文段(不管在这个RTT中收到了多少个ACK),然而慢启动将根据这个往返时间中所收到的确认的个数增加cwnd。
快速重传算法:如果一连串收到3个或3个以上的重复ACK,就非常可能是一个报文段丢失了。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。
快速恢复算法:快速重传后执行的不是慢启动算法而是拥塞避免算法。
没有执行慢启动的原因是:
收到重复的ACK不仅仅告诉我们一个分组丢失了,还告诉我们一个数据包离开网络顺利的到达接收者。这是由于接收方只有在收到另一个报文段并发现这个报文不是我当前需要序号的报文才会产生重复的ACK,说明有一个报文段已经离开了网络并进入了接收方的缓存。也就是说,在收发两端之间仍然有流动的数据,而我们不想执行慢启动来突然减少数据流。
1)当收到第3个重复的ACK时,将ssthresh设置为当前拥塞窗口cwnd的一半。重传丢失的报文段。设置cwnd为ssthresh加上3倍的报文段大小
ssthresh本应立即设置为当重传发生时正在起作用的窗口大小的一半,但是在接收到重复ACK的过程中cwnd允许保持增加,这是因为每个重复的ACK表示1个报文段已离开了网络,收到3个重复的ACK,表示有3个报文离开了网络,并被接收TCP缓存了这几个报文段,正在等待所缺数据的到达)。
2)每次收到另一个重复的ACK时,cwnd增加1个报文段大小并发送1个分组。
3)当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(在第1步中设置的值)。这个ACK应该是在进行重传后的一个往返时间内对步骤1中重传的确认。另外,这个ACK也应该是对丢失的分组和收到的第1个重复的ACK之间的所有中间报文段的确认。这一步采用的是拥塞避免,因为当分组丢失时我们将当前的速率减半。
新的TCP实现在路由表项中维持许多我们在前面已经介绍过的指标。当一个TCP连接关闭时,如果已经发送了足够多的数据来获得有意义统计资料,且目的结点的路由表项不是一个默认的表项,那么下列信息就保存在路由表项中以备下次使用:被平滑的RTT、被平滑的均值偏差以及慢启动门限。所谓“足够多的数据”是指16个窗口的数据,这样就可得到16个RTT采样。
当建立一个新的连接时,不论是主动还是被动,如果该连接将要使用的路由表项已经有这些度量的值,则用这些度量来对相应的变量进行初始化。
让我们来看一下TCP是怎样处理一个给定的连接返回的ICMP的差错。TCP能够遇到的最常见的ICMP差错就是源站抑制、主机不可达和网络不可达。当前基于伯克利的实现对这些错误的处理是:
当TCP超时并重传时,它不一定要重传同样的报文段。相反,TCP允许进行重新分组而发送一个较大的报文段,这将有助于提高性能 (当然,这个较大的报文段不能够超过接收方声明的MSS)。在协议中这是允许的,因为TCP是使用字节序号而不是报文段序号来进行识别它所要发送的数据和进行确认。
ACK的传输并不可靠,也就是说,TCP不对ACK报文段进行确认,TCP只确认那些包含有数据的ACK报文段。如果报文段9丢失怎么办”?
问题:
如果一个通告窗口更新的确认丢失了,则双方就有可能一直等待下去:接收方等待接收数据(因为它已经向发送方通告了一个非0的窗口),而发送方在等待允许它继续发送数据的窗口更新。
解决方法:
为防止这种死锁情况的发生,发送方使用一个坚持定时器(persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查(windowprobe)。
计算坚持定时器时使用了普通的TCP指数退避。
在收到一个大小为0的窗口通告后的第1个(报文段14)间隔为4.949秒,下一个(报文段16)间隔是4.996秒,随后的间隔分别约为61224,48和多个60秒。
窗口探查包含一个字节的数据(序号为9217)。TCP总是允许在关闭连接前发送一个字节的数据。请注意,尽管如此,所返回的窗口为0的A CK并不是确认该字节(它们确认了包括9216在内的所有数据),因此这个字节被持续重传。被持续用来探测对端窗口的变化情况。
基于窗口的流量控制方案,如TCP所使用的,会导致一种被称为“糊涂窗口综合症SWS(SillyWindow Svndrome)”的状况。如果发生这种情况,则少量的数据将通过连接进行交换,而不是满长度的报文段。导致传输效率低下
现象:
该现象可发生在两端中的任何一端:接收方可以通告一个小的窗口(而不是一直等到有大的窗口时才通告),而发送方也可以发送少量的数据(而不是等待其他的数据以便发送一个大的报文段)
可以在任何一端采取措施避免出现糊涂窗口综合症的现象。
1)接收方不通告小窗口。通常的算法是接收方不通告这样的窗口,窗口小于一个报文段(也就是将要接收的MSS),或者窗口小于接收方缓存空间的一半,不论实际有多少。
2)发送方避免出现糊涂窗口综合症的措施是只有以下条件之一满足时才发送数据:(a)可以发送一个满长度的报文段;(b)可以发送至少是接收方通告最大窗口大小一半的报文段;©没有还未被确认的数据或者该TCP连接上禁止使用Nagle算法。
在有尚未被确认数据的情况下,Nagle算法阻止我们发送小的报文段:禁止nagle算法后,即便有未确认数据包,也可以发送数据包
如果TCP连接的双方都没有向对方发送数据,则在两个TCP模块之间不交换任何信息。
这意味着我们可以启动一个客户与服务器建立一个连接,然后离去数小时、数天、数个星期或者数月,而连接依然保持。
许多时候一个服务器希望知道客户主机是否关机或者崩溃又重新启动。许多实现提供的保活定时器可以提供这种能力。但是保活定时器并不是TCF规范中的一部分。
Host Requirements RFC提供了3个不使用保活定时器的理由:
1)在出现短暂差错的情况下,这可能会使一个非常好的连接释放掉;
2)它们耗费不必要的带宽;
(3) 在按分组计费的情况下会在互联网上花掉更多的钱。并且,许多实现提供了保活定时器。
保活定时器是一个有争论的功能。许多人认为如果需要,这个功能不应该在TCP中提供,而应该由应用程序来完成。这是应当认真对待的一些问题之一
如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个探查报文段。客户主机必须处于以下4个状态之一。
1)客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常工作的。服务器在两小时以后将保活定时器复位。如果在两个小时定时器到时间之前有应用程序的通信量通过此连接,则定时器在交换数据后的未来2小时再复位。
2)客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的 TCP都没有响应。服务器将不能够收到对探查的响应,并在75秒后超时。服务器总共发送10个这样的探查,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
3)客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。
4)客户主机正常运行,但是从服务器不可达。这与状态2相同,因为TCP不能够区分状态4与状态2之间的区别,它所能发现的就是没有收到探查的响应。
TCP的路径MTU发现按如下方式进行:在连接建立时,TCP使用输出接口 MTU或对端声明的MSS中的最小值作为起始的报文段大小。路径MTU发现不允许TCP超过对端声明的MSS。如果对端没有指定一个MSS,则默认为536.
一但选定了起始的报文段大小,在该连接上的所有被TCP发送的IP数据报都将被设置DF比特。如果某个中间路由器需要对一个设置了DF标志的数据报进行分片,它就丢弃这个数据报,并产生一个ICMP的"不能分片”差错。如果收到这个ICMP差错,TCP就减少段大小并进行重传。如果路由器产生的是一个较新的该类CMP差错,则报文携带为下一跳的MTU值。如果是一个较旧的该类ICMP差错,则必须尝试下一个可能的最小MTU。当由这个ICMP差错引起的重传发生时,拥塞窗口不需要变化*,但要启动慢启动
常规知识告诉我们较大的分组比较好[Mogul199315.28节],因为发送较少的大分组比发送较多的小分组“花费”要少(假定分组的大小不足以引起分片,否则会引起其他方面的问题)。这些减少的花费与网络(分组首部负荷)、路由器(选路的决定)和主机(协议处理和设备中断)等有关。但并非所有的人都同意这种观点[Bellovin1993]。
我们把一个连接的容量表示为
capacity(b)=bandwidth(b/s)xroundtriptime(s)
并称之为带宽时延乘积。也可称它为两端的管道大小。
当这个乘积变得越来越大时,TCP的某些局限性就会暴露出来。下图显示了多种类型的网络的某些数值。
具有大的带宽时延乘积的网络被称为长肥网络(LongFatNetwork),而一个运行在LFN上的TCP连接被称为长肥管道。
1)TCP首部中窗口大小为16bit,从而将窗口限制在65535个字节内。然而现有的网络需要一个更大的窗口来提供最大的吞吐量。后面将介绍窗口扩大选项可以解决这个问题。
2)在一个长肥网络LFN内的分组丢失会使吞吐量急剧减少。
3)我们在前面看到许多TCP实现对每个窗口的RTT仅进行一次测量。它们并不对每个报文段进行RTT测量。在一个长肥网络LFN上需要更好的RTT测量机制。我们将在后面介绍时间戳选项,它允许更多的报文段被计时,包括重传。
4)TCP对每个字节数据使用一个32bit无符号的序号来进行标识。如果在网络中有一个被延迟一段时间的报文段,它所在的连接已被释放,而一个新的连接在这两个主机之间又建立了,怎样才能防止这样的报文段再次出现呢?首先回想起IP首部中的TT L为每个IP段规定了一个生存时间的上限-255跳或255秒,看哪一个上限先达到。我们还定义了最大的报文段生存时间(MSL)作为一个实现的参数来阻止这种情况的发生。推荐的MSL的值为2分钟(给出一个240秒的2MSL),然而许多实现使用的MSL为30秒。
在长肥网络LFN上,TCP的序号会碰到一个不同的问题。由于序号空间是有限的在已经传输了4294967296个字节以后序号会被重用。如果一个包含序号N字节数据的报文段在网络上被迟延并在连接仍然有效时又出现,会发生什么情况呢?
在一个以太网上要发送如此多的数据通常需要60分钟左右,因此不会发生这种情况。但是在带宽增加时,这个时间将会减少:一个T3的电话线(45Mb/s)在12分钟内会发生回绕,FDDI(100Mb/s)为5分钟,而一个千兆比网络(1000Mb/s)则为34秒。这时问题不再是带宽时延乘积,而在于带宽本身。
一种对付这种情况的办法:使用TCP的时间戳选项的PAWS
(Protection Against Wrapped Sequence numbers)算法(保护回绕的序号)
假定我们正在使用窗口扩大选项,发送移位记数为s,而接收移位记数则为R。于是我们从另一端收到的每一个16bit的通告窗口将被左移R位以获得实际的通告窗口大小。每次当我们向对方发送一个窗口通告的时候,我们将实际的32bit窗口大小右移s比特,然后用它来替换TCP首部中的16bit的值。
TCP根据接收缓存的大小自动选择移位计数。这个大小是由系统设置的,但是通常向应用进程提供了修改途径
时间戳选项使发送方在每个报文段中放置一个时间戳值。接收方在确认中返回这个数值,从而允许发送方为每一个收到的ACK计算RTT。我们提到过目前许多实现为每一个窗口只计算一个RTT,对于包含8个报文段的窗口而言这是正确的。然而,较大的窗口大小则需要进行更好的RTT计算。
发送方在第1个字段中放置一个32bit的值,接收方在应答字段中回显这个数值包含这个选项的TCP首部长度将从正常的20字节增加为32字节,时间戳是一个单调递增的值。由于接收方只需要回显收到的内容,因此不需要关注时间戳单元是什么。这个选项不需要在两个主机之间进行任何形式的时钟同步。
为了减少任一端所维持的状态数量,对于每个连接只保持一个时间戳的数值。选择何时更新这个数值的算法非常简单:
1)TCP跟踪下一个ACK中将要发送的时间戳的值(一个名为tsrecen的变量以及最后发送的ACK中的确认序号(一个名为lastack的变量)。这个序号就是接收方期望的序号。
2)当一个包含有字节号lastack的报文段到达时,则该报文段中的时间戳被保存在tsrecent中。
3)无论何时发送一个时间戳选项,tsrecent就作为时间戳回显应答字段被发送,而序号字段被保存在lastack中。
考虑一个使用窗口扩大选项的TCP连接,其最大可能的窗口大小为1干兆字节下图显示了在传输6千兆字节的数据时,在两个主机之间可能的数据流。
假定一个报文段在时间B丢失并被重传。还假定这个丢失的报文段在时间E重新出现。这个时候回绕序号出现
使用时间戳可以避免这种情况。接收方将时间戳视为序列号的一个32bit的扩展。由于在时间E重新出现的报文段的时间戳为2,这比最近有效的时间戳小(5或6),因此PAWS算法将其丢弃。
PAWS算法不需要在发送方和接收方之间进行任何形式的时间同步。接收方所需要的就是时间戳的值应该单调递增,并且每个窗口至少增加1。
TCP提供的是一种虚电路方式的运输服务。一个连接的生存时间包括三个不同的阶段:建立、数据传输和终止。这种虚电路服务非常适合诸如远程注册和文件传输之类的应用。
一个事务(transaction)就是符合下面这些特征的一个客户请求及其随后的服务器响应。
1)应该避免连接建立和连接终止的开销,在可能的时候,发送一个请求分组并接收一个应答分组。
2)等待时间应当减少到等于RTT与SPT之和。其中RTT(Round-Trip Time)为往返时间,而SPT(ServerProcessingTime)则是服务器处理请求的时间。
3)服务器应当能够检测出重复的请求,并且当收到一个重复的请求时不重新处理事务(避免重新处理意味着服务器不必再次处理请求,而是返回保存的与该请求对应的应答)
TCP提供了过多的事务特征,而UDP提供的则不够。通常应用程序使用UDP来构造(避免TCP连接的开销),而许多需要的特征(如动态超时和重传、拥塞避免等)被放置在应用层,一遍又一遍的重新设计和实现。
一个较好的解决方法是提供一个能够提供足够多的事务处理功能的运输层。我们称这样的事务协议为T/TCP。
TCP为处理事务而需要进行的两个改动是避免三次握手和缩短WAITTIME状态 。T/TCP通过使用加速打开来避免三次握手:
1)它为打开的连接指定一个32bit的连接计数CC(ConnectionCount),无论主动打开还是被动打开。一个主机的CC值从一个全局计数器中获得,该计数器每次被使用时加1
2)在两个使用T/TCP的主机之间的每一个报文段都包括一个新的TCP选项CC。
3)一个服务器维持一个缓存,该缓存保留每个主机上一次的CC值,这些值从来自这个主机的一个可接受的SYN报文段中获得。
4)当在一个开始的SYN中收到一个CC选项的时候,接收方比较收到的值与为该发送方缓存的CC值。如果接收到的CC比缓存的大,则该SYN是新的,报文没中的任何数据被传递给接收应用进程(服务器)。这个连接被称为半同步。如果接收的CC比缓存的小,或者接收主机上没有对应这个客户的缓存CC,则执行正常的TCP三次握手过程。
5)为响应一个开始的SYN,带有SYN和ACK的报文段在另一个被称为CCECHO的选项中回显所接收到的CC值。
通过使用这些特征,最小的事务序列是交换三个报文段:
1)由一个主动打开引起的客户到服务器:客户的SYN、客户的数据(请求)、客户的 FIN以及客户的CC。当被动的服务器TCP接收到这个报文段的时候,如果客户的CC比为这个客户缓存的CC要大,则客户的数据被传送给服务器应用程序进行处理。小或没有建立新的TCP链接
2)服务器到客户:服务器的SYN、服务器的数据(应答)、服务器的FIN、对客户的 FIN的ACK、服务器的CC以及客户的CC的CCECHO。由于TCP的确认是累积的这个对客户的FIN的ACK也对客户的SYN、数据及FIN进行了确认。当客户TCP接收到这个报文段,就将其传送给客户应用进程。
3)客户到服务器:对服务器的FIN的ACK,它也确认了服务器的SYN、数据和FIN。
T/TCP的特征中吸引人的地方在于它对现有协议进行了最小的修改,同时又兼容了现有的实现。它还利用了TCP中现有的工程特征(动态超时和重传、拥塞避免等),而不是迫使应用进程来处理这些问题
TCP吞吐率测试情况:
在FDDI(100Mb/s)网络上Schryver1993指出三个商业厂家已经演示了在FDDI上的TCP在80Mb/s~90Mb/s之间。[Borman19921]报告说两个Gray Y-MP计算机在一个800Mb/s的HIPPI通道上最大值为781Mb/s,而运行在一个GrayY-MP上的使用环回接口的两个进程间的速率为907Mb/s。
TCP吞吐率限制:
1)不能比最慢的链路运行得更快。
2)不能比最慢的机器的内存运行得更快
3)不能够比由接收方提供的窗口大小除以往返时间所得结果运行得更快(这就是带宽时延来积公式,使用窗口大小作为带宽时延来积,就得到带宽值)
TCP的最高运行速率的真正上限是由TCP的窗口大小和光速决定的。
数据传输主流协议
两个信道
FTP两个模式
第二信道是服务器发起的:主动模式
第二信道是客户端发起的:被动模式
PORT a,b,c,d,e,f a,b,c,d为客户端ip,e * 256 + f 为建立数据信道的客户端端口
更安全,端口号都随机。一般使用被动模式
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制路由器的方法。
1交互式TCP数据流的特点(键入数据不是直接由键盘打印上去的,直接由键盘输入到网络,然后对面回写过来的)
2.安全问题(替代协议SSH)(明文不安全)
任何一条命令不是在一个包里出现的,而是在一个流里很多包里出现的
HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从 WWW服务器传输超文本到本地浏览器的传送协议,是一个客户端和服务器端请求和应答的标准(TCP)。超文本传输协议是互联网上应用最为广泛的一种网络协议所有的WWW文件都必须遵守这个标准。
主要特点:哑服务器
HTTP为瞬时协议,不是长期存在的,获取了就没有了,是无状态。使用Cookie记录状态,使得连接看起来像是一直存在没有端口。(用于记录登录)
你请求一个网页,网页上有很多数据也需要请求,会产生很多瞬时连接
HTTP RFC标准命令
get获取响应头+响应体(数据部分)
head获取头部信息
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输
传输协议 TCP/25
SMTP服务器基于域名服务DNS中计划收件人的域名来路由电子邮件。SMTP服务器基于DNS中的MX记录来路由电子邮件,MX记录注册了域名和相关的SMTP中继主机,属于该域的电子邮件都应向该主机发送。若SMTP服务器mail.abc.com收到一封信要发到[email protected],则执行以下过程:
(1)Sendmail请求DNS给出主机sh.abc.com的CNAME记录,如有,假若CNAME(别名记录)到shmail.abc.com,则再次请求 shmail.abc.com的CNAME记录,直到没有为止。
(2)假定被CNAME到shmail.abc.com,然后sendmail请求@abc.com域的DNS给出shmail.abc.com的MX记录(邮件路由及记录), shmail MX 5 shmail.abc.com 10 shmail2.abc.com。
(3)Sendmail组合请求DNS给出shmail.abc.com的A记录(主机名(或域名)对应的IP地址记录),即IP地址,若返回值为1.2.3.4(假设值)。
(4)Sendmail与1234连接,传送这封给[email protected]的信到1234这台服务器的SMTP后台程序。
SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器:二是从某一个服务器传输到另一个服务器。SMTP也是个请求响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束响应包括一个表示返回状态的三位数字代码。SMTP在TCP协议25号端口监听连续请求连接和发送过程如下
(1)建立TCP连接。
(2)客户端发送**EHLO 电子邮件服务器(如smtp.163.com)
命令以标识发件人自己的身份**,(AUTH LOGIN
登录)然后客户端发送MAIL FROM:<发件人邮箱>
命令;服务器端正希望以OK作为响应,表明准备接收。
(3)客户端发送**RCPT FROM:<收件人邮箱>
命令**,以标识该电子邮件的计划接收人,可以有多个RCPT行;服务器端则表示是否愿意为收件人接收邮件。
(4)协商结束,发送邮件,用命令DATA发送。
(5)以**“.”
号表示结束输入内容一起发送出去**,结束此次发送,用QUIT命令退出。
例子
POP3,全名为“PostOffice Protocol-Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为 POP3S。
POP协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或MAC。一旦邮件发送到 PC机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。
传输协议:TCP/110
USER 用户名
PASS 密码
STAT(查看服务器状态)
LIST(罗列邮件)
RETR 序号(收ID为所选序号的邮件)
DELETE 序号(删除ID为所选序号的邮件)
QUIT (退出)
安全套接层俗称Secure Socket Layer(SSL)是由Netscape Communication于1990年开发用于保障Word WideWeb(www)通讯的安全。主要任务是提供私密性,信息完整性和身份认证。1994年改版为S5801995年改版为SSLv3.(私有标准)
Transport Layer Security(TLS)标准协议由 IETF于1999年颁布,整体来说TLS非常类似与 SSLv3,只是对SSLv3做了些增加和修改。(公有标准)
SSL是一个不依赖于平台和运用程序的协议用于保障TCP-based运用安全,SSL在TCP层和应用层之间,就像应用层连接到TCP连接的一个插口。
HTTPoverSSL:加密网页流量是设计SSL的初衷,HTTP也是第一个使用SSL保障安全的运用层协议。
当Netscape在它的Navigator里边运用HTTP over SSL的时候,它使用https://来标识HTTP over SSL,因此HTTP over SSL就以HTTPS的格式被我们熟知。后来HTTPS在RFC2818被标准化。HTTPS工作在TCP443号端口,但是普通的HTTP默认工作在TCP80端口
EmailoverSSL:类似于HTTPoverSSL,邮件协议例
如:SMTP,POP3和IMAP也能够支持SSL
SMTP over TLS的标准化文档在RFC2487
POP3和IMAP over TLS的标准化文档在RFC2595
Client:ClientHello:包含浏览器支持的算法
Server:ServerHello:选择了什么算法,ServerCertificate:数字证书
Client:ClientKeyExchange:密钥交换,ChangeCipherSpec :接下来的内容使用密钥加密
Server:ChangeCipherSpec :接下来的内容使用密钥加密
数据交换
结束
简单网络管理协议(SNMP)在网络管理系统中用于监视网络连接设备是否存在需要管理注意的情况。
三大组件:SNMP manager 、SNMP agent(UDP 端口号161)、Managerment Information Base(MIB)
GET:用于从受管设备检索信息。
SET:用于设置受管设备中的变量或触发受管设备上的操作
Trap:是从受管设备发送到SNMP管理器的未经请求的消息。它可用于通知SNMP管理器受管设备上发生的重大事件(manager UDP:端口号162)
GET、SET是manager主动要求的,Trap是agent主动推送的
版本3安全,既会加密也会做完整性校验,版本1.2不安全(community)
您可以将community string想象成密码。另外,请注意,目前市场上的多个符合SNMP的设备都具有默认的只读的community string“public”和默认的读写的community string“private”。纯明文发送
CDP:获得VLAN信息(Voice VLAN),如果有 Cisco inline power(获取相应的功率)。
DHCP:(通过Voice VLAN),获得TFTP地址。
TFTP:获取配置文件。
SCCP/SIP:注册到Call Agent。
SCCP/SIP:信令建立过程。
RTP:两个电话间的语音流量(RTP)
A、SCCP送号码到Call Agent
B、Call Manager呼叫路由查找(查询8899电话是否注册)
C、Call Manager尝试发起邀请,8899确认。
D、CallAgent向两台电话发送对方的地址,RTP端口号,编码等信息。
E、两个电话间直接交换RTP(语音)流量。
1.off hook(SCCP电话到Call Manager)
2.播放提示音(Call Manager到SCCP电话)
3.免提(Call Manager到SCCP电话)
4.显示(Call Manager到SCCP电话)
5确认电话的呼叫状态(CallManager到SCCP电话)
6.ACK(SCCP电话到Call Manager)
7功能键的定义(Call Manager到SCCP电话)
8.ACK(SCCP电话到Call Manager)
9.发送号码“8”(SCCP电话到Call Manager)
10.停止拨号提示音(CallManager到SCCP电话)
11.功能键更新(CallManager到SCCP电话)
12.ACK(SCCP电话到Call Manager)
13.发送号码8”(SCCP电话到Call Manager)
14.ACK(Call Manager到SCCP电话)
15.发送号码“9”(SCCP电话到Call Manager)
16.ACK(CallManager到SCCP电话)
17.发送号码“9” (SCCP电话到CallManager)
18.ACK(CallManager到SCCP电话)
19.更新电话屏幕显示“8899”(Call Manager到 SCCP电话)
20.呼叫状态改变(CallManager到SCCP电话)