剑指offer之计算机网络(一) ---> 持续中

255 阅读8分钟

1、tcp/ip协议簇?

应用层: 决定了向用户提供应用服务时通信的活动;

比如:FTP(文件传输协议)、 DNS(域名系统)、HTTP(超文本传输协议)。

传输层: 传输层为上层应用层提供网络连接中的数据传输。

比如:TCP(传输控制协议)、UDP(用户数据包协议)。

网络层: 用来处理在网络上流动的数据包、数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方的计算机,并把数据传送给对方。

比如:IP协议、ICMP协议(测试网络属否通畅):

数据链路层: 用来处理连接网络的硬件部分。硬件上的范畴都属于链路层的作用范围。

比如:控制操作系统、硬件的设备驱动、NIC(网卡)及光纤。

2、传输层的udp协议?

UDP不提供复杂的控制机制,利用ip提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

由于udp面向无连接,它可以随时发送数据,加上udp本身的处理简单高效。

  • 即时通信(视频、音频)
  • 广播通信

3、传输层的tcp协议?

udp是一种没有复杂的控制,提供面向无连接通信服务的一种协议。自己只做最基本的传输功能。而tcp与udp区别相当大,它是对数据的传输有一系列控制的协议。

特点和目的:tcp通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

4、tcp的序列号和确认应答?

  • 确认应答:在tcp中,当发送端的数据到达接受主机后,接收端主机会返回一个已收到消息的同志,这个消息叫做确认应答(ASK); 当对数据有疑问时,会发送一个否认应答(NACK);
  • 序列号:如何判断识别是否已经接受数据;又能够判断是否需要接受的机制。序列号是按顺序给发送的每一个字节(8位字节)都标上号码的编号;接收端查询接收数据tcp首部中的序列号和数据的长度。将自己下一步的序号作为确认应答反送回去。就这样通过序列号和确认应答机制实现可靠性的传输。

5、重发超时如何确定?

  • 定义:重发超时指的是在数据重新发送之前,在等待确认应答期间那个时间间隔、如果超过了这个时间间隔仍未收到确认应答,发送端将进行数据重发。
  • 确定标准:最理想的是,找到一个最小时间,它能保证“确认应答一定在这个时间间隔内会返回”。但是这个时间随着数据包途径的网络环境的变化,会发生变化。即使是同一个网络,不同时段的网络拥堵程度也是不同的。因为tcp要求不论处在何种的网络环境中都必须保证传输的高性能。所以在每次发包时都会计算往返的时间(RTT)及其偏差。将这个往返的时间和偏差相加,重发超时的时间就比这个值大一点点。
  • 具体标准:在BSD的linux以及window系统中,超时一般是0.5秒的倍数进行控制,偏差的最小时间也是0.5秒,因此最小的超时时间是1秒,由于最初的数据包还不知道往返时间,所以其重发时间一般是6秒。如果重发之后,还是收不到应答,则超时时间会指数型增长,超过一定次数后,就会被判断为网络故障,强制关闭连接,并通知应用程序。

5、tcp和udp的区别?

1、基于连接和无连接;

2、对系统资源的需求(tcp的数据包一般比udp的大)

3、udp的程序结构比较简单;

4、tcp保证正确性;udp可能出现丢包;并且tcp可以保证数据包的顺序性而udp不行。

6、tcp的三次握手?

过程:

1、client会向server发送一个含有同步(SYN=1)序列号(Seq= X)的数据报文,请求建立连接;
2、server收到client的报文后,会回复带有确认应答(ASK=X+1)和同步(SYN=1)序列号(seq=Y)标志位的数据报文给client。
3、client收到报文后,会在发送一个确认应答(ACK=Y+1)和序列号(seq=Z);

seq:序列号(根据序列号标示某个操作)

ack:确认标志。格式:ack = seq + 1;

SYN:同步标志

同步序列号编号该标志仅在三次握手建立tcp连接时有效,它提示tcp连接的服务端检查序列编号,该序列编号为tcp连接初始端(一般是客户端)的初始序列编号。

FIN:结束标志

带有该标志位的数据包用来结束一个tcp回话。

6、tcp的四次挥手?

过程:

1、client发送一个(FIN=1) + (ACK=Z)的报文,用来关闭和server的连接;
2、server收到请求的断开的报文后,首先回复一个ACK;确认收到要断开连接的请求
3、server向client发送一个确认断开连接的请求;FIN+ACK
4、client向server发回ACK报文确认。

7、为什么是握手是三次挥手是四次?

因为当server收到client端的syn连接请求报文后,会回复一个syn(同步)+ask(应答)报文; 但是关闭的时候,当server收到client端收到fin请求关闭的请求后,socket可能并不会立即关闭,所以只能先恢复一个ack表示收到。只有等server端所有的报文都送完了,才会向client段回复一个fin+ack报文,表示可以断开连接了。因此是四次挥手。不能一次性断开。

7、tcp的滑动窗口?

窗口的大小就是无需等待确认应答而可以继续发送数据的最大值(由接收端主机控制),图中窗口大小为4个段。这个机制实现了使用大量的缓冲区,通过对多个段进行确认应答。 图中发送数据中高亮圈起的部分正是前面所提到的窗口,在这个窗口内的数据即使没有收到确认应答也可以被发送出去,当然如果没有整个窗口的确认应答没有到达之前,其中部分数据出现丢包,那么仍然需要重传。

在收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置,这样可以顺序的将多个段同时发送提高通信性能。这种机制称为滑动窗口。

窗口探测:为了防止这个窗口更新的数据包在传输过程中丢失,发送端会主动进行窗口探测。此数据端仅包含一个字节以获取窗口大小的信息。

注意:

重发机制:当某一报文,发送端会一直收到序号为1001的确认应答;这个确认应答好像在提醒发送端“我想接收的是从1001开始的数据”。因此,在窗口比较大的,又出现报文丢失的情况下,同一个序号的确认应答被不断重复的返回,而发送端主机如果连续3次收到同一个确认应答,就会对其所对应的数据进行重发。这种机制被称为高速重发控制。

8、tcp的拥塞控制?

有了tcp的窗口控制,收发主机之间即使不再以单位发送应答,也能够连续的发送大量的数据包,而然如果在一开始传输时,就发送大量的数据,也可能会引起其他问题。为了防止突然的发送大量数据引起的网络流量瘫痪,引入一个叫做满启动的算法,进行发送数据量的控制。

首先,为了在发送端调节所需要发送的数据量,定义了一个叫做“拥塞窗口”的概念,于是在满启动的时候,将这个拥塞窗口的大小设置为1个数据端的大小(1mss)发送数据,之后每收到一次确认应答(ack),拥塞窗口的值就增加,在发送数据包的时候,将拥塞窗口和接收端主机通知的窗口大小,做比较。然后取最小值。发送比其更小的数据量。

不过随着包的每次往返,拥塞窗口会以指数级的形式增长,为了避免因此引起的网络堵塞,引入了慢启动阈值的概念,每当超过这个阈值之后,只允许以下比例放大拥塞窗口。

tco的通信开始时并没有设置慢启动阈值,而是在发生超时重传时才会设置为拥塞窗口的一半。在发生重复应答引起的高速重发控制时,慢启动阈值被设置为拥塞窗口的一般大小,然后将拥塞窗口设置为阈值的大小+3个数据端的大小。