计算机网络知识点整理(2)

1、子网划分,子网掩码?

子网掩码是一个应用于TCP/IP网络的32位二进制值,它可以屏蔽掉ip地址中的一部分,从而分离出ip地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。 

1)使用TCP/IP协议的两台计算机之间进行通信时,我们通过将本机的子网掩码与接受方主机的ip地址进行’与‘运算,即可得到目标主机所在的网络号,又由于每台主机在配置TCP/IP协议时都设置了一个本机ip地址与子网掩码,所以可以知道本机所在的网络号。 

通过比较这两个网络号,就可以知道接受方主机是否在本网络上。如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。在这个过程中你可以看到,子网掩码是不可或缺的! 

2)如何用子网掩码得到网络/主机地址?过程如下: 
1.将ip地址与子网掩码转换成二进制; 
2.将二进制形式的ip地址与子网掩码做'与'运算,将答案化为十进制便得到网络地址; 
3.将二进制形式的子网掩码取'反'; 
4.将取'反'后的子网掩码与ip地址做'与'运算,将答案化为十进制便得到主机地址。 

3)A类网络缺省子网掩码:255.0.0.0 
B类网络缺省子网掩码:255.255.0.0 
C类网络缺省子网掩码:255.255.255.0 

4)子网划分将会有助于以下问题的解决: 

巨大的网络地址管理耗费。路由器中的选路表的急剧膨胀。IP地址空间有限并终将枯竭。

1--如何判断是否做了子网划分? 
如果它使用了缺省子网掩码,那么表示没有作子网划分;反之,则一定作了子网划分。 

2--如何计算子网地址? 
将ip地址与子网掩码的二进制形式做'与',得到的结果即为子网地址。 

3--如何计算主机地址? 
先将子网掩码的二进制取'反',再与ip地址做'与'。 

4--如何计算子网数量? 
1.观察子网掩码的二进制形式,确定作为子网号的位数n; 
2.子网数量为2的n次方-2。

5--如何计算总主机数量,子网内主机数量? 
总主机数量=子网数量×子网内主机数量 

6--计算ip地址范围 
1.写出二进制子网地址; 
2.将子网地址化为十进制; 
3.计算子网所能容纳主机数; 
4.得出ip范围(起始地址:子网地址+1;终止地址:子网地址+主机数) 


2、IP地址的分类?

IPv4地址分为5类。A、B、C、D、E。有3段保留IP地址以及部分特殊用途地址。

一个A类包含256*256*256个地址,如10.0.0.0/8
一个B类包含256*256个地址,如172.16.32.0/16
一个C类包含256个地址,如192.168.1.0/24

A类地址的标志是第一个字节数值为1---126     如:10.1.1.1和  100.1.1.1
B类的标志是第一个字节数值为128---191     如:172.16.1.1   188.1.1.1
C类的标志是第一个字节数值为192---223     如:192.168.1.1  200.1.1.1
D类的标志是第一个字节数值为224---239     如: 224.0.0.9
E类的标志是第一个字节数值为240---255

其中:A、B、C三类地址在网络中可以分配给主机使用。D类地址是组播地址,代表一组计算机。E类地址是保留的。


3、DNS概念用途及查询算法?

每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。

1)主机名到IP地址的映射有两种方式:

--静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;

--动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。

2)常用的资源记录类型

A 地址 此记录列出特定主机名的 IP 地址。这是名称解析的重要记录。

CNAME 标准名称 此记录指定标准主机名的别名。

MX邮件交换器此记录列出了负责接收发到域中的电子邮件的主机。

NS名称服务器此记录指定负责给定区域的名称服务器。


4、TCP报文段的格式字段及意义?

TCP报文段首部(20个字节)

---源端口和目的端口:各占2个字节,16比特的端口号加上32比特的IP地址,共同构成相当于传输层服务访问点的地址,即“插口”;这些端口可用来将若干高层协议向下复用;

---序号:占4个字节,是本报文段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而起数据供100字节,则下一个报文段的序号就是400;

---确认序号:占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;

---数据偏移:占4比特,表示数据开始的地方离TCP报文段的起始处有多远。这实际上就是TCP报文段首部的长度。由于首部长度不固定,因此数据偏移字段是必要的。

---保留字段: 6比特,供今后使用,目前置为0。

---紧急比特URGent:当URG=1时,表明此报文应尽快传送,而不要按原来的排队顺序来传送。与“紧急指针”字段配合使用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接收方可以知道紧急数据共有多长;

---确认比特ACK:只有当ACK=1时,确认序号字段才有意义;

---急迫比特PSH:当PSH=1时,表明请求远地TCP将本报文段立即传送给其应用层,而不要等到整个缓存都填满了之后再向上交付。

---复位比特ReSeT:当RST=1时,表明出现严重差错,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个非法的报文段或拒绝打开一个连接;

---同步比特SYN:在建立连接时使用,当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,在发回的报文段中使SYN=1和ACK=1。因此,SYN=1表示这是一个连接请求或连接接受报文,而ACK的值用来区分是哪一种报文;

---终止比特FINal:用来释放一个连接,当FIN=1时,表明欲发送的字节串已经发完,并要求释放传输连接;

---窗口:占2字节,表示报文段发送方的接收窗口,单位为字节。此窗口告诉对方,“在未收到我的确认时,你能够发送的数据的字节数至多是此窗口的大小。”

--通知窗口:接收端根据其接收能力许诺的窗口值,是来自接收端的流量控制。接收端将通知窗口的值放在TCP报文的首部中,传送给对方。

---拥塞窗口:是发送端根据网络拥塞情况得出的窗口值,是来自发送端的流量控制。

---检验和覆盖了整个的TCP报文段:TCP首部和TCP数据。这是一个强制性的字段,由发端计算和存储,由收端进行验证。

---选项字段允许每台主机设定能够接受的最大TCP载荷能力(缺省536字节) 。


5、UDP报文段的格式字段及意义?

UDP数据段格式:

源端口号(16

目的端口号(16

长度(16

校验和(16

数据(若有的话)

长度UDP报头和UDP数据的长度。

校验和UDP报头和UDP数据字段两者的校验和。(加伪首部)


6、TCP通过哪些措施,保证传输可靠?

1)将数据截断为合理的长度。

2)超时重发。

3)对于收到的请求,给出确认响应。之所以推迟,可能是要对包做完整校验。

4)校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据。

5)对失序数据进行重新排序,然后才交给应用层。

6)对于重复数据,能够丢弃重复数据。

7)TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出。

TCP使用的流量控制协议是可变大小的滑动窗口协议。

--字节流服务:

两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。

TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。


7、三次握手、四次断开过程?

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。

一个完整的三次握手也就是请求---应答---再次确认。

四次分手:

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

---为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

---为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。


8、滑动窗口协议与停止等待协议的区别?

---滑动窗口协议,是TCP使用的一种流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。

注意事项

1)发送方不必发送一个全窗口大小的数据。

2)来自接收方的一个报文段确认数据并把窗口向右边滑动,这是因为窗口的大小是相对于确认序号的。

3)窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。

4)接收方在发送一个ACK前不必等待窗口被填满。

---停止等待协议是最简单但也是最基础的数据链路层协议。

只有收到序号正确的确认帧 ACKn 后,才更新发送状态变量 V(S)一次,并发送新的数据帧。

接收端接收到数据帧时,就要将发送序号 N(S) 与本地的接收状态变量 V(R) 相比较。若二者相等就表明是新的数据帧,就收下,并发送确认。
否则为重复帧,就必须丢弃。但这时仍须向发送端发送确认帧 ACKn,而接收状态变量 V(R) 和确认序号 n 都不变。
连续出现相同发送序号的数据帧,表明发送端进行了超时重传。连续出现相同序号的确认帧,表明接收端收到了重复帧。
发送端在发送完数据帧时,必须在其发送缓存中暂时保留这个数据帧的副本。这样才能在出差错时进行重传。只有确认对方已经收到这个数据帧时,才可以清除这个副本。


9、TCP的流量控制和拥塞控制实现原理?(典型图)

1、流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。

TCP报文段发送时机主要有以下几种选择途径。

1)TCP维持一个变量,它等于最大报文段长度MSS,只要缓存中存放的数据达到MSS字节就组装成一个TCP报文段发送出去。

2)由发送方的应用程序指明要求发送报文段,即TCP支持的推送操作。

3)是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段发送出去。

2、拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能承受现有的网络负荷。

流量控制往往指的是点对点通信量的控制,是个端到端的问题。流量控制所要做的就是控制发送端发送数据的速率,以便使接收端来得及接受。

---慢开始和拥塞避免

发送报文段速率的确定,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞,这由接收窗口和拥塞窗口两个状态量确定。接收端窗口又称通知窗口,是接收端根据目前的接收缓存大小所许诺的最新窗口值,是来自接收端的流量控制。拥塞窗口cwnd是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。

---慢启动原理:

1)当主机开始发送数据时,如果立即将较大的发送窗口的全部数据字节都注入到网络中,那么由于不清楚网络的情况,有可能引其网络拥塞。

2)比较好的方法是试探一下,即从小到达逐渐增大发送端的拥塞控制窗口数值。

3)通常在刚刚开始发送报文段时可先将拥塞窗口cwnd设置为一个最大报文段的MSS的数值。在每收到一个对新报文段确认后,将拥塞窗口增加至多一个MSS的数值,当rwind足够大的时候,为了防止拥塞窗口cwind的增长引起网络拥塞,还需要另外一个变量,慢开始门限ssthresh。


10、TCP的快速重传和快速恢复算法?

在TCP/IP中,快速重传和恢复是一种拥塞控制算法,它能快速恢复丢失的数据包。如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。

1)快速恢复的主要步骤是:

---当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复的ACK,表明有3个“老”的数据包离开了网络。

---再收到重复的ACK时,拥塞窗口增加1。

---当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

2)如果收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:

---把ssthresh设置为cwnd的一半。

---把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)。

---重新进入拥塞避免阶段。


问题1:在一个窗口内重复丢包会造成影响吗?

答案:会。如果只丢一个包,那么收到非重复ACK时,就能确认完本窗口内所有的包。然后进入拥塞避免阶段。而如果丢失多个包,那么收到非重复ACK时,不能确认完本窗口内所有的包。但是也会退出快速恢复,进入拥塞避免阶段。

问题2:为什么发生拥塞时,还增加cwnd?

答案:在检测到丢包时,窗口为cwnd。这时候网络中最多有cwnd个包(in_flight < cwnd )。每当收到一个重复的ACK,则说明有数据包离开网络,达到接收端了。那么,此时网络中还可以再容纳1个包。由于发送端滑动窗口不能移动了,所以如果想保持in_flight,可以使cwnd++。这样一来,可以提高吞吐量。而实际上,在fast recovery期间发送的新数据包比起发生丢包的cwnd来说,已经是大大减少了。


11、TFTP与FTP的区别?

TFTP协议和FTP大致相同,都是用于文件传输,可以实现网络中两台计算机之间的文件上传与下载。可以将TFTP协议看作是FTP协议的简化版本。

1)TFTP协议不需要验证客户端的权限,FTP需要进行客户端验证;

2)TFTP协议一般多用于局域网以及远程UNIX计算机中,而常见的FTP协议则多用于互联网中;

3)FTP客户与服务器间的通信使用TCP,而TFTP客户与服务器间的通信使用的是UDP;

4)TFTP只支持文件传输。也就是说,TFTP不支持交互,而且没有一个庞大的命令集。最为重要的是,TFTP不允许用户列出目录内容或者与服务器协商来决定哪些是可得到的文件。

FTP 是完整、面向会话、常规用途文件传输协议。而 TFTP 用作 bones bare - 特殊目的文件传输协议。交互使用 FTP。 TFTP 允许仅单向传输的文件。FTP 提供身份验证。而TFTP 不。FTP 使用已知 TCP 端口号: 20 的数据和 21 用于连接对话框。 TFTP 用于 UDP 端口号 69 其文件传输活动。因为 TFTP 不支持验证 WindowsNT ,所以FTP 服务器服务不支持 TFTP。FTP 依赖于 TCP,是面向连接并提供可靠的控件。 TFTP 依赖 UDP,需要减少开销, 几乎不提供控件。


12、阻塞方式和非阻塞方式,阻塞connect与非阻塞connect?

简单点说,阻塞就是干不完不准回来,   非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声。

---同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。一般指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。

---异步:当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

---阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。

---非阻塞:指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
 



     












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值