一图学完!计算机网络(TCP等)含面试题(上篇)

1.基本概念

1.1.OSI七层模型(一般了解即可)

1.应用层: 网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

2.表示层: 数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、EBCDIC、加密格式等

3.会话层: 建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话

4.运输层: 定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

5.网络层: 进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6)

6.数据链路层: 建立逻辑连接、进行硬件地址寻址、差错校验 [3] 等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

7.物理层: 建立、维护、断开物理连接。(由底层网络定义协议)

七层和四层模型关系对应
七层和四层模型关系对应

1.2.TCP/IP四层模型以及对应协议(重要)

1.应用层: FTP,DNS,HTTP,WWW,NFS
2.运输层: TCP,UDP,SPX
3.网络层: IP,ICMP,RIP,(路由器)
4.数据链路层: PPP,VLAN,MAC,(网桥,交换机)

在这里插入图片描述
TCP/IP协议组成

2.问题分析

2.1.TCP和UDP的区别

TCP: 基于字节流,面向连接,可靠的传输协议。(有拥堵控制,首部开销20字节。通过TCP传送的数据,无差错,不丢失,不重复,且按序到达。TCP连接为点到点,是全双工可靠信道。)

UDP: 基于数据报,无连接,不可靠的传输协议。(无拥堵控制,首部开销8字节。UDP尽最大努力交付,不保证可靠。UDP支持一对一,一对多,多对一和多对多的交互通信,是不可靠信道。)

2.2.TCP是如何保证数据可靠传输的

1.数据包校验和: 发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。

2.确认应答+序列号: TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

3.超时重传: 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

4。流量控制: TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
接收方有即时窗口(滑动窗口),随ACK报文发送。滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。

5.拥塞控制: 当网络拥塞时,减少数据的发送。
发送方有拥塞窗口,发送数据前比对接收方发过来的即时窗口,取小的值。

2.3.TCP的流量控制(接收方)

接收端在接收到数据后,对其进行处理。如果发送端的发送速度太快,导致接收端的结束缓冲区很快的填充满了。此时如果发送端依旧不断发送数据,那么接下来发送的数据都会丢包,继而导致丢包的一系列连锁反应,比如超时重传。而TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。

在TCP协议的报头信息当中,有一个16位字段的窗口大小。这个窗口大小表示的内容实际上是接收端接收数据缓冲区的剩余大小。这个数字越大,证明接收端接收缓冲区的剩余空间越大,网络的吞吐量越大。接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。而发送方根据ACK报文里的窗口大小的值的改变进而改变自己的发送速度。如果接收到窗口大小的值为0,那么发送方将停止发送数据。并定期的向接收端发送窗口探测数据段,让接收端把窗口大小告诉发送端。

在这里插入图片描述方便理解
原文详细链接

2.4.TCP的拥塞控制(发送方)

总的来说分为四个部分: 慢开始,拥塞避免,快重传和快恢复。

TCP传输的过程中,发送端开始发送数据的时候,如果刚开始就发送大量的数据,那么就可能造成一些问题。网络可能在开始的时候就很拥堵,如果给网络中在扔出大量数据,那么这个拥堵就会加剧。拥堵的加剧就会产生大量的丢包,大量的超时重传,严重影响传输。

所以TCP引入了慢启动的机制,在开始发送数据时,先发送少量的数据探路。探清当前的网络状态如何,再决定多大的速度进行传输。这时候就引入一个叫做拥塞窗口的概念。发送刚开始定义拥塞窗口为 1,每次收到ACK应答,拥塞窗口加 1。在发送数据之前,首先将拥塞窗口与接收端反馈的窗口大小比对,取较小的值作为实际发送的窗口。

拥塞窗口的增长是指数级别的。慢启动的机制只是说明在开始的时候发送的少,发送的慢,但是增长的速度是非常快的。为了控制拥塞窗口的增长,不能使拥塞窗口单纯的加倍,设置一个拥塞窗口的阈值,当拥塞窗口大小超过阈值时,不能再按照指数来增长,而是线性的增长。在慢启动开始的时候,慢启动的阈值等于窗口的最大值,一旦造成网络拥塞,发生超时重传时,慢启动的阈值会为原来的一半(这里的原来指的是发生网络拥塞时拥塞窗口的大小),同时拥塞窗口重置为 1。

相关概念: cwnd(拥塞窗口),SMSS(发送方的最大报文段的数值),ssthresh(慢开始门限)

慢开始和拥塞避免演示:在这里插入图片描述

流程分析:
//慢开始
if (拥塞窗口 cwnd < 慢开始门限 ssthresh) cwnd = cwnd * 2//拥塞避免
if (拥塞窗口 cwnd > 慢开始门限 ssthresh) cwnd = cwnd + 1//如果发生了拥塞(对网络中某一资源的请求超过了该资源能提供的可用部分,就叫拥塞)
if (拥塞窗口 cwnd == MAX 最大值) { ssthresh = MAX/2; cwnd = 1; }//重新开始执行慢开始算法

快重传和快恢复:
1.快重传:
1.1.快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样可以让发送方及早知道有报文段没有到达接收方。
1.2.发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
1.3.不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。

2.快恢复:
2.1.当发送端收到连续三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。
2.2.此时由于发送方认为网络很可能没有发生拥塞,因此不执行慢开始算法,即拥塞窗口cwnd现在不置一,而是设置为cwnd减半后的数值,然后开始执行拥塞避免算法,使拥塞窗口缓慢的线性增大。

快重传与快恢复演示:在这里插入图片描述
说明:当cwnd=16时(图中点4)出现了一个新的情况,就是发送方连续收到3个对同一报文段的重复确认(3-ACK)。发送方执行快重传和快恢复算法。 在图中点4,发送方知道只是丢失了个别的报文段,于是不启动慢开始,而是先进行快重传然后执行快恢复算法。 发送方设置调整门限值ssthresh=cwnd/2=8, 同时拥塞窗口cwnd=ssthresh=8(点5),然后进行拥塞避免算法
快重传:收到3个同样的确认就立刻重传,不等到超时。
快恢复:cwnd不是从1重新开始。

下篇的主要内容是:
TCP三次握手,四次挥手,SYN Flood攻击 以及 TCP“粘包”问题。以及思维导图
一图学完!计算机网络(TCP三次握手四次挥手)含面试题(下篇)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章