网络基础常见笔试题

      各种协议的默认端口号:

  • ftp:21、20  (21是控制端口  20是数据端口)
  • ssh:22
  • telnet:23
  • smtp:25
  • pop3:110
  • http:80
  • oracle:1521
  • mysql:3306
  • dns/tcp/udp:53
  • www:80
  • https:443

      TCP连接的三次握手过程:

  • 第一次握手:建立连接时,客户端发送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标志位,有6种标示:
  • SYN(synchronous建立联机)
  • ACK(acknowledgement 确认)    
  • PSH(push传送)  
  • FIN(finish结束)  
  • RST(reset重置)  
  • URG(urgent紧急)
  • Sequence number(顺序号码)  
  • Acknowledge number(确认号码)

  • 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
  • 第二次握手:主机B收到请求后要确认联机信息,向A发送ack  number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
  • 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
     
TCP Client
Flags
TCP Server
1 Send SYN (seq=x)
----SYN--->
SYN Received
2 SYN/ACK Received
<---SYN/ACK----
Send SYN (seq=y)  ACK (x+1)
3 Send ACK (y+1)
----ACK--->
ACK Received  Connection Established
x: ISN (Initial Sequence Number) of the Client
y: ISN of the Server

TCP图解3次握手


四次挥手:由于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。

TCP断开连接-四次握手图解

  • 默认情况下,当调用close( or closesocket)时,如果发送缓冲中还有数据,TCP会继续把数据发送完。
  • 发送了FIN只是表示这端不能继续发送数据(应用层不能再调用send发送),但是还可以接收数据。
  • 被动关闭端可能会将ACK和FIN合到一起发送,所以这也算不上严格的四次握手—四个报文段。
  • 应用层如何知道对端关闭?通常,在最简单的阻塞模型中,当你调用recv时,如果返回0,则表示对端关闭。在这个时候通常的做法就是也调用close,那么TCP层就发送FIN,继续完成四次握手。
  • 关闭TCP连接的最后微妙之处在于对Time-Wait状态的需要。TCP规范要求在终止连接时,两端的关闭握手都完成后,至少要有一个套接字在Time-Wait状态保持一段时间。这个要求的提出是由于消息在网络中传输时可能延迟。如果在连接两端都完成了关闭握手后,它们都移除了其底层数据结构,而此时在同样一对套接字地址之间又立即建立了新的连接,那么前一个连接在网络上传输时延迟的消息就可能在新连接建立后到达。由于其包含了相同的源地址和目的地址,旧消息就会被错误地认为是属于新连接的,其包含的数据就可能被错误地分配到应用程序中。

假设一个C向S发送了SYN后无故消失了,那么S在发出SYN+ACK应答报文后是无法收到C的ACK报文的(第三次握手无法完成),这种情况下S一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个C出现异常导致S的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,S将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果S的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使S的系统足够强大,S也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟C的正常请求比率非常之),此时从正常客户的角度看来,S失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。


子网划分:

新建4个机房,每个房间有25台机器,给定一个网络地址空间:192.168.10.0,现在需要将其划分为4个子网

所以主机位数n为:5     相对应的子网需要借3位

确定了子网部分,后面就简单了,前面的网络部分不变,看最后的这8位

得到6个可用的子网地址:全部转换为点分十进制表示

11000000 10101000 00001010 00100000 = 192.168.10.32

11000000 10101000 00001010 01000000 = 192.168.10.64

11000000 10101000 00001010 01100000 = 192.168.10.96

11000000 10101000 00001010 10000000 = 192.168.10.128

11000000 10101000 00001010 10100000 = 192.168.10.160

11000000 10101000 00001010 11000000 = 192.168.10.192

子网掩码:

11111111 11111111 11111111 11100000 = 255.255.255.224

猜你喜欢

转载自289972458.iteye.com/blog/1304051