第一章:概述
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 应用层传输的方式
-
C/S方式
-
P2P点对点方式(平等的,每个主机既可以作为Client也可以作为Service)
2.2 域名解析协议DNS
域名系统(Domain Name System缩写 DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(基于UDP)
2.3 FTP(文件传输协议)
控制连接(端口号21),数据连接(一般是端口号20),是两个并行的TCP连接,数据传输结束立即断开数据连接。
2.4 SMTP以及POP3:(基于TCP)
(1)SMTP:简单邮件传输协议,只传输二进制信息,在用户代理--->邮件服务器,以及邮件服务器-->邮件服务器之间的邮件的传输。(Push的方式)
(2)POP3:邮局协议,是传输从邮件服务器到用户代理。(Pull的方式)
2.5 HTTP(基于TCP有连接)
超文本传输协议HTTP(HyperText Transfer Protocol),HTTP是面向事务的应用层协议。定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是万维网上能够可靠地交换文件的重要基础。
2.6 HTTP中GET和POST的区别
从原理性看:
-
GET用于信息获取,而且应该是安全的;
-
POST请求表示可能修改服务器上资源的请求。
从表面上看:
GET请求的数据会附在URL后面,POST的数据放在HTTP包体,POST安全性比GET安全性高。
第三章:传输层(提供端到端的服务)
3.1 传输层的两个协议
-
无连接、不可靠、但是很快速的UDP(面向报文)
-
有连接、可靠、但是管理麻烦的TCP(面向字节流)。
3.2 TCP和UDP首部格式
UDP:首部只有8B,4个字段(每个占2B),分别为源端口号、目的端口号、长度(是UDP整个的长度)、校验位(校验UDP中的首部+数据)
TCP:20B的首部,包含很多东西。
3.3 如果IP可以可靠传输是不是就不需要UDP了,直接跟应用层联系?
不可以。IP只能确定主机,但是真正通信的是两台主机中的进程,所以我们需要确定具体的进程也就是需要源端口号和目的端口号,这需要UDP提供。
3.4 TCP的特点
传输控制协议 TCP(Transmission Control Protocol)
-
有连接的
-
每一条 TCP连接只能是点对点的(一对一)
-
提供可靠交付
-
全双工通信
-
有流量控制,拥塞控制,面向字节流
3.5 UDP特点
用户数据报协议 UDP(User Datagram Protocol)
-
无连接的
-
尽最大可能交付
-
面向报文,对于应用程序传下来的报文不合并也不拆分
-
没有拥塞控制
-
支持一对一、一对多、多对一和多对多的交互通信
-
只是添加 UDP 首部,且首部开销小
3.6 TCP和UDP的区别
-
TCP提供面向连接的传输;UDP提供无连接的传输
-
TCP提供可靠的传输(有序,无差错,不丢失,不重复); UDP提供不可靠的传输。
-
TCP面向字节流的传输,因此它能将信息分割成组,并在接 收端将其重组;UDP是面向数据报的传输,没有分组开销。
-
TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制 流量控制机制。
-
TCP只能是点对点的(一对一)。UDP支持一对一、一对 多、多对一和多对多的交互通信。
3.7 TCP建立连接(三次握手)
连接建立前,服务器进程处于LISTEN(收听)状态,等待客户的连接请求。
第1步,客户机的TCP首先向服务器的TCP发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序列seq=x(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状态。
简单版
客户端发送请求连接报文,服务端收到后发送ACK确认报文,并为这次连接分配资源;客户端收到ACK确认报文后也向服务端发生ACK报文,并分配资源
3.7.1 TCP三次握手建立连接,两次不行吗?
假设是两次握手:当客户端发送请求连接报文,这条报文没有丢失,但是由于网络拥塞等原因很久之后才到达服务端;客户端在发送完第一条报文后迟迟没有收到ACK确认报文,以为服务端没有收到,就又发了一条请求连接报文,这一条正常收到后服务端就发了确认报文,两次握手达成建立连接。
等到连接释放后,第一条请求报文到达了服务端,服务端以为是客户端又发送了一条请求连接报文,于是又发送了确认报文,但实际上客户端并没有要建立连接,因此客户端收到确认后不会发送数据,而服务端就会一直处于待接收数据的状态,从而造成了资源的浪费
3.7.2 四次呢?
四次太多了,三次就可以双方都确认对方已经做好了接收数据以及发送数据的准备。
3.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连接。
简单版
假设客户端发送了中断连接请求,表示我没有数据要发送了,但是如果你还有数据要发送我还可以继续接收;服务端发送确认报文,表示你的请求我收到了,但是我还有数据要发送,请继续等待;等到服务端数据都发送完了,就发送一条报文表示数据都传完了,可以中断连接了,客户端收到后还发送了一条确认报文,然后连接就可以关闭了
3.8.1 TCP四次挥手(握手)释放连接,为啥需要四次而不是三次?
释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,在发送完剩下的数据后,准备好释放连接,才能返回FIN释放连接报文。
3.8.2 TCP四次挥手为啥第四次客户机发送ACK之后要等待2MSL之后才能真的关闭?
1)MSL是最大报文段生存周期。客户机发送ACK后如果MSL后服务器端没有接受到,就会再次发送一个请求释放报文,这一过程总的到达客户端的时间最多就是2MSL,所以一旦ACK出现丢失,那么2MSL内客户机一定可以得到消息,然后重新发送ACK,再次重新计时。
2)如果客户机发送ACK之后就关闭了,那么如果出现ACK丢失的现象,即使服务器端再次重新发送请求释放报文,它也不会理会,就会导致服务器端无法结束。
3.9 重传的两种方法
1)超时重传:根据RTT均值设置一个超时重传的时间。但是这种方法不好的点在于慢。但是这种情况预示着此时拥塞很严重了。
2)冗余ACK:利用TCP接受数据的特点,对于当前未接受的数据k而言,如果k后的数据到达,每次都会产生一个ACK的确认序号为k,3个这样的就表示需要为k的报文段丢失需要重发。这样的好处是快,而且此时没有那么的拥塞。
3.10 TCP实现可靠传输的方式
3.10.1 停止等待协议
每发送一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
3.10.2 流量控制
让发送方的发送速率不要太快,要让接收方来得及接收。
3.10.3 拥塞控制
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
四种算法:
-
慢开始:由小到大逐渐增大拥塞窗口,每收到一个ACK,拥塞窗口加1,每经过一个传输轮次,拥塞窗口加倍
-
拥塞避免:当拥塞窗口 cwnd 达到一个阈值时,窗口大小不再呈指数上升,而是以线性上升,避免增长过快导致网络拥塞。
-
快重传:在收到3个duplicate ACK时就开启重传,让发送方尽早知道发生了个别报文段的丢失
-
快恢复:只是丢失个别的报文段时可以执行快恢复,调整限制到原拥塞窗口的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,用的路由选择算法是链路状态,其中用到了Dijkstra最短路径求解算法)。
(2)域间路由选择协议EGP:BGP(TCP)
4.7 有人认为:“ARP协议向网络层提供转换地址的服务,因此ARP应当属于数据链路层。”正确么?
不正确。
因为ARP本身是网络层的一部分,ARP协议为IP协议提供了转换地址的服务;数据链路层使用硬件地址而不使用IP地址,无需ARP协议数据链路层本身即可正常运行。因此ARP不在数据链路层。
4.8 ARP协议
ARP 是解决同一个局域网上的主机或路由器的 IP 地址和MAC地址的映射问题。
4.9 在经过路由器转发的过程中IP数据报中的IP源地址、目的地址以及MAC源地址和目的地址会发生变化吗?
如果路由器不提供NAT(Network Address Translation网络地址转换),则IP地址是不会变化的。但是如果提供NAT的话,是会改变的。但是MAC源、目的地址是会变化的。
(1)如果源IP地址是私有IP地址,需要经过路由器的NAT的转换,源地址转换成公有的IP地址,但是目的地址是不变的。
(2)MAC源、目的地址会一直变化,根据所处的位置以及下一条进行变化。
4.10 路由转发过程
主机A发向主机B的数据流在网络层封装成IP数据包,IP数据包的首部包含了源地址和目标地址。主机A会用本机配置的24位IP网络掩码255.255.255.0与目标地址进行与运算,得出目标网络地址与本机的网络地址是不是在同一个网段中。如果不是将IP数据包转发到网关。
在发往网关前主机A还会通过ARP的请求获得网关的MAC地址。在主机A数据链路层IP数据包封装成以太网数据帧,然后才发住到网关……也就是路由器上的一个端口。
当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是自己的某一个端口的物理地址,这时路由器会把以太网数据帧的封装去掉。路由器认为这个IP数据包是要通过自己进行转发,接着它就在匹配路由表。匹配到路由项后,它就将包发往下一条地址。
路由器转发数据包就是这样,所以它始终是不会改IP地址的。只会改MAC.
当有数据包传到路由器时,路由器首先将其的目的地址与路由表进行对比,如果是本地网络,将不会进行转发到外网络,而是直接转发给本地网内的目的主机;但是如果目的地址经路由表对比,发现不是在本网中,有nat就将改变源地址的IP(源地址的Ip地址改为了路由器的IP地址),路由器将数据包转发到相应的端口,进行通信。
第五章:数据链路层
5.1 数据链路层的功能
在物理层提供服务的基础上为网络层提供服务。主要是加强物理层传输原始比特流的能力,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路。
5.2 数据交换的三种方式的对比
(1)电路交换:三步骤,建立连接-->传输数据-->连接释放。建立连接的时间比较长。且独占信道,适合传输数据量大的时候,信道利用率低且一旦出差错就会导致数据传输失败,无法控制。
(2)报文交换:不需要建立连接,随时发随时接收即可。结点具有存储转发的功能,每个结点接受整个报文之后进行检测,检测无误执行转发,故会存在延迟时间。缺点就是报文大小不确定,结点的存储管理不好控制,且延迟时间较长。
(3)分组交换:将报文划分为长度相同的分组,每个分组都有相应的原地址+目的地址+序号等信息,进行存储转发操作。好处是,分组可以并行进行转发,延迟时间缩短且因为分组大小固定所以易于存储的管理。缺点就是,因为每个分组都要加地址信息以及编号之类的,所以增加了传输的数据量。
5.3 数据链路层主要完成的功能
包括为网络层提供服务、链路管理、帧定界、帧同步、透明传输、差错控制、流量控制、随机访问介质访问控制(协议)
5.4 组帧的定义
组帧:包括帧定界、帧同步、透明传输
数据链路层将从网络层获得的IP数据包封装成帧,然后进行传输,封装成帧的时候要添加帧首部和帧尾部,用于提取出数据部分。
5.5 组帧的方式
(1)字符计数法:在帧首部添加计数字段,记录该帧数据的长度。
(2)字符填充的首位定界法:用特殊的字符去作为首位定界符。对于数据中可能出现的特殊字符,则在其前面加上一个转义字符,接收的时候自动去掉即可。
(3)零比特填充的首位定界标志:01111110作为开始和结束的表示,为了防止数据中出现这样的串而出现提前终止的情况,我们对数据中连续的11111后面加一个0,接收的时候相反处理即可,硬件处理。
(4)违规编码法:适用于冗余编码的时候,比如我们的差分曼彻斯特编码(由高到低表示0,则由低到高表示1,高高和低低就是违规编码),我们用违规编码作为定界符即可,但是只适用于冗余编码。
5.6 差错控制
检错编码(奇偶校验、CRC)和纠错编码(海明码)
5.7 流量控制
ARQ 自动重传请求
就是限制发送方的发送速度,使得接收方可以正确的接收数据。
-
停止等待协议:发送窗口大小=1,接受窗口大小=1 大部分时间都在等到消息,浪费了时间
-
后退N帧(GBN):发送窗口大小>1,接受窗口大小=1
-
选择重发(SR):发送窗口大小>1,接受窗口大小>1
这些包括了自动重传机制,即确认,超时重传机制可以确保可靠传输。
5.8 随机访问介质访控制机制
在局域网中是总线型的,广播式的发送,所以必须为了防止冲突采取一些措施。
-
随机接入系统ALOHA:
-
纯ALOHA:不监听信道,不按时间槽发送,随机重发。想发就发
-
时域ALOHA协议:监听信道,按照时间槽发送,控制“想发就发”的随意性
-
-
CSMA(载波监听多路访问):发之前要检测一下总线上是否有其他计算机在发送数据
-
1-坚持:没有空闲的就一直等
-
非坚持:没有空闲的就过一会儿来等
-
P坚持:空闲的时候以概率p传输
-
-
CSMA/CD(碰撞检测):先听后发、边听边发、冲突停发(防止浪费)、随机重发。适合有线网(局域网,如以太网)。 1)存在争用期,因为必须保证检测到冲突的时候数据还没发完,所以2*端到端的传播时间必须小于数据的发送延时。即可以确定最小帧长(以太网的最小帧长是64B) 2)随机重发的策略是二进制指数退避算法,从而防止再次冲突。
-
CSMA/CA(碰撞避免):包括预约信道、ACK、RTS、CTS,适用于无线网。并不能完全避免,只能尽量的避免,在发送的过程中不检测冲突。 1)数据发送前先预约信道,告诉其他设备我要发数据,在此期间你们别发。 2)随机重发的策略是二进制指数退避算法,从而防止再次冲突。
有CSMA/CA的原因是
-
无线局域网无法做到360度全面检测碰撞
-
会存在隐蔽站。例如当A和C都检测不到信号(A和C无法互相检测到对方,比如存在A和C中间有障碍物挡住,但是都可以传递到B时),认为信道空闲时,同时向信道B发送数据帧,这个时候就会导致冲突。
-
5.9 局域网
局域网是指在一个较小的地理范围内,将各种计算机、外部设备和数据库系统等通过双绞线、同轴电缆等连接介质互相连接起来,组成资源和信息共享的计算机互联网络。
5.10 数据链路层在广域网中的协议
(1)PPP协议:按字节传输的,点到点的协议,不可靠,只检错丢弃,不纠错,不适用序号和确认机制。支持全双工。
(2)HDLC(高级数据链路控制协议):面向比特,提供可靠传输(使用了编号和确认机制),用的是0比特插入法实现透明传输。
5.11 链路层设备(局域网中)
隔离冲突域,不隔离广播域
(1)网桥:一次只能转发一个帧。
(2)交换机:多端口的网桥,解决网桥一次只能转发一帧的不足。有直通式、存储转发式。
第六章:物理层
6.1 物理层作用
主要是规定了通信结点和通信链路之间的连接的接口的一些特性。包括机械特性、电气特性、功能特性和过程特性。规定了通信链路上传输的信号的意义以及电气特性。功能是在物理媒体上为数据端的设备透明的传输原始的比特流。
6.2 物理层主要设备
(1)中继器:起到的是信号再生的作用(数字信号),与放大器不同(模拟信号)。
(2)集线器:多端口的中继器。
(3)注意:物理层的设备均不支持存储转发功能,所以连接的两端必须使用同一个协议,且连接的两端是同一个局域网的不同的网段。 另外,物理层的设备不阻隔冲突域,也不阻隔广播域,它就是个最便宜的设备。
6.3 数据交换的方式
(1)电路交换:建立连接(独占),数据传输,连接释放。
(2)报文交换:结点具有存储转发功能,但是转发延迟的问题太大以及结点不好管理存储空间。
(3)分组交换:采用存储转发方式,限制了每次传送的数据块大小上限,把大的数据块划分成合理地小数据块,再加上控制信息构成分组。
分组交换又分为:数据报交换与虚电路交换(虚电路之所以是“虚”的,是因为这条电路不是专用的,每个节点到其他节点之间的链路可能有若干虚电路通过,也可能同时与多个节点之间建立虚电路)
第七章:常见题
7.1 说下浏览器请求一个网址的过程?
-
首先是解析域名,DNS进行,获得IP地址。然后端口号发送端随机分配,服务器是固定的80端口。
-
知道IP和端口号之后就可以建立3次握手建立TCP连接。
-
发送HTTP请求报文。
-
服务器处理浏览器发来的请求,返回要显示的页面html信息。
-
传输结束,4次握手释放连接。
-
显示页面。
7.2、三次握手
三次握手的过程就是TCP建立连接的过程,需要客户端和服务端总共发送3个包以确认连接的建立。
第一次握手:客户端将SYN标志位置为1,随机产生一个值Seq=J,并将该数据包发送给服务器,客户端进入SYN_SENT状态,等待服务器的确认。 第二次握手:服务器接收到数据报后,由包中的SYN标志位置1可知该客户端请求建立连接,则服务器包装一个标志位SYN和ACK都置为1,ack=J+1,并随机产生一个值seq=K的数据包,并将该数据包发送给客户端以确认连接请求,服务器进入了SYN_RCVD状态。 第三次握手:客户端接收到确认后,检查ack是否为J+1,ACK是否为1,如果正确,则包装一个标志位ACK置1,ack=K+1的数据包发送给服务器,服务器再检查ACK和ack,如果正确配对,则连接成功。客户机和服务器就进入了RSTABLISHED状态,完成三次握手,可以开始传输数据。
7.3、四次挥手
四次挥手即终止TCP连接,需要客户端和服务器共发送4个数据包来确认连接的断开。
由于TCP连接是全双工的,因此两个方向都要进行单独的关闭。
第一次挥手:客户端发送一个FIN标志位为1的数据包,用来关闭客户端到服务器端的连接,发送后,客户端进入FIN_WAIT_1状态,并停止发送数据。
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为接收的序号加一,服务器进入CLOSE_WAIT状态,并将剩下的数据发送完。
第三次挥手:服务器发送一个FIN标志位为1 的数据包,用来关闭服务器端到客户端的连接,发送后服务器进入LAST_ACK状态。
第四次挥手:客户端收到FIN后,进入TIME_WAIT状态,紧接着发送一个ACK给服务器端,确认序号为接收的序号加一,服务器收到后,进入CLOSED状态,完成四次挥手。
7.4、http与https的区别
http是超文本传输协议,信息是明文传输;
https是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的两种连接方式,用的端口也不一样,前者是80,后者是443。
http协议无需费用;
https协议需要申请证书,一般免费证书较少,需要一定费用。
http连接简单,无状态;
https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http更安全也更复杂。
7.5、对称加密与非对称加密
对称加密就是加密和解密使用同一个秘钥的方式,这种方式的问题在于如何将秘钥安全地发送给对方;而非对称加密是使用一对非对称秘钥,即公钥和私钥。 发送方使用接收方的公钥进行加密处理,接收方接受到加密信息后,用自己的私钥进行解密。虽然安全性保证了,但是比较慢,所以常用对称加密来传送消息,用非对称加密来发送秘钥。
7.6、TCP vs. UDP
共同点:
-
都属于传输层协议
不同点:
-
TCP是面向连接的,UDP是无连接的;
-
TCP是可靠的,UDP是不可靠的;
-
TCP是基于字符流的,UDP是面向报文的;
-
TCP仅支持点对点通信,UDP支持一对一、多对一、一对多、多对多的通信模式;
-
TCP有拥塞控制机制,UDP没有拥塞控制,适合流媒体通信;
-
TCP首部大小为20字节,UDP首部大小为8个字节。
7.7、输入网址到获取到网页的全过程
应用层:
(1)浏览器查询DNS,获取域名对应的IP地址,具体过程为:先在本地DNS服务器上查找,如果没有缓存信息,则采用迭代查询由本地域名服务器向根域名服务器、顶级域名服务器和权威域名服务器分别查询,找到域名对应的IP地址; (2)获得IP地址后,浏览器向服务器请求建立连接,发起三次握手;TCP连接建立后,浏览器向服务器发送HTTP请求;
传输层: 服务器接收到这个请求,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端;
网络层: 主要是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,通过查找路由表决定通过那个路径到达服务器,其中用到路由选择协议。
链路层: 包通过链路层发送到路由器,由ARP协议查找给定IP地址的MAC地址,得到回应后即可进行IP数据包的传输。
最终: 浏览器解析并渲染视图,若遇到js文件、css文件和图片等静态资源的引用,就重复上述步骤,向服务器请求这些资源;渲染结束后,呈现完整界面。
7.8、常见状态码及原因
1xx 【请求处理中】服务器收到请求,需要请求者继续执行操作 2xx 【请求成功】请求已成功被服务器接收、理解、并接受。 3xx 【重定向】客户端需要采取进一步的操作以完成请求 4xx 【客户端请求错误】客户端错误,请求包含语法错误或无法完成请求 5xx 【服务器错误】服务器在处理请求的过程中发生了错误
7.9、GET vs. POST
从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源; 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。
7.10、DNS寻址过程
(1) 客户机发出查询请求,在本地计算机缓存查找,若没有找到,就会将请求发送给dns服务器。 (2) 先发送给本地dns服务器,本地的就会在自己的区域里面查找,若找到,根据此记录进行解析,若没有找到,就会在本地的缓存里面查找。 (3) 本地服务器没有找到客户机查询的信息,就会将此请求发送到根域名dns服务器。 (4) 根域名服务器解析客户机请求的根域部分,它把包含的下一级的dns服务器的地址返回到客户机的dns服务器地址。 (5) 客户机的dns服务器根据返回的信息接着访问下一级的dns服务器。 (6) 这样递归的方法一级一级接近查询的目标,最后在有目标域名的服务器上面得到相应的IP信息。 (7) 客户机的本地的dns服务器会将查询结果返回给我们的客户机。 (8) 客户机根据得到的ip信息访问目标主机,完成解析过程。
7.11、拥塞控制和流量控制
所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接收。
使用滑动窗口协议可以实现对发送方的流量控制,滑动窗口协议包括GO-BACK-N(出错全重传)和SELECTIVE-REPEAT(选择性重传)。
而拥塞控制是指到达通信子网的一部分分组数量过多,是部分网络来不及处理,导致整个网络性能下降,会导致丢包和长时延等现象发生。手段有缓启动、拥塞避免(加法增、乘性减)、快重传、快恢复等。
7.12、其他
(1) 为什么TCP更可靠? 三次握手,超时重传,滑动窗口,拥塞控制。
(2) 那些场景使用TCP? 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
(3) ARP协议和ARP攻击 ARP协议基本没有对网络的安全性做任何思考。ARP应答中的IP地址和MAC地址中的信息是可以伪造的,并不一定是自己的真实IP地址和MAC地址,由此,ARP欺骗就产生了。
(4) ICMP协议 它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。