网络笔试面试题整理

给出的一些常见的计算机网络笔试面试题,特整理以下,后期遇到新的再更新git

笔试面试题

TCP首部格式github

 

 

UDP首部格式面试

首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。浏览器

 

TCP/UDP特色/区别:服务器

  • 用户数据报协议 UDP(User Datagram Protocol)是无链接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对1、一对多、多对一和多对多的交互通讯。cookie

  • 传输控制协议 TCP(Transmission Control Protocol)是面向链接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通讯,面向字节流(把应用层传下来的报文当作字节流,把字节流组织成大小不等的数据块),每一条 TCP 链接只能是点对点的(一对一)。网络

 

HTTP协议session

HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的链接方式,HTTP1.1版本中给出一种持续链接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。app

 

HTTP状态码网站

HTTP 协议是无状态的,主要是为了让 HTTP 协议尽量简单,使得它可以处理大量事务。

 

SESSION机制、cookie机制

  • Cookie 只能存储 ASCII 码字符串,而 Session 则能够存取任何类型的数据,所以在考虑数据复杂性时首选 Session;
  • Cookie 存储在浏览器中,容易被恶意查看。若是非要将一些隐私数据存在 Cookie 中,能够将 Cookie 值进行加密,而后在服务器进行解密;
  • 对于大型网站,若是用户全部的信息都存储在 Session 中,那么开销是很是大的,所以不建议将全部的用户信息都存储到 Session 中。

 

TCP三次握手、四次挥手

 

假设 A 为客户端,B 为服务器端。

  • 首先 B 处于 LISTEN(监听)状态,等待客户的链接请求。

  • A 向 B 发送链接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。

  • B 收到链接请求报文,若是赞成创建链接,则向 A 发送链接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。

  • A 收到 B 的链接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。

  • B 收到 A 的确认后,链接创建。

三次握手的缘由

第三次握手是为了防止失效的链接请求到达服务器,让服务器错误打开链接。

客户端发送的链接请求若是在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的链接确认。客户端等待一个超时重传时间以后,就会从新请求链接。可是这个滞留的链接请求最后仍是会到达服务器,若是不进行三次握手,那么服务器就会打开两个链接。若是有第三次握手,客户端会忽略服务器以后发送的对滞留链接请求的链接确认,不进行第三次握手,所以就不会再次打开链接。

 

如下描述不讨论序号和确认号,由于序号和确认号的规则比较简单。而且不讨论 ACK,由于 ACK 在链接创建以后都为 1。

  • A 发送链接释放报文,FIN=1。

  • B 收到以后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据可是 A 不能向 B 发送数据。

  • 当 B 再也不须要链接时,发送链接释放报文,FIN=1。

  • A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放链接。

  • B 收到 A 的确认后释放链接。

四次挥手的缘由

客户端发送了 FIN 链接释放报文以后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕以后,服务器会发送 FIN 链接释放报文。

TIME_WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并非直接进入 CLOSED 状态,还须要等待一个时间计时器设置的时间 2MSL。这么作有两个理由:

  • 确保最后一个确认报文可以到达。若是 B 没收到 A 发送来的确认报文,那么就会从新发送链接释放请求报文,A 等待一段时间就是为了处理这种状况的发生。

  • 等待一段时间是为了让本链接持续时间内所产生的全部报文都从网络中消失,使得下一个新的链接不会出现旧的链接请求报文。

 

为何须要TIME_WAIT?

TIMEWAIT状态也称为2MSL等待状态。

1)为实现TCP这种全双工(full-duplex)链接的可靠释放

这样可以让TCP再次发送最后的ACK以防这个ACK丢失(另外一端超时并重发最后的FIN)。这种2MSL等待的另外一个结果是这个TCP链接在2MSL等待期间,定义这个链接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用。这个链接只能在2MSL结束后才能再被使用。

2)为使旧的数据包在网络因过时而消失

每一个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。

 

为何创建链接是三次握手,而关闭链接倒是四次挥手呢?

这是由于服务端在LISTEN状态下,收到创建链接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭链接时,当收到对方的FIN报文时,仅仅表示对方再也不发送数据了可是还能接收数据,咱们也未必所有数据都发送给对方了,因此咱们不能够当即close,也能够发送一些数据给对方后,再发送FIN报文给对方来表示赞成如今关闭链接,所以,咱们的ACK和FIN通常都会分开发送。

 

OSI七层模型:

物理层 The physical layer

数据链路层Data link layer

网络层The network layer

传输层The transport layer

会话层The session layer

表现层The presentation layer

应用层The application layer

 

参考资料

github-网络

相关文章
相关标签/搜索