目录
4.7 有人认为:“ARP协议向网络层提供转换地址的服务,因此ARP应当属于数据链路层。”正确么?
4.9 在经过路由器转发的过程中IP数据报中的IP源地址、目的地址以及MAC源地址和目的地址会发生变化吗?
5.3 如果IP可以可靠传输是不是就不需要UDP了,直接跟应用层联系?
5.8.1 TCP四次挥手(握手)释放连接,为啥需要四次而不是三次?
5.8.2 TCP四次挥手为啥第四次客户机发送ACK之后要等待2MSL之后才能真的关闭?
计算机网络
第一章概述
1.1 协议和服务之间的联系和区别
(1)首先,协议是对等层实体之间通信的规则集。在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本协议,还需要使用下面一层所提供的服务。本层只能看见本层的服务,看不见下层的协议,即下层的协议对上层服务的实体而言是透明的。
(2)协议是“水平的”,即协议是控制对等实体之间通信的规则。但服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。
1.2 计算机网络有哪些层?
五层协议各层的功能:
应用层(对应七层协议中的应用层、表示层、会话层)
通过一台主机内进程间的交互来完成特定网络应用,
包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol),数据单位为报文。
运输层 提供的是两台主机中进程间的通用数据传输服务。
运输层包括两种协议:
传输控制协议TCP 提供面向连接、可靠的数据传输服务,数据单位为报文段;TCP 主要提供完整性服务。
用户数据报协议UDP 提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。UDP 主要提供及时性服务。
网络层
为主机间提供数据传输服务,而运输层协议是为主机中的进程提供服务。网络层把运输层传递下来的报文段或者用户数据报封装成分组或包。在TCP/IP体系中,网络层使用IP协议,因此分组也叫做IP数据报。
数据链路层
链路层协议就是为同一链路的结点之间提供服务。数据链路层把网络层传来的分组封装成帧,在两个相邻结点间的链路上传送帧。
物理层
考虑的是怎样在物理媒体上传输数据比特流,而不是指具体的物理媒体(传输媒体指双绞线、同轴电缆等)。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
1.3 面向连接的服务以及无连接的服务
(1)面向连接的服务:是指通信前需要建立连接,通信结束后需要进行连接释放。整个过程包括,连接建立、数据传送、连接释放。是按序传送、可靠传送的。 (2)无连接的服务:传送数据之前不许要建立连接,随时传就行,速度快,简单,但是无法避免数据的丢失、重复等只能“尽最大努力地交付”,是不可靠地传输。
1.4 对等层、协议栈、实体、协议概念
对等层 两个相同层次的层之间,好像把数据通过水平虚线直接传递给对方,就叫做对等层。
协议栈 因为几个层次画在一起很像一个栈的结构。
实体 实体是任何可发送或接收信息的硬件或软件进程。
协议 协议是控制两个对等实体进行通信的规则的集合。
在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本协议,还需要使用下面一层所提供的服务。
协议是“水平的”,即协议是控制对等实体之间通信的规则。但服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。
第二章物理层
2.1 物理层作用
主要是规定了通信结点和通信链路之间的连接的接口的一些特性。包括机械特性、电气特性、功能特性和过程特性。规定了通信链路上传输的信号的意义以及电气特性。功能是在物理媒体上为数据端的设备透明的传输原始的比特流。
2.2 物理层主要设备
(1)中继器:起到的是信号再生的作用(数字信号),与放大器不同(模拟信号)。 (2)集线器:多端口的中继器。 (3)注意:物理层的设备均不支持存储转发功能,所以连接的两端必须使用同一个协议,且连接的两端是同一个局域网的不同的网段。 另外,物理层的设备不阻隔冲突域,也不阻隔广播域,它就是个最便宜的设备。
2.3 数据交换的方式
(1)电路交换:建立连接(独占),数据传输,连接释放。 (2)报文交换:结点具有存储转发功能,但是转发延迟的问题太大以及结点不好管理存储空间。 (3)分组交换:采用存储转发方式,限制了每次传送的数据块大小上限,把大的数据块划分成合理地小数据块,再加上控制信息构成分组。
分组交换又分为:数据报交换与虚电路交换(虚电路之所以是“虚”的,是因为这条电路不是专用的,每个节点到其他节点之间的链路可能有若干虚电路通过,也可能同时与多个节点之间建立虚电路)
第三章数据链路层
3.1 数据链路层的功能
在物理层提供服务的基础上为网络层提供服务。主要是加强物理层传输原始比特流的能力,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路。
3.2 数据交换的三种方式的对比
(1)电路交换:三步骤,建立连接-->传输数据-->连接释放。建立连接的时间比较长。且独占信道,适合传输数据量大的时候,信道利用率低且一旦出差错就会导致数据传输失败,无法控制。
(2)报文交换:不需要建立连接,随时发随时接收即可。结点具有存储转发的功能,每个结点接受整个报文之后进行检测,检测无误执行转发,故会存在延迟时间。缺点就是报文大小不确定,结点的存储管理不好控制,且延迟时间较长。
(3)分组交换:将报文划分为长度相同的分组,每个分组都有相应的原地址+目的地址+序号等信息,进行存储转发操作。好处是,分组可以可以并行进行转发,延迟时间缩短且因为分组大小固定所以易于存储的管理。缺点就是,因为每个分组都要加地址信息以及编号之类的,所以增加了传输的数据量。
3.3 数据链路层主要完成的功能
包括为网络层提供服务、链路管理、帧定界、帧同步、透明传输、差错控制、流量控制、随机访问介质访问控制(协议)
3.4 组帧的定义
组帧:包括帧定界、帧同步、透明传输
数据链路层将从网络层获得的IP数据包封装成帧,然后进行传输,封装成帧的时候要添加帧首部和帧尾部,用于提取出数据部分。
3.5 组帧的方式
(1)字符计数法:在帧首部添加计数字段,记录该帧数据的长度。
(2)字符填充的首位定界法:用特殊的字符去作为首位定界符。对于数据中可能出现的特殊字符,则在其前面加上一个转义字符,接收的时候自动去掉即可。
(3)零比特填充的首位定界标志:01111110作为开始和结束的表示,为了防止数据中出现这样的串而出现提前终止的情况,我们对数据中连续的11111后面加一个0,接收的时候相反处理即可,硬件处理。
(4)违规编码法:适用于冗余编码的时候,比如我们的差分曼彻斯特编码(由高到低表示0,则由低到高表示1,高高和低低就是违规编码),我们用违规编码作为定界符即可,但是只适用于冗余编码。
3.6 差错控制
检错编码(奇偶校验、CRC)和纠错编码(海明码)
3.7 流量控制
就是限制发送方的发送速度,使得接收方可以正确的接收数据。 (1)停止等待协议:发送窗口大小=1,接受窗口大小=1 (2)后退N帧:发送窗口大小>1,接受窗口大小=1 (3)选择重发:发送窗口大小>1,接受窗口大小>1 (2)和(3)有一个共同点就是t+w<=2^n,n为编号的二进制数,否则容易产生若确认帧丢失接收方无法分清新帧旧帧的情况。 (4)这些包括了自动重传机制,即确认,超时重传机制可以确保可靠传输。
3.8 随机访问介质访控制机制
在局域网中是总线型的,广播式的发送,所以必须为了防止冲突采取一些措施。
(1)随机接入系统ALOHA:纯ALOHA、时域ALOHA协议
(2)CSMA(载波监听多路访问):1坚持、非坚持、P坚持。
(3)CSMA/CD(碰撞检测):先听后发、边听边发、冲突停发、随机重发。适合有线网(局域网)。 1)存在争用期,因为必须保证检测到冲突的时候数据还没发完,所以2*端到端的传播时间必须小于数据的发送延时。即可以确定最小帧长(以太网的最小帧长是64B) 2)随机重发的策略是二进制指数退避算法来防止再次冲突。
(4)CSMA/CA(碰撞避免):包括预约信道、ACK、RTS、CTS,适用于无线网。并不能完全避免,只能尽量的避免,在发送的过程中不检测冲突。 1)数据发送前先预约信道,告诉其他设备我要发数据,在此期间你们别发。 2)随机重发的策略是二进制指数退避算法来防止再次冲突。
3.9 局域网
局域网是指在一个较小的地理范围内,将各种计算机、外部设备和数据库系统等通过双绞线、同轴电缆等连接介质互相连接起来,组成资源和信息共享的计算机互联网络。
3.10 数据链路层在广域网中的协议
(1)PPP协议:按字节传输的,点到点的协议,不可靠,只检错丢弃,不纠错,不适用序号和确认机制。支持全双工。
(2)HDLC(高级数据链路控制协议):面向比特,提供可靠传输(使用了编号和确认机制),用的是0比特插入法实现透明传输。
3.11 链路层设备(局域网中)
隔离冲突域,不隔离广播域
(1)网桥:一次只能转发一个帧。
(2)交换机:多端口的网桥,解决网桥一次只能转发一帧的不足。有直通式、存储转发式。
第四章网络层
4.1 IP地址与MAC地址的区别
(1)举个栗子,就像是你接收快递时所填的家庭地址和你的个人信息一样。IP地址就是你的住址,这个是可以变的,但是你的个人信息,也就是你的身份证号码是不会变的。 (2)链路层传输需要的是物理地址MAC,网络之间通过路由器转发分组需要的地址是IP地址。 (3)IP地址是逻辑的,MAC地址基于物理设备。
4.2 IPV4和IPV6的区别
(1)IPV4地址32位,IPV6地址128位。IPV6的出现是为了解决IPV4地址不够用等问题。
(2)IPV6提高安全性。身份认证和隐私权是IPV6的关键特性。
4.3 如何实现IPV4和IPV6的互联
(1)双栈技术(IPV4协议栈和IPV6协议栈):数据链路层根据收到的IP数据报进行解析其头部第一个字段,即版本,版本位4就用IPV4协议栈去处理,版本位6就用IPV6协议栈去处理。 (2)隧道技术:实现IPV6的较完整运行。隧道技术是在IPv6网络与IPv4网络间的隧道入口处,由路由器将IPv6的数据分组封装到IPv4分组中。IPv4分组的源地址和目的地址分别是隧道入口和出口的IPv4地址。在隧道的出口处拆封IPv4分组并剥离出IPv6数据包。
4.4 虚电路与数据报比较
(1)虚电路需要建立连接,是有序的,能够保证数据传输的质量,但是灵活性不够强,结点出现问题所有经过此节点的虚电路都不能用了。
(2)数据报交换:无连接不可靠,但是灵活。
4.5 子网的划分和掩码
(1)主要是为了提高IP利用率,就是公有IP的利用率。
(2)还可以减小广播域(注意不是减少,是减小!!!)
(3)便于IP的管理。
4.6 因特网中的两大类路由选择协议
(1)域内路由选择协议IGP:RIP(UDP,用的路由选择算法是距离向量,最多15跳)、OSPF(IP,用的路由选择算法是链路状态,其中用到了迪杰斯特拉最短路径求解算法)。
(2)域间路由选择协议EGP:BGP(TCP)
4.7 有人认为:“ARP协议向网络层提供转换地址的服务,因此ARP应当属于数据链路层。”正确么?
不正确。 因为ARP本身是网络层的一部分,ARP协议为IP协议提供了转换地址的服务;数据链路层使用硬件地址而不使用IP地址,无需ARP协议数据链路层本身即可正常运行。因此ARP不再数据链路层。
4.8 ARP协议
ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
4.9 在经过路由器转发的过程中IP数据报中的IP源地址、目的地址以及MAC源地址和目的地址会发生变化吗?
如果路由器不提供NAT,则IP地址是不会变化的。但是如果提供NAT的话,是会改变的。但是MAC源、目的地址是会变化的。 (1)如果源IP地址是私有IP地址,需要经过路由器的NAT的转换,源地址转换成公有的IP地址,但是目的地址是不变的。 (2)MAC源、目的地址会一直变化,根据所处的位置以及下一条进行变化。
第五章传输层(提供端到端的服务)
5.1 传输层的两个协议
无连接不可靠但是很快速的UDP(面向报文)
有连接可靠但是管理麻烦的TCP(面向字节流)。
5.2 TCP和UDP首部格式
UDP:首部只有8B,4个字段(每个占2B),分别为源端口号、目的端口号、长度(是UDP整个的长度)、校验位(校验UDP中的首部+数据)
TCP:20B的首部,包含很多东西。
5.3 如果IP可以可靠传输是不是就不需要UDP了,直接跟应用层联系?
不可以。IP只能确定主机,但是真正通信的是两台主机中的进程,所以我们需要确定具体的进程也就是需要源端口号和目的端口号,这需要UDP提供。
5.4 TCP的特点
传输控制协议 TCP(Transmission Control Protocol)
-
有连接的
-
每一条 TCP连接只能是点对点的(一对一)
-
提供可靠交付
-
全双工通信
-
有流量控制,拥塞控制,面向字节流
5.5 UDP特点
用户数据报协议 UDP(User Datagram Protocol)
-
无连接的
-
尽最大可能交付
-
面向报文,对于应用程序传下来的报文不合并也不拆分
-
没有拥塞控制
-
支持一对一、一对多、多对一和多对多的交互通信
-
只是添加 UDP 首部,且首部开销小
5.6 TCP和UDP的区别
1. TCP提供面向连接的传输;UDP提供无连接的传输
2. TCP提供可靠的传输(有序,无差错,不丢失,不重复); UDP提供不可靠的传输。
3. TCP面向字节流的传输,因此它能将信息分割成组,并在接 收端将其重组;UDP是面向数据报的传输,没有分组开销。
4. TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和 流量控制机制。
5. TCP只能是点对点的(一对一)。UDP支持一对一、一对 多、多对一和多对多的交互通信。
5.7 TCP建立连接(三次握手)
连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求。
第1步,客户机的TCP首先向服务器的TCP发出连接请求报文段
,这时首部中的同步位SYN=1
,同时选择一个初始序列seq=x
。TCP规定,SYN报文段
(即SYN=1
的报文段)不能携带数据
,但要消耗掉一个序列
。这时,TCP客户进程进入SYN-SENT
(同步已发送)状态。
第2步,服务器的TCP收到连接请求报文段
后,如果同意建立连接,则向客户机发送确认。在确认报文段
中应把SYN位
和ACK位
都置1
,确认号是ack=x+1
,同时也为自己选择一个初始序列seq=y
。请注意,这个报文段也不能携带数据
,但同样要消耗掉一个序号
。这时TCP服务器进程进入SYN-RCVD
(同步收到)状态。
第3步,当客户机收到确认报文段后,还要向服务器给出确认,并为该TCP连接分配缓存和变量。确认报文段
的ACK=1
,确认号ack=y+1
,而自己的序列seq=x+1
。TCP的标准规定,ACK报文段
可以携带数据
。但如果不携带数据则不消耗序号
,在这种情况下,下一个数据报文段
的序列
仍是seq=x+1
。这时,TCP连接已经建立,A进入ESTABLISHED
(已建立连接)状态。
当服务器收到客户机的确认后,也进入ESTABLISHED
状态。
5.7.1 TCP三次握手建立连接,两次不行吗?
不可以。 如果存在已失效的连接请求报文重新传到了服务器端,则服务器会响应然后向客户端发送ACK,此时认为已经建立连接,之后服务器便开始等待客户机传送数据。但是客户机并未响应这个ACK,所以服务器会一直等待下去,造成资源的浪费。
如果有最后一次确认,则在服务器收到滞留的请求并回复之后,客户机不会对服务器的回复做出回复,进而不会建立连接。
5.7.2 四次呢?
四次太多了,三次就可以双方都确认对方已经做好了接收数据以及发送数据的准备。
5.8 TCP连接释放(四次挥手)
数据传输结束后,通信的双方都可释放连接
。
第1步,客户机打算关闭时,先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。该报文段的终止位FIN置1,其序列seq=u
,它等于前面已传送过的数据的最后一个字节的序列加1。这时客户机进入FIN-WAIT-1(终止等待1)状态
。请注意,TCP规定,FIN报文段即使不携带数据,它也要消耗一个序列。
第2步,服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1
,并且带上自己的序列号seq=v
,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态
。此时,从客户机到服务器这个方向的连接就释放了,TCP处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态
,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)
第3步,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,重复上次已发送的确认号ack=u+1
,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w
,此时,服务器就进入了LAST-ACK(最后确认)状态
,等待客户端的确认。
第4步,客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1
,而自己的序列号是seq=u+1
,此时,TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)
的时间后,客户机才进入CLOSED(连接关闭)状态
。
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。
5.8.1 TCP四次挥手(握手)释放连接,为啥需要四次而不是三次?
(1)是因为可能有部分数据需要处理。 (2)建立连接时,被动方服务器端结束CLOSED阶段进入“握手”阶段并不需要任何准备,可以直接返回SYN和ACK报文,开始建立连接。 (3)释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。但是连接释放请求的时候,第二次发送的只是ACK,并没有FIN,是因为服务器可能还需要传送一些数据,所以要等待传送完毕之后才能再次给客户端发送FIN=1的连接释放报文。
5.8.2 TCP四次挥手为啥第四次客户机发送ACK之后要等待2MSL之后才能真的关闭?
1)MSL是最大报文段生存周期。客户机发送ACK后如果MSL后服务器端没有接受到,就会再次发送一个请求释放报文,这一过程总的到达客户端的时间最多就是2MSL,所以一旦ACK出现丢失,那么2MSL内客户机一定可以得到消息,然后重新发送ACK,再次重新计时。 2)如果客户机发送ACK之后就关闭了,那么如果出现ACK丢失的现象,即使服务器端再次重新发送请求释放报文,它也不会理会,就会导致服务器端无法结束。 3)还可以防止已失效的连接请求报文。
5.9 重传的两种方法
1)超时重传:根据RTT均值设置一个超时重传的时间。但是这种方法不好的点在于慢。但是这种情况预示着此时拥塞很严重了。 2)冗余ACK:利用TCP接受数据的特点,当前未接受的数据k而言,如果k后的数据到达,每次都会产生一个ACK的确认序号为k,3个这样的就表示需要为k的报文段丢失需要重发。这样的好处是快,而且此时没有那么的拥塞。
5.10 TCP实现可靠传输的方式
5.10.1 停止等待协议
每发送一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
5.10.2 流量控制
让发送方的发送速率不要太快,要让接收方来得及接收。
5.10.3 拥塞控制
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
四种算法:
1、慢开始:由小到大逐渐增大拥塞窗口,每经过一个传输轮次,拥塞窗口加倍 2、拥塞避免:每经过一个传输轮次,拥塞窗口加1 3、快重传:立即发送确认,让发送方尽早知道发生了个别报文段的丢失 4、快恢复:只是丢失个别的报文段时可以执行快恢复,调整限制到原拥塞窗口的1/2
第六章
6.1 应用层传输的方式
C/S方式、P2P点对点方式(平等的,每个主机既可以作为Client也可以作为Service)
6.2 域名解析协议DNS
域名系统(Domain Name System缩写 DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(基于UDP)
6.3 FTP(文件传输协议)
控制连接(端口号21),数据连接(一般是端口号20),是两个并行的TCP连接,数据传输结束立即断开数据连接。
6.4 SMTP以及POP3:(基于TCP)
(1)SMTP:简单邮件传输协议,只传输二进制信息,在用户代理--->邮件服务器,以及邮件服务器-->邮件服务器之间的邮件的传输。(Push的方式)
(2)POP3:邮局协议,是传输从邮件服务器到用户代理。(Pull的方式)
6.5 HTTP(基于TCP有连接)
超文本传输协议HTTP(HyperText Transfer Protocol),HTTP是面向事务的应用层协议。定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是万维网上能够可靠地交换文件的重要基础。
6.6 HTTP中GET和POST的区别
1、从原理性看:
GET用于信息获取,而且应该是安全的;POST请求表示可能修改服务器上资源的请求。
2、从表面上看:
GET请求的数据会附在URL后面,POST的数据放在HTTP包体,POST安全性比GET安全性高。
常见题
1. 说下浏览器请求一个网址的过程?
(1)首先是解析域名,DNS进行,获得IP地址。然后端口号发送端随机分配,服务器是固定的80端口。
(2)知道IP和端口号之后就可以建立3次握手建立TCP连接。
(3)发送HTTP请求报文。
(4)服务器处理浏览器发来的请求,返回要显示的页面html信息。
(5)传输结束,4次握手释放连接。 (6)显示页面。