协议体系
OSI,TCP/IP,五层协议的体系结构
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、网际层、运输层、应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、应用层。
各层协议及功能
功能 | 协议 | 设备 | |
---|---|---|---|
应用层 | 允许访问OSI环境的手段,提供各种应用程序接口(应用协议数据单元APDU) | FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS | |
表示层 | 对数据进行翻译、加密和压缩 (表示协议数据单元PPDU) | JPEG、MPEG、ASII | |
会话层 | 建立、管理和终止会话 (会话协议数据单元SPDU) | NFS、SQL、NETBIOS、RPC | |
传输层 | 提供端到端的可靠报文传递和错误恢复 (段Segment) | TCP、UDP、SPX | |
网络层 | 负责数据包从源到宿的传递和网际互连 (包Packet) 寻址、路由选择 | IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP | 路由器 |
数据链路层 | 将比特组装成帧和点到点的传递(帧Frame) 差错校验、链路管理、媒介访问控制 | PPP、FR、HDLC、VLAN、MAC | 网桥,交换机 |
物理层 | 通过媒介传输比特,确定机械及电气规范 (比特Bit) | RJ45、CLOCK、IEEE802.3 | 中继器,集线器,网关 |
主机间通信过程
交换机、路由器、网关的概念以及用途
1)交换机
在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部 交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中。
交换机工作于数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张 ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。
交换机被广泛应用于二层网络交换,俗称“二层交换机”。
交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工作在OSI七层模型中的第二层、第三层、第四层和第七层,并因此而得名。
2)路由器
路由器(Router)是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如网际协议。
路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。
3)网关
网关(Gateway),网关顾名思义就是连接两个网络的设备,区别于路由器(由于历史的原因,许多有关TCP/IP 的文献曾经把网络层使用的路由器(Router)称为网关,在今天很多局域网采用都是路由来接入网络,因此现在通常指的网关就是路由器的IP),经常在家庭中或者小型企业网络中使用,用于连接局域网和Internet。 网关也经常指把一种协议转成另一种协议的设备,比如语音网关。
在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host)。网关能在网络间转递数据包,但主机不能 转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。在当时,网关gateway)与路由器(router)还没有区别。
在现代网络术语中,网关(gateway)与路由器(router)的定义不同。网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IP gateway)。
网关是连接两个网络的设备,对于语音网关来说,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收端的时候再通过网关还原成模拟的电话信号,最后才能在电话机上听到。
对于以太网中的网关只能转发三层以上数据包,这一点和路由是一样的。而不同的是网关中并没有路由表,他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户。
4)网络接口卡(网卡)的功能
(1)进行串行/并行转换。
(2)对数据进行缓存。
(3)在计算机的操作系统安装设备驱动程序。
(4)实现以太网协议。
5)网桥的作用
网桥是一个局域网与另一个局域网之间建立连接的桥梁
计算机网络性能指标
速率: 连接在网络上的主机在数字信道上传送数据位数的速率, b/s kb/s Mb/s Gb/s
吞吐量:是单位时间内通过网络的总数据量b/s Mb/s
时延:是数据(一个报文或分组,甚至比特)从网络或链路的一段传送到另一端所需要的时间。
发送时延:是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间。
发送时延=数据帧长度(b) /信道带宽(b/s) [信道带宽就是数据率]
传播时延:电磁波在信道中需要传播一定的距离而花费的时间。往返时延等于两倍的端到端传播时延
传播时延=信道长度(m)/电磁波在信道上的传播速率(m/s)
处理时延:主机或路由器处理所收到的分组的时间。
排队时延:分组在输入队列中排队等待处理,在输出队列中等待转发,就形成了排队时延。
总时延=发送时延+传播时延+处理时延+排队时延
信道利用率:
TCP每发送一个窗口,需要进行等待确认信息回来,所以每发送完一个窗口,最快需要经过一个往返时延才可以发送下一个窗口(确认信息很小不考虑发送时延),所以在一个传输轮次中,包含一个发送时延和一个往返时延,而传输的数据量是一个窗口的大小(这里不考虑TCP、IP首部和帧的构成)
所以最大吞吐量为一个窗口的大小除以一个传输轮次的时间
多种协议
ARP 地址解析协议
1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。
RARP 逆地址解析协议
作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络
ICMP协议 因特网控制报文协议
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
TFTP协议 简单文件传输协议
TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
HTTP协议 超文本传输协议
是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
DHCP协议 动态主机配置协议
是一种让系统得以连接到网络上,并获取所需要的配置参数手段。一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
NAT协议
网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,
CSMA/CD协议
带有冲突检测的载波侦听多路存取 , 是一个无法进行双全工的协议 。
先听后发 边听边发,
冲突停发 随机重发
CSMA/CD总线网中的计算公式:
最短数据帧长(bit)/数据传输速率(Mbps)=2*(两站点间的最大距离(m)/传播速度)
信号传播时延(μs)= 两站点间的距离(m)÷信号传播速度(200m/μs),并且:数据传输时延 (s)=数据帧长度(bit)÷数据传输速率(bps)
IP地址
分类
A类地址:以0开头, 第一个字节范围:0~127(1.0.0.1 - 126.255.255.254); 缺省子网掩码:255.0.0.0
B类地址:以10开头, 第一个字节范围:128~191(128.0.0.1 - 191.255.255.254); 缺省子网掩码:255.255.0.0
C类地址:以110开头, 第一个字节范围:192~223(192.0.0.1- 223.255.255.254); 缺省子网掩码:255.255.255.0
10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。(Internet上保留地址用于内部)
网络地址:IP地址与子网掩码相与 主机地址:将掩码取反,然后与运算)
子网划分
自定义子网掩码(用于划分子网)
将一个网络划分为若干子网,希望每个子网拥有不同的网络地址或子网地址。因为IP是有限的,实际上我们是将主机地址分为两个部分:子网网络地址、子网主机地址。形式如下:
未做子网划分的ip地址:网络地址+主机地址
做子网划分后的ip地址:网络地址+(子网网络地址+子网主机地址)
等分成N个子网,子网掩码往右移动logN位。
网络前缀
掩码 点分十进制的地址化成二进制记法,1的个数就是网络前缀的个数。
TCP的三次握手与四次挥手
三次握手
(1)server处于Listen状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了;
(2)当client端socket执行connect连接时,首先发送SVN报文到server,进入SVN_SENT状态,等待server发送ACK;
(3)server接受到SVN进入SVN_RCVD状态,(很短暂,一般查询不到),发送SVN+ACK给client端;
(4)client端接受到server的ACK,发送ACK给server,server接收到后进入established状态,client也进入established状态。
四次挥手:
(1)client发起断开连接,给server发送FIN,进入FIN_WAIT1状态,表示client想主动断开连接;
(2)server接受到FIN字段后,会继续发送数据给client端,并发送ACK给client端,表明自己知道了,但是还没有准备好断开,请等我的消息;
(3) 当server确定自己的数据已经发送完成,就发送FIN到client;
(4)client接受到来自server的FIN,发送ACK给server端,表示可以断开连接了,再等待2ms,没有收到server端的数据后,表示可以正常断开连接。
TCP/IP
补充: 最大传输单元 (MTU, IP层下面数据链路层所限定的帧格式中数据字段的最大长度,与IP数据报首部中的总长度字段有关系 )限制了数据帧的最大长度。以太网的MTU为1500字节,最小帧为64字节。 以太网规定帧间最小间隔为9.6 微秒 ,相当于96比特时间;以太网取51.2微秒做争用期 ,相当于512比特时间.
在IP网络中 DNS(域名系统) 是负责主机IP地址与主机名称之间的转换协议,ARP(地址解析协议) 是负责IP地址与MAC地址之间的转换协议。
TCP报文
一个TCP报文段分为首部和数据两部分。首部由固定部分和选项部分组成,固定部分是20字节。TCP首部的最大长度为60。首部固定部分字段:
IP数据报
由首部 和数据 两部分组成。首部由固定部分和可选部分 组成。首部的固定部分有20字节。可选部分的长度变化范围为1——40字节。固定部分的字段:
字段名 | 位数(bit) | 字段名 | 位数 |
---|---|---|---|
版本 | 4 Ipv4 | 首部长度 | 4(表示的最大数为15个单位,一个单位表示4字节) |
服务类型 | 8 以前很少用 | 总长度 | 16 (首部和数据部分的总长度,因此数据报的最大长度为65535字节,即64KB,但是由于链路层的MAC都有一定的最大传输单元,因此IP数据报的长度一般都不会有理论上的那么大,如果超出了MAC的最大单元就会进行分片) |
标识 | 16 (相同的标识使得分片后的数据报片能正确的重装成原来的数据报) | 标志 | 3 (最低位MF=1表示后面还有分片,MF=0表示这是若干个数据报片的最后一个中间位DF=0才允许分片) |
片偏移 | 片偏移指出较长的分组在分片后,某片在原分组中的相对位置,都是8字节的偏移位置 | 生存时间 | 数据报在网络中的生存时间,指最多经过路由器的跳数 |
协议 | 8 (指出该数据报携带的数据是何种协议,以使得目的主机的IP层知道应将数据部分上交给哪个处理程序)如ICMP=1 IGMP=2 TCP=6 EGP=8 IGP=9 UDP=17 Ipv6=41 OSPF=89 | 首部校验和 | 这个部分只校验首部,不包括数据部分,计算方法:将首部划分为多个16位的部分,然后每个16位部分取反,然后计算和,再将和取反放到首部校验和。接收方收到后按同样的方法划分,取反,求和,在取反,如果结果为零,则接收,否则就丢弃 |
源地址 | 32 | 目的地址 | 32 |
UDP数据报
用户数据报UDP由首部和数据部分组成。首部只有8个字节,由4个字段组成,每个字段都是两个字节。
字段名 | 字节 | 字段名 | 字节 |
---|---|---|---|
源端口 | 2 | 目的端口 | 2 |
长度 | 2 | 检验和 | 2 (检验首部和数据,加12字节的伪首部) |
RTT与RTO
RTT: 发送一个数据包到收到对应的ACK,所花费的时间
RTO: 发送数据包,启动重传定时器,重传定时器到期所花费的时间,称为RTO
对于segment的重传,重传的时间RTO设定是非常重要的,如果设置太短,可能会导致并没有丢包而重传,如果设置太长了,可能因为等待ACK而浪费掉很多时间,牺牲传输的效率。
[RFC6298] 习题内有例题
第一次RTO计算方法, 假设RTT = R
SRTT = R
RTTVAR = R/2
RTO = SRTT + max(G, K*RTTVAR) , K = 4
后续的RTO计算,假设当前的RTT为R’
RTTVAR = (1 - beta)RTTVAR + beta|SRTT - R’| 计算平滑RTT和真实RTT的差距,切记这个地方的SRTT是上一次的SRTT
SRTT = (1 - alpha)SRTT + alphaR’ 计算平滑RTT
RTO = SRTT + max(G, K*RTTVAR)
alpha = 1/8 beta = 1/4
流量控制
利用滑动窗口实现流量控制,如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。
拥塞控制及其方法
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。
拥塞控制代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享。
几种拥塞控制方法:慢开始(slow-start )、拥塞避免(congestion avoidance )、快重传( fastretransmit )和快恢复( fastrecovery )。
慢开始和拥塞避免
发送方维持一个拥塞窗口cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。
发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
慢开始算法:当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。
每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。
另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:
当 cwnd < ssthresh 时,使用上述的慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。过程图如下:
快速重传:
那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:
- 把ssthresh设置为cwnd的一半
- 把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)
- 重新进入拥塞避免阶段。
快速恢复
- 当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3
- 再收到重复的ACK时,拥塞窗口增加1。
- 收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。
常见问题
TCP和UDP的区别?
区别 | TCP | UDP |
---|---|---|
1.连接 | 面向连接 | 面向非连接 |
2.可靠性 | 可靠 | 非可靠 |
3.有序性 | 有序 | 不保证有序 |
4.速度 | 慢 | 快 |
5.量级 | 重量级 | 轻量级 |
6.拥塞控制或流量控制 | 有 | 没有 |
7 面向对象 | 面向字节流,无记录边界 | 面向报文,有记录边界 |
8 传播方式 | 只能单播 | 可以广播或组播 |
9.应用场景 | 效率低,准确性高 | 效率高,准确性低 |
对应协议 | 方式 | 功能 | 端口号 |
---|---|---|---|
FTP | TCP | 定义了文件传输协议 | 21 |
Telnet | TCP | 一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。 | 23 |
SMTP | TCP | 邮件传送协议,用于发送邮件。 | 25 |
POP3 | TCP | 它是和SMTP对应,POP3用于接收邮件。 | 110 |
HTTP | TCP | 是从Web服务器传输超文本到本地浏览器的传送协议。 | |
DNS | UDP | 用于域名解析服务,将域名地址转换为IP地址 | 53 |
SNMP | UDP | 简单网络管理协议,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势 | 161 |
TFTP | UDP | 简单文件传输协议 | 69 |
为什么TIME_WAIT状态还需要等2*MSL秒之后才能返回到CLOSED状态呢?
(Max SegmentLifetime,最大分段生存期)
因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SENT状态到ESTABLISH状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。
为什么TCP连接要建立三次连接?
为了防止失效的连接请求又传送到主机,因而产生错误。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
为什么TCP断开连接要4次挥手?
TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,是一个全双工模式:
1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。
2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。
3、但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。
4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。
确保数据能够完成传输。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
在浏览器中输入www.baidu.com后执行的全部过程
从网络模型的角度来分析问题的,主要涉及应用层:DNS,HTTP,传输层:TCP,网络层:IP和路由选择协议:RIP,OSPF(内部网关协议),BGP(外部网关协议)和数据链路层:ARP。
1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。
HTTP的长连接和短连接
HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议.
短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
长连接:当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
TCP短连接: client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作.短连接一般只会在 client/server间传递一次读写操作
TCP长连接: client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
RIP使用UDP,OSPF使用IP,而BGP使用TCP。这样做有何优点?为什么RIP周期性地和临站交换路由器由信息而BGP却不这样做?
答:RIP只和邻站交换信息,使用UDP无可靠保障,但开销小,可以满足RIP要求;
OSPF使用可靠的洪泛法,直接使用IP,灵活、开销小;
BGP需要交换整个路由表和更新信息,TCP提供可靠交付以减少带宽消耗;
RIP使用不保证可靠交付的UDP,因此必须不断地(周期性地)和邻站交换信息才能使路由信息及时得到更新。但BGP使用保证可靠交付的TCP因此不需要这样做。
运输层协议与网络层协议的区别?
网络层协议负责的是提供主机间的逻辑通信
运输层协议负责的是提供进程间的逻辑通信
数据链路层协议可能提供的服务?
成帧、链路访问、透明传输、可靠交付、流量控制、差错检测、差错纠正、半双工和全双工。最重要的是帧定界(成帧)、透明传输以及差错检测。
静态路由和动态路由有什么区别?
静态路由是由管理员手工配置的,适合比较简单的网络或需要做路由特殊控制。而动态路由则是由动态路由协议自动维护的,不需人工干预,适合比较复杂大型的网络。
路由器能够自动地建立自己的路由表,并且能够根据实际实际情况的变化适时地进行调整。动态路由机制的运作依赖路由器的两个基本功能:对路由表的维护;路由器之间适时的路由信息交换。
在Linux环境中怎么配置一条默认路由?
在linux上可以用“route add default gw<默认路由器 IP>”命令配置一条默认路由。
习题
TCP拥塞控制
TCP的拥塞窗口cwnd大小与传输轮次n的关系如下所示:
(1)试画出如图5-25所示的拥塞窗口与传输轮次的关系曲线。
(2)指明TCP工作在慢开始阶段的时间间隔。
(3)指明TCP工作在拥塞避免阶段的时间间隔。
(4)在第16轮次和第22轮次之后发送方是通过收到三个重复的确认还是通过超市检测到丢失了报文段?
(5)在第1轮次,第18轮次和第24轮次发送时,门限ssthresh分别被设置为多大?
(6)在第几轮次发送出第70个报文段?
(7)假定在第26轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd和门限ssthresh应设置为多大?
(4)在第16轮次和第22轮次之后发送方是通过收到三个重复的确认还是通过超时检测到丢失了报文段?
在第16轮次是通过收到三个重复的确认(因为cwnd减少到原来的一半,继续进行拥塞避免操作)而检测到丢失了报文段,第22轮次是通过超时检测(因为cwnd重新赋值为1,继续进行慢开始操作)而检测到丢失了报文段。
(5)在第1轮次,第18轮次和第24轮次发送时,门限ssthresh分别被设置为 32 、21、13
(6)在第几轮次发送出第70个报文段?第7,因为(1+2+4+8+16+32+33)> 70
(7)假定在第26轮次之后收到了三个重复的确认,因而检测出了报文段的丢失,那么拥塞窗口cwnd和门限ssthresh应设置为 8/2=4
TCP报文
主机A向主机B连续发送了两个TCP报文段,其序号分别为70和100。试问:
(1) 第一个报文段携带了多少个字节的数据?
(2) 主机B收到第一个报文段后发回的确认中的确认号应当是多少?
(3) 如果主机B收到第二个报文段后发回的确认中的确认号是180,试问A发送的第二个报文段中的数据有多少字节?
(4) 如果A发送的第一个报文段丢失了,但第二个报文段到达了B。B在第二个报文段到达后向A发送确认。试问这个确认号应为多少?
解:(1)第一个报文段的数据序号是70到99,共30字节的数据。
(2)确认号应为100.
(3)80字节。
(4)70
TCP超时重传
假定TCP在开始建立连接时,发送方设定超时重传时间是RTO=6s。
(1)当发送方接到对方的连接确认报文段时,测量出RTT样本值为1.5s。试计算现在的RTO值。
(2)当发送方发送数据报文段并接收到确认时,测量出RTT样本值为2.5s。试计算现在的RTO值。
解:根据RFC6298
RTT(1) = 1.5s
SRTT(1) = RTT(1) = 1.5s
RTTVAR(1) = 1.5/2 = 0.75
RTO = 1.5 + 4*0.75 = 4.5s 所以现在RTO的值为4.5s
接着计算第二步 RTT (2) = 2.5
RTTVAR(2) = 3/4 0.75 + 1/4 |1.5 - 2.5| = 13/16
SRTT(2) = 7/8 1.5 + 1/82.5 = 1.625
RTO = 1.625 + 4 * 13/16 = 4.875
IP分片
1 | 一个UDP用户数据的数据字段为8192季节。在数据链路层要使用以太网来传送。试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值。 |
答:6个
数据字段的长度:前5个是1480字节,最后一个是800字节。
片偏移字段( 片偏移就是某片在原分组的相对位置,以8个字节为偏移单位)的值分别是:0,185(1480/8),370 (2960/8),555 (4440/8),740 (5920/8)和925 (7400/8).
因为UDP用户数据报的数据字段为8192字节,所以数据报文的长度是8192+upd首部8字节=8200。
所以第6个数据报片使8200-1480*5=800
注意:链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度
以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。
1 | 一个数据报长度为4000字节(固定首部长度)。现在经过一个网络传送,但此网络能够传送的最大数据长度为1500字节。试问应当划分为几个短些的数据报片?各数据报片的数据字段长度、片偏移字段和MF标志应为何数值? |
答:IP数据报固定首部长度为20字节
总长度(字节) | 数据长度(字节) | MF | 片偏移 | |
---|---|---|---|---|
原始数据报 | 4000 | 3980 | 0 | 0 |
数据报片1 | 1500 | 1480 | 1 | 0 |
数据报片2 | 1500 | 1480 | 1 | 185 |
数据报片3 | 1040 | 1020 | 0 | 370 |
IP数据报
1 | 主机A发送IP数据报给主机B,途中经过了5个路由器。试问在IP数据报的发送过程中总共使用了几次ARP? |
答:6次,主机用一次,每个路由器各使用一次。
ARQ协议
假定使用连续ARQ协议中,发送窗口大小事3,而序列范围[0,15],而传输媒体保证在接收方能够按序收到分组。在某时刻,接收方,下一个期望收到序号是5.
试问:
(1)在发送方的发送窗口中可能有出现的序号组合有哪几种?
(2)接收方已经发送出去的、但在网络中(即还未到达发送方)的确认分组可能有哪些?说明这些确认分组是用来确认哪些序号的分组。
路由选择
1 | 假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”) |
解:路由器B更新后的路由表如下:
N1 7 A 无新信息,不改变
N2 5 C 相同的下一跳,更新
N3 9 C 新的项目,添加进来
N6 5 C 不同的下一跳,距离更短,更新
N8 4 E 不同的下一跳,距离一样,不改变
N9 4 F 不同的下一跳,距离更大,不改变
1 | 设某路由器建立了如下路由表: |
解:(1)分组的目的站IP地址为:128.96.39.10。先与子网掩码255.255.255.128相与,得128.96.39.0,可见该分组经接口0转发。
(2)分组的目的IP地址为:128.96.40.12。
① 与子网掩码255.255.255.128相与得128.96.40.0,不等于128.96.39.0。
② 与子网掩码255.255.255.128相与得128.96.40.0,经查路由表可知,该项分组经R2转发。
(3)分组的目的IP地址为:128.96.40.151,与子网掩码255.255.255.128相与后得128.96.40.128,与子网掩码255.255.255.192相与后得128.96.40.128,经查路由表知,该分组转发选择默认路由,经R4转发。
(4)分组的目的IP地址为:192.4.153.17。与子网掩码255.255.255.128相与后得192.4.153.0。与子网掩码255.255.255.192相与后得192.4.153.0,经查路由表知,该分组经R3转发。
(5)分组的目的IP地址为:192.4.153.90,与子网掩码255.255.255.128相与后得192.4.153.0。与子网掩码255.255.255.192相与后得192.4.153.64,经查路由表知,该分组转发选择默认路由,经R4转发。
网络前缀
1 | 以下的地址前缀中哪一个地址和2.52.90.140匹配?请说明理由。 |
答:(1)2.52.90.140与11110000 00000000 00000000 00000000逐比特相“与”和0/4匹配
(2)2.52.90.140与11110000 00000000 00000000 00000000逐比特相“与”和32/4不匹配
(3)2.52.90.140与11110000 00000000 00000000 00000000逐比特相“与”和4/6不匹配
(4)2.52.90.140与11110000 00000000 00000000 00000000逐比特相“与”和80/4不匹配
CRC校验
1 | 生成多项式:G(X)=X4+X3+1,要求出二进制序列10110011的CRC校验码。 |
(1)G(X)=X4+X3+1,二进制比特串为11001;(有X的几次方,对应的2的几次方的位就是1)
(2)因为校验码4位,所以10110011后面再加4个0,得到101100110000,用“模2除法”(其实就是异或)即可得出结果;
余数就是 FCS(帧校验序列 ,俗称帧尾 )
(3)CRC^101100110000得到101100110100。发送到接收端;
(4)接收端收到101100110100后除以11001(以“模2除法”方式去除),余数为0则无差错;
码分多址CDMA通信
1 | 共有4个站进行码分多址CDMA通信。4个站的码片序列为: |
答:S·A=(+1-1+3+1-1+3+1+1)/8=1, A发送1
S·B=(+1-1-3-1-1-3+1-1)/8=-1, B发送0
S·C=(+1+1+3+1-1-3-1-1)/8=0, C无发送
S·D=(+1+1+3-1+1+3+1-1)/8=1, D发送1
数据链路层
1 | 1、假定站点A和B在同一个10Mb/s以太网网段上。这两个站点之间的传播时延为225比特时间。现假定A开始发送一帧,并且在A发送结束之前B也发送一帧。如果A发送的是以太网所容许的最短的帧,那么A在检测到和B发生碰撞之前能否把自己的数据发送完毕?换言之,如果A在发送完毕之前并没有检测到碰撞,那么能否肯定A所发送的帧不会和B发送的帧发生碰撞?(提示:在计算时应当考虑到每一个以太网帧在发送到信道上时,在MAC帧前面还要增加若干字节的前同步码和帧定界符) |
答: 设在t=0时A开始发送,在t=(64+8(MAC帧要加8个字节同步码和帧开始定界符))*8=576比特时间,A应当发送完毕。t=225比特时间,B就检测出A的信号。只要B在t=224比特时间之前发送数据,A在发送完毕之前就一定检测到碰撞,就能够肯定以后也不会再发送碰撞了。如果A在发送完毕之前并没有检测到碰撞,那么就能够肯定A所发送的帧不会和B发送的帧发生碰撞(当然也不会和其他站点发生碰撞)。
1 | 2、在上题中的站点A和B在t=0时同时发送了数据帧。当t=255比特时间,A和B同时检测到发生了碰撞,并且在t=255+48=273比特时间完成了干扰信号的传输。A和B在CSMA/CD算法中选择不同的r值退避。假定A和B选择的随机数分别是rA=0和rB=1。试问A和B各在什么时间开始重传其数据帧?A重传的数据帧在什么时间到达B?A重传的数据会不会和B重传的数据再次发生碰撞?B会不会在预定的重传时间停止发送数据? |
答:t=0时,A,B开始传输数据;
t=225比特时间,A和B同时检测到发生碰撞;
t=225+48=273比特时间,完成了干扰信号的传输;
开始各自进行退避算法:
A:
因为rA=0,则A在干扰信号传输完之后立即开始侦听
t=273+225(传播时延)=498比特时间,A检测到信道开始空闲
t=498+96(帧间最小间隔)=594比特时间,A开始重传数据 —–第一问A的重传时间
t=594+225 (传播时延)=819比特时间,A重传完毕 —-第二问A重传的数据帧到达B的时间
B:
因为rB=1,则B在干扰信号传输完之后1倍的争用期,即512比特时间才开始侦听
t=273+512=785比特时间,B开始侦听
若侦听空闲,则
t=785+96(帧间最小间隔)=881比特时间,B开始重传数据
若侦听费空闲,则继续退避算法
又因为t=819比特时间的时候,A才重传数据完毕,所以B在785比特时间侦听的时候,肯定会侦听信道非空闲,即B在预定的881比特时间之前侦听到信道忙,
所以,第四问的答案:B在预定的881比特时间是停止发送数据的。
即第三问A重传的数据不会和B重传的数据再次发生碰撞。
计算机网络性能计算
1 | 通信信道带宽为1Gb/s,端到端时延为10ms。TCP的发送窗口为65535字节。试问:可能达到的最大吞吐量是多少? 信道的利用率是多少? |
往返时延等于两倍的端到端传播时延,即20ms=0.02s
发送时延等于窗口数据量除以带宽,即655358/10^9秒
TCP每发送一个窗口,需要进行等待确认信息回来,所以每发送完一个窗口,最快需要经过一个往返时延才可以发送下一个窗口(确认信息很小不考虑发送时延),所以在一个传输轮次中,包含一个发送时延和一个往返时延,而传输的数据量是一个窗口的大小(这里不考虑TCP、IP首部和帧的构成)
所以最大吞吐量为一个窗口的大小除以一个传输轮次的时间,即655358/(65535*8/10^9+0.02)=25.54Mbit/s
信道利用率为25.54Mbit/s/1000Mbit/s=2.55%