目录
一、应用层:
1、DNS域名解析协议:
2、FTP文件传输协议
3、TFTP简单文件传输协议
4、DHCP动态主机配置协议
5、电子邮件协议
6、HTTP超文本传输协议:
6.2、http和https 的区别
7、web页面请求过程:
二、传输层
1、传输层:为应用层提供通信服务;向高层屏蔽了下面网络核心中的细节,使得在传输层看上去就好像是传输层实体之间建立的一条端到端的逻辑通信信道。
2、IP协议能将客户端的分组按照目的地址发送给服务器,为什么还需要传输层?
3、用户数据报协议UDP:
4、传输控制协议TCP:
4.1、为什么需要TCP协议
4.2、为什么序列号需要随机产生
5、TCP三次握手:
6、四次挥手:
7、为什么要三次握手,而不能是两次
9、在四次挥手中,为什么客户端最后要等待2MSL后才能释放?
10、TCP如何保证数据传输的可靠性
11、滑动窗口
12、传输协议
13、流量控制
14、拥塞控制
15、流量控制和拥塞控制的区别
16、TCP粘包和拆包问题:
三、网络层
1、网络层
2、网络层和数据链路层之间的关系
3、IP分址
4、IP分片和重组(首部固定>=20字节)
5、IPv6:与IPv4之间通过双协议栈进行通信
6、ARP地址解析协议
7、NAT网络地址转换协议
7.1、虚拟专用网VPN
8、网际控制报文协议ICMP
9、路由器的结构
10、路由分组转发流程
11、路由选择协议
四、数据链路层
1、数据链路层
2、基本问题:
3、信道分类
4、CSMA/CD协议
5、MAC地址(硬件地址)
6、适配器
7、局域网
8、以太网
9、各层之间的设备
DNS是一个分布式的数据库。
(1)、作用:从域名中解析出IP地址,提供了主机名和IP之间的相互转换的服务。
(2)、DNS使用的是UDP协议,端口号为53。因为使用了UDP,故需要域名解析器和域名服务器自己保证数据传输的可靠性。
(2.1)、为什么要使用UDP:因为UDP比较快,不需要像TCP一样建立连接
(3)、域名解析的方式:首先是检查主机缓存是否有域名到IP的映射,有则结束,没有则向本地域名服务器进行查询,看是否查询到对应域名主机的IP地址,查到,则返回,未查到,则继续查询其他域名服务器(查询方式为递归查询或迭代查询),从根域名服务器开始查询,自上而下查询。
(4)、为什么域名可以查到对应主机,还需要IP地址呢?
因为IP地址是固定的长度吗,,而域名的长度不固定,所以机器处理起来会计较困难。
(5)、域名服务器中的高速缓存的作用:减轻服务器的负担,提高DNS的查询速度,提高性能。每过一段时间高速缓存就会删除数据,目的是为了保持域名和域名服务器的一致性。
(6)、数据头部:1、标识符(ID,16位);2、标志符(flag,16位):标志查询方式;等等
(1)、链接方式:TCP链接。
(2)、FTP在使用过程中需要建立两条TCP链接:第一条为控制连接,端口号为20;第二条为数据传输连接,端口号为21。
(3)、使用两条连接的作用:使协议更简单和更容易实现,同时在传输文件时,还可以通过控制连接来控制文件的传输。同时,由于控制连接和数据传输连接的分离,使得主机之间的控制报文传输和数据报文传输不会发生混乱。
(1)、连接方式:UDP连接
(2)、每次传输文件长度为512字节,最后一个数据报的长度可以不足512字节。若最后一个数据报的长度刚好为512字节,那么发送端还需要发生一个只包含头部的数据报,以表示数据发送完毕。
(1)、连接方式:UDP连接,端口号:67/68
(2)、自动配置用户的IP地址,网关IP地址,子网掩码等
(3)、工作过程:当计算机接入一个新的网络当中时,需要动态的分配其IP地址和其他东西
主机向DHCP服务器发送一个DHCP报文请求,DHCP服务器接收后,响应该报文,后向主机发送一个DHCP报文(该报文中就携带租用给主机的IP地址和其他一些信息)(目的IP全为1,主机IP全为0)
1)、客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
2)DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。
3)、如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
4)、DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。
(1)、连接方式:TCP连接,
(2)、组成:用户代理,邮件服务器、邮件协议
(3)、邮件协议包括:发送协议:SMTP(161/162);接收协议:POP3(110),
HTTP(80),IMAP(143)
(4)、工作方式:用户代理--->(SMTP/TCP)--->邮件服务器------>(SMTP/TCP)--->邮件服务器--->((POP3/IMAP/HTTP)/TCP)。
(5)、SMTP只能发送ASCII码。
(6)、POP3是把邮件从邮件服务器下载下来,存在客户端中,并删除服务器中的邮件;而IMAP是将邮件存放在邮件服务器上,保持同步更新,也可以将邮件下载到客户端。
(7)、为什么不能把邮件服务器直接装到用户计算机中:
1)、计算机没有足够的内存空间来运行
2)、计算机没有足够的CPU资源来运行服务器,因为服务器需要每时每刻都在运行且连接着互联网。
(1)、连接方式:TCP连接,端口号:80
(2)、请求报文格式:
第一行包含:请求方法、URL、协议版本
接下来多行:请求首部,每个首部都有一个自己的名称和其对应的值
接下来一行:空行,用于分隔首部和内容主体
接下来多行:请求内容主题
GET http://www.example.com/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Host: www.example.com
If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT
If-None-Match: "3147526947+gzip"
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 xxx
param1=1¶m2=2
URL:统一资源定位符
首部方法:
GET和POST的区别:
(3)响应报文格式:
第一行包含:协议版本、状态码以及描述
接下来多行:是首部内容
一个空行:分隔首部和内容主体
最后是响应的内容主体
HTTP/1.1 200 OK
Age: 529651
Cache-Control: max-age=604800
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 648
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Nov 2020 17:53:39 GMT
Etag: "3147526947+ident+gzip"
Expires: Mon, 09 Nov 2020 17:53:39 GMT
Keep-Alive: timeout=4
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Proxy-Connection: keep-alive
Server: ECS (sjc/16DF)
Vary: Accept-Encoding
X-Cache: HIT
Example Domain
// 省略...
状态码:
(4)、HTTP1.0,HTTP1.1,HTTPS的区别:
1)HTTP1.0:非持续链接(短连接):每次HTTP请求都需要重新建立TCP连接;缺点:时 间消耗大,对服务器负担重(因为每一次TCP连接都需要服务器响应连接)
2)HTTP1.1:持续连接(长连接):客户端和服务器建立连接后,在后面一段时间内该连接都持续有效。减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。(断开方式:主动释放,或长时间内客户端和服务器没有数据交互,服务器主动释放连接)
工作方式:
3)HTTPS:在应用层和传输层之间加了一层SSL/TLS安全协议传输层。在TCP建立三次握手后,还需要进行四次SSL/TLS握手,这样才能进行报文的加密传输。
(5)、HTTP传输都是无状态的明文传输,同一客户多次访问同一个服务器上的同一个资源时,服务器返回的响应和第一次返回的响应相同。故在HTTP1.1中,可以使用cookie,用于跟踪用户信息,并将服务器返回的cookie保存在客户端,当客户端下次继续访问同一资源时,就将该cookie一同发给服务器。
(1)、session:和cookie一样,都是客户端和服务器之间保持状态的解决方案,都是用于跟踪用户信息
(2)、cookie是将数据保存在客户端上,客户端请求服务端时会将cookie一起提交;而session是将数据保存在服务器上,主要是通过检索sessionid查看状态,保存sessionid 的方法可以采用cookie,如果cookie被禁了的话,则可以采用URL重写机制(把会话ID保存在URL中),也可以保存在数据库、文件和内存中。对于安全性而言,session更安全
(3)、cookie只能存储字符串,而session能存储任何数据类型,所有当考虑数据的复杂性时,首先使用的是session
(4)、cookie和session的存储数据的大小限制也不同:cookie数据存储的大小受浏览器的限制,而session数据的存储大小受当前内存的限制
(5)、
(1)、端口号不同,http是80,而https 是443
(2)、传输方式不同,http是明文传输,而https 是密文传输
(3)、开销不一样,由于https是加密传输,所以,https会带来更大的CPU和内存的消耗
(1)、因为网络层是提供主机到主机之间的通信,数据通信还保留在网络层,而无法到达应用进程;而传输层是提供端到端之间的通信,能够将数据分组交付到应用进程中。
(1)、特点:无连接的、尽最大可能交付的、没有拥塞控制的、面向报文的用户数据报协议,支持一对一,一对多,多对一,多对多的交互通信。(常用在流媒体中)
(2)、优点:头部开销小(8字节),传输速度快,不需要维护复杂的连接状态,对应用层传下来的报文,直接加上UDP头部,就交付给网络层。
(3)、缺点:因为没有建立连接,所以在传输过程中可能会出现错误(如报文丢失,报文出错,乱序等等),那么就需要用户进程来保证数据传输的可靠性。
(4)、首部:其中伪首部只是临时添加到UDP数据报中,用于计算校验和;伪首部既不向下传,也不向上递交,只是为了计算检验和而临时添加的。
(1)、特点:面向连接的、提供可靠交付的、有流量控制和拥塞控制的、面向字节流的传输控制协议,只支持一对一,全双工通道。
(2)、优点:可靠传输,保证数据传输的可靠性,按序交付给应用进程。
(3)、缺点:头部开销大(最少20字节,最多60字节),且需要维护复杂的链接。
(4)、首部:
(1)、因为IP层是不可靠的,保证不了数据的可靠交付、保证不了数据的按序交付、也保证不了数据的完整性,而TCP协议保证了数据的可靠交付。
(1)、防止历史的报文被下一个相同的四元组的连接接收
(2)、为了安全性
服务器被动连接(创建一个传输控制块TCB,准备接受客户进程的连接请求,进入listen((收听)状态),客户端主动连接
(1)、客户端请求建立连接,向服务器发送一个同步报文(SYN=1),并随机设置一个初始序列号x(seq=x),并进入SYN-SENT(同步已发送)状态。(消耗一个序列号,不可带数据)
(2)、服务器收到连接请求后,如果同意建立连接,则向客户端发送一个同步确认报文(SYN=1,ACK=1),并随机设置一个初始序列号y(seq=y),确认号为ack=x + 1,序列号为 seq = y,并进入SYN-RCVD(同步确认)状态。(消耗一个序列号,不可带数据)
(3)、客户端收到确认报文后,向服务器端发送确认报文(ACK=1),确认号为ack=y + 1,序列号为seq = x + 1,客户端进入ESTABLISHED(已建立连接)状态。(带数据则消耗一个序列号,不带数据,则不消耗一个序列号)
(4)、服务器端收到确认报文后,也进入ESTABLISHED(已建立连接)状态。
(1)、客户端向服务器发送连接释放报文(FIN=1,ACK=1),主动关闭连接,同时等待服务器的同意
(2)、服务器收到释放请求后,立即发出确认报文(ACK=1),此时TCP连接处于半关闭状态。
(3)、当服务器向客户端发送完数据后,发送连接释放报文(FIN=1,ACK=1),主动关闭连接,同时等待客户端的同意
(4)、客户端收到释放请求报文后,立即发送确认报文(ACK=1),同时进入TIME-WALT(时间等待)状态 ,此时客户端的TCP还没有释放,只有等2MSL(最长报文寿命)结束后才释放;而服务器端只要收到确认就释放连接。
(1)、防止已过期的连接请求,发送到服务器,从而使服务器处于半连接状态,因而产生错误和浪费资源。
(2)、同步序列号,告诉对方自己的初始序列号,和知道对方的初始序列号。
8、为什么不能是四次握手?
(1)、四次握手是将服务器对客户端发来的连接请求的确认和服务器对客户端的连接请求分开发送,因为两者没有任何关联,所以可以在一个数据报中发送,从而节约资源和减少建立连接时间。
(1)、确保客户端发送的最后一个确认报文,服务器端能够收到。(如果服务器端没有收到,那么服务端将重传连接释放请求报文,客户端刷新2MSL)
(2)、防止已失效的连接请求报文出现在之后的连接中(因为TCP在2MSL中使用不同的序列号,所以,在这段时间内可以基本保证在这次的连接中已过期的连接请求报文都从网络中消失)
(1)、TCP提供了检验和、序列号/确认应答机制,超时重传、滑动窗口、流量控制、拥塞控制等方法
(1)、滑动窗口既提高了报文传输的效率,也避免了发送方发送过多的数据而导致接收方无法正常处理的异常,起到了一个限流的作用
(2)、窗口是缓存中的一部分,在发送方和接收方各有一个窗口(发送窗口和接收窗口),接收方通过TCP报文中的窗口字段,告诉发送方,自己窗口的大小,从而发送方根据这个值设置自己的发送窗口的大小。保证了发送方发送的数据,对接收方来说都有能力可以接收。在发送窗口中的字节都是允许被发送的,在接收窗口中的字节也都是被允许接收的。
(3)、发送窗口:其中的字节是已经发送出去的,但还未收到确认。大小由流量控制窗口和拥塞窗口决定,取其最小值。
(1)、停止等待协议:发送窗口=1,接收窗口=1,及发送方发送一个数据报后,只有等到接收到确认报文后,才能发送下一个报文
(2)、go-back-n协议:发送窗口>1,接收窗口=1,必须按序接收,发送方可以发送多个报文,而接收方只能一次接收一个报文,但接收方可以累计确认报文后,再发送确认报文(确认报文号为按序到达的最后一个报文的确认报文),这样就不用接收一个报文,就发送一个报文。如果报文不是按序到达接收端,那么接收端在接收到无序的报文时就会发送接收窗口中待接收报文前的一个确认报文,当发送端连续收到三个重复报文,那么接收端就立即重传。
(3)、sr:发送窗口>1,接收窗口>1,可以乱序接收,非累积确认。
(1)、控制发送方的发送速率,保证接收方能够来得及接收
(2)、接收方可以通过TCP报文中的窗口字段控制发送方的发送窗口值的大小,从而影响发送方的发送速率。
(3)、当接收方的发给发送方的窗口值为0时,发送方将不在发送报文,发送方将设置一个持续计时器,在这段时间内将等待接收方发送的非0窗体的通知,若接到,则开始传输,没有收到,那么到达计时器所设置的时间后,发送方将发送一个字节的探测报文,而接收方接收到该报文后,也将自己的窗口值设置在TCP报文中,若依然为0,则刷新计时器,否则就打破死锁,重新传输报文。
(1)、网络拥塞:对网络资源的需求大于可用的网络资源。如果网络出现拥塞,分组将丢失,那么发送方将继续重传分组,这将导致网络拥塞程度更高。
(2)、拥塞控制:防止过多的数据注入到网络中,这样可以防止网络过载。当网络出现拥塞时,将控制发送方的发送速率。
(3)、拥塞控制算法:慢开始,拥塞避免,快重传,快恢复
发送方维护着一个拥塞窗口,并设置一个慢开始门限ssthresh
(情况1:遇到超时:拥塞窗口值设为1,慢开始门限减半,从新开始慢开始;情况2:遇到三个重复确认,慢开始门限减半,拥塞窗口值为慢开始门限,开始拥塞避免)
(1)、拥塞控制是一个全局性的过程,包括网络中的所有主机和路由器
(2)、流量控制是指点对点的通信量的控制,是端到端的问题
(1)、粘包:发送的数据包(消息)小于一次tcp报文所能传输的最大值,由于发送速度过快,此时TCP在封装过程中会将多个完整的消息封装成一个TCP数据包
(2)、拆包:发送的数据包(消息)超过一次tcp报文所能传输的最大值时,就会将一个数据包拆成多个最大tcp长度的tcp报文分开传输。进行MSS(最大报文长度)大小的TCP分段,当(TCP报文长度-TCP头部长度)>MSS的时候将发生拆包。
(3)、解决办法:
(1)、负责主机与主机之间的通信,向上层提供简单灵活的、无连接的、尽最大努力交付的数据报服务
(2)、使用IP协议,可以把异构的物理网络连接起来,使得在网络层看来就好像是一个统一的网络。
(1)、网络层提供的是主机与主机之间的通信,IP地址是网络层及以上各层使用的地址是一种逻辑地址,负责的是在没有直连的两个网络之间的通信
(2)、数据链路层负责两段链路之间的通信,而Mac地址是数据链路层和物理层使用的地址,提供的是两个直连的通信设备之间的通信
(3)、在数据传输过程中,数据包中的源IP,目的IP都不会发送变化,而源MAC地址和目的MAC地址在一直变化
(1)、分类:IP地址 ::= {<网络号>, <主机号>}
(2)、划分子网:主机号中,拿出一部分作为子网号,把两级IP划分为三级IP;要使用划分子网,就必须要子网掩码(网络号和子网号全位1,主机号全为0);注意在外部网络看来,是不存在子网的;IP地址 ::= {<网络号>, <子网号>, <主机号>}
(3)、无分类地址:前面为网络前缀,后面为主机号;表现形式:a.b.c.d/x 其中x为网络前缀位数
(1)、每种数据链路都有一个最大传输单元MTU(加上头部的IP数据报),且每种数据链路的MTU都是不同的(因为每种数据链路的使用目的不同),所以,IP数据包大于MTU时,就会被分片(分片过后的IP数据包,会在IP头部中的标识,标志,片偏移中标记),经分片过后的IP数据包,不会在路由器中重组,只有在主机中重组
(2)、由于分片在传输过程中会遇到分片丢失,一旦有一个分片丢失,那么整个IP数据报都将作废,所以,对于TCP来说,在TCP层引入了MSS,也就是在TCP层进行分片,而不是在IP层分片;而对于UDP来说,尽量不要发送大于MTU的数据报
(1)、功能:通过目的IP地址得到目的MAC地址
(2)、如果主机A知道主机B的IP地址,但是ARP高速缓存中,没有该IP地址到MAC地址的映射,那么主机A将通过广播的方式发送ARP请求分组,主机B在收到该请求后,将响应该请求,主机B将发送ARP响应分组给主机A告诉其MAC地址,主机A在收到响应后,将其主机B的IP地址到MAC地址的映射写入其高速缓存中。
(1)、功能:将私有IP+端口号转换成公有IP,也被叫做网络地址与端口转换NAPT
(2)、缺点:外部无法主动与内部服务器建立连接;转换表生成和转换过程中会产生其性能的消耗;若NAT重启,那么之前建立的连接都将重置
(1)、用于内部网络通信,不于外部网络通信,其IP地址是专用于内部通信的地址(已经分块好了的),不同的专用网,可以使用相同的IP地址。
(2)、虚拟专用网可以使用公用的互联网作为本机构各个专用网之间的通信载体。
(1)、作用:为了更有效的转发IP数据报和提高交付成功的机会。封装在IP数据报中,但并不属于高层协议,而是属于网络层协议
(2)、主要分为差错报告报文和询问报文
(3)应用:
(4)、8字节,前4字节:类型、代码、检验和;后4字节:与类型有关
(1)、路由器从功能上分:路由选择和分组转发
(2)、路由器中维护着一张表,实时更新
(1)、自治系统AS:自治系统AS是在单一技术管理下的一组路由器,在自治系统中,所有的路由器的路由选择算法都是一样的,而不同的自治系统,其路由选择算法可以不同
(2)、路由选择协议都是自适应的,可以根据网络通信量和拓扑结构的变化而做出相应的变化,属于动态路由选择策略
(3)、内部网关协议:RIP,OSPF
(4)外部网关协议:BGP
(1)、数据链路层是两个通信节点之间的数据传输;是将实现控制数据传输协议的硬件和软件加到链路上,即就构成了数据链路层
(2)、数据链路层是在适配器上封装数据的
(1)、封装成帧:将网络层传下来的数据,加上链路层首部(SOH)和尾部(EOT),封装成数据帧
(2)、透明传输:在数据中添加转义字符(ESC),以防引起数据传输错误
(3)、差错检测:接收方通过发送和接收双方规定好的检测方法,检测数据是否出错;
(1)、点对点信道:一对一通信;PPP协议
(2)、广播信道
(1)、载波监听多点接入/碰撞检测协议
(1)、数据链路层地址,存放于适配器的ROM中
(1)、进行计算机与外界局域网之间的连接
(1)、指在某一区域内由多台计算机互联成的计算机组
(2)、特点:局域网是一种典型的广播信道,网络为一个单位所拥有,且地理范围和站点数目均有限,局域网中的所有主机可以共享资源
(3)、分类:主要有以太网、令牌环网、FDDI和ATM等局域网技术
(1)、以太网是一种星型拓展结构的局域网
(2)、在物理层对可以用集线器对以太网进行扩展,优点是扩展了以太网,但缺点是碰撞域扩大了,但吞吐量并没有提高
(3)、在数据链路层上扩展以太网可以通过交换机,优点是扩展了以太网,提高了可靠性,但是增加了存储转发时延
(4)、交换机:交换机具有自学功能,学习的是如何交换自己的转发表的内容,交换表中存储着MAC地址与接口之间的映射
(1)、网络层以上(网关);网络层(路由器);数据链路层(交换机);物理层(集线器)