计算机网络面试题

[toc]

计算机网络面试

基础部分

TCP报头格式 (20字节)

[图片上传失败...(image-5dc5cd-1521004095489)]

  • 32位端口号:

源端口和目的端口各占16位,2的16次方等于65536,看端口的命令:netstat。

  • 32位序号:

也称为顺序号(Sequence Number),简写为SEQ,

  • 32位确认序号:

也称为应答号(Acknowledgment Number),简写为ACK。在握手阶段,确认序号将发送方的序号加1作为回答。

  • 4位首部长度:

这个字段占4位,它的单位时32位(4个字节)。本例值为7,TCP的头长度为28字节,等于正常的长度2 0字节加上可选项8个字节。,TCP的头长度最长可为60字节(二进制1111换算为十进制为15,15*4字节=60字节)。

  • 6位标志字段:

ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。

RST 置1时重建连接。如果接收到RST位时候,通常发生了某些错误。

SYN 置1时用来发起一个连接。

FIN 置1时表示发端完成发送任务。用来释放连接,表明发送方已经没有数据发送了。

URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据。注:一般不使用。

PSH 置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。注:一般不使用。

  • 16位检验和:

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

  • 16位紧急指针:

注:一般不使用。

只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

  • 可选与变长选项:

通常为空,可根据首部长度推算。用于发送方与接收方协商最大报文段长度(MSS),或在高速网络环境下作窗口调节因子时使用。首部字段还定义了一个时间戳选项。

  • 最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在握手的第一步中指明这个选项。它指明本端所能接收的最大长度的报文段。1460是以太网默认的大小。

UDP报头格式(8字节)

[图片上传失败...(image-9ecf21-1521004095489)]

  • 2字节源端口字段

源端口是一个大于1023的16位数字,由基于UDP应用程序的用户进程随机选择。

  • 2字节节的端口字段

  • 2字节长度字段

指明了包括首部在内的UDP报文段长度。UDP长字段的值是UDP报文头的长度(8字节)与UDP所携带数据长度的总和。

  • 2字节校验和字段

是指整个UDP报文头和UDP所带的数据的校验和(也包括伪报文头)。伪报文头不包括在真正的UDP报文头中,但是它可以保证UDP数据被正确的主机收到了。因在校验和中加入了伪头标,故ICMP除能防止单纯数据差错之外,对IP分组也具有保护作用。

TCP/UDP区别 (待补全)

  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

  1. UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

  2. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

  3. TCP对系统资源要求较多,UDP对系统资源要求较少。

UDP相对于TCP的优势

UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏。

  1. 网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。

  2. TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。

采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。

TCP UDP 编程步骤的区别

TCP

服务端

  1. 创建一个socket
  2. 设置socket的属性
  3. 绑定ip地址和端口
  4. 开启监听
  5. 接受客户端上来的连接
  6. 收发数据
  7. 关闭网络连接
  8. 关闭监听
    客户端
  9. 创建一个socket
  10. 设置socket属性
  11. 绑定IP地址、端口等信息到socket上
  12. 设置要连接的对方的IP地址和端口等属性
  13. 连接服务器
  14. 收发数据
  15. 关闭网络连接

UDP

服务端

  1. 创建一个socket,用函数socket();
  2. 设置socket属性,用函数setsockopt();* 可选
  3. 绑定IP地址、端口等信息到socket上,用函数bind();
  4. 循环接收数据,用函数recvfrom();
  5. 关闭网络连接;
    客户端
  6. 创建一个socket,用函数socket();
  7. 设置socket属性,用函数setsockopt();* 可选
  8. 绑定IP地址、端口等信息到socket上,用函数bind();* 可选
  9. 设置对方的IP地址和端口等属性;
  10. 发送数据,用函数sendto();
  11. 关闭网络连接;

HTTP状态码

(最好结合使用场景,比如在缓存命中时使用哪个)

  1. HTTP: Status 200 – 服务器成功返回网页
  2. HTTP: Status 3xx - 表示要完成请求,需要进一步操作 通常,这些状态代码用来重定向
  3. HTTP: Status 404 – 请求的网页不存在
  4. HTTP: Status 503 – 服务不可用

HTTP协议

(一些报头字段的作用,如cace-control、keep-alive)

OSI协议、TCP/IP协议以及每层对应的协议。

SESSION机制、cookie机制

TCP三次握手、四次挥手

image
image

MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃

打开网页到页面显示之间的过程

  1. 尝试从本机Host文件获取ip地址,没有则去请求DNS服务器获取访问的IP
  2. 通过三次握手建立TCP连接
  3. 通过HTTP协议请求网页内容
  4. 通过浏览器渲染请求过来的html

http和https区别

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS和HTTP的区别主要如下:

  1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https在请求时额外的过程

客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

  1. 客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
  2. Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
  3. 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
  5. Web服务器利用自己的私钥解密出会话密钥。
  6. Web服务器利用会话密钥加密与客户端之间的通信。
image

https是如何保证数据安全的

IP地址子网划分

POST和GET区别

  1. GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
  2. GET书签可收藏,POST为书签不可收藏。
  3. GET能被缓存,POST不能缓存 。
  4. GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
  5. GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
  6. GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
  7. GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
  8. 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
  9. GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。
    出处

DNS解析过程

深入部分

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

(这个问题可以引申出很多子问题,拥塞控制慢开始、拥塞避免、快重传、滑动窗口协议、停止等待协议、超时重传机制,最好都能掌握)

地址解析协议ARP

交换机和路由器的区别

你可能感兴趣的:(计算机网络面试题)