计算机网络

一文吃透TCP面试八股文

TCP/IP协议之传输层:TCP/UDP协议详解(一)

HTTP 和 HTTPS 的区别(面试常考题)

http请求中get和post方法的区别

TCP,全称Transport Controll Protocol,传输控制协议。

UDP,全称User Data Protocol,用户数据报协议。

OSI七层网络模型、TCP/IP四层模型、TCP/IP五层模型

OSI七层网络模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

TCP/IP四层模型:应用层、传输层、网络层、网络接口层

TCP/IP五层模型:应用层、传输层、网络层、数据链路层、物理层

TCP、UDP位于哪一层

二者都是传输层协议。

TCP 与 UDP 的区别

  • TCP是面向连接的,UDP是无连接的
  • TCP是可靠的,UDP是不可靠的
  • TCP有拥塞控制机制,UDP没有
  • TCP是面向字节流的,UDP是面向数据报文的
  • TCP只支持点对点通信,UDP支持一对一,一对多,多对多
  • TCP协议下双方发送接受缓冲区都有,UDP并无实际意义上的发送缓冲区,但是存在接受缓冲区
  • TCP报文首部不同,TCP首部20个字节,UDP首部8个字节

TCP如何保证可靠性

  • 数据包校验防止发送过来的数据是错误数据
  • 确认序列号,对失序报文进行重排
  • 丢弃重复数据包,防止数据冗余重复
  • 确认应答机制,接收方接受数据之后会发送一个确认
  • 超时重传机制,发送方发出数据后会启动一个定时器,超过该定时器时间依旧未收到对方确认,便会重新发送该数据
  • 流量控制确保接收方收到的数据在自身缓冲区中不会溢出
  • 拥塞控制,保证数据在网络中传播的可靠性,降低丢包的概率,提高TCP的可靠性

TCP 和 UDP 各自的适用场景

对实时性要求比较高,且允许数据丢失的情况,选择UDP,比如实时视频通话、游戏。

不允许数据丢失,及大多数情况适用TCP。

报文格式

UDP报文:

UDP报文

TCP报文:

TCP报文

TCP 和 UDP 分别对应的常见应用层协议

基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH

基于UDP的应用层协议:DNS、TFTP、SNMP

HTTP1.0 和 HTTP2.0 的区别

  • 长连接,Connection: Keep-Alive,以便其他请求复用,只要任意一端没有明确提出断开连接,则保持TCP连接状态
  • 多路复用
  • HTTP1.0 基于文本格式,而 HTTP2.0 基于二进制格式
  • 头部压缩

HTTP 和 HTTPS 的区别

  • HTTP是明文传输,HTTPS使用SSL加密传输
  • HTTP在三次握手后即可传输报文,而HTTPS三次握手后还要进行SSL握手
  • HTTP端口是80,HTTPS端口是443

SSL通过先非对称加密的方式传输密钥,再用密钥对传输数据进行对称加密,来解决窃听风险。之所以要两种加密方式混用,是因为对称加密比非对称加密要快,因此数据传输使用对称加密,而非对称加密可以实现交换密钥。

客户端如何校验证书合法性

证书校验流程

发送端数字证书分为两部分,一部分是公钥等信息,另一部分是数字签名。将第一部分的信息通过哈希算法计算出哈希值,再用私钥加密,即是数字签名。

客户端收到证书后,根据公钥解密数字签名得到哈希值,再与自己计算的哈希值比较,相同则说明合法。

由于中间人无法得知私钥,即便篡改了证书也无法修改正确的哈希值,因此无法伪造。

HTTPS抓包

其实就是中间人攻击的原理。需要将抓包用的证书添加到浏览器,作为中间人。

GET 和 POST 的区别

  • GET用于获取资源、读取数据;POST用于修改和写入数据
  • GET把参数包含在URL中,POST通过request body传递参数,因此POST能发送的数据更大,GET有URL长度限制
  • POST多几个首部字段,如content-type,POST能发送更多数据类型,GET只能发送ASCII字符
  • GET会将静态资源缓存起来,POST不会,因此POST更安全
  • POST在真正接收数据之前会先将请求头发送给服务器进行确认,服务器返回100 Continue响应,然后才真正发送数据,因此GET比POST快

常见请求头和响应头

请求头
说明
示例
Accept 指示客户端可以接受的内容类型,例如text/html,application/json等
Accept-Charset 可接受的字符编码类型 Accept-Charset: utf-8
Connection 客户端(浏览器)想要优先使用的连接类型 Connection: keep-alive
Cookie
Content-Length 以8进制表示的请求体的长度 Content-Length: 348
Content-Type Content-Type: application/x-www-form-urlencoded
Host 服务器的域名以及服务器所监听的端口号 Host: www.baidu.com:80
User-Agent 浏览器的身份标识字符串 User-Agent: Mozilla
响应头 说明 示例
Access-Control-Allow-Origin 指定哪些网站可以跨域源资源共享 Access-Control-Allow-Origin: *
Content-Length 响应消息体的长度,用8进制字节表示 Content-Length: 348
Date 此条消息被发送时的日期和时间 Date: Tue, 15 Nov 1994 08:12:31 GMT
Last-Modified 所请求的对象的最后修改日期 Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT
Set-Cookie 用于在客户端设置 Cookie,通常用于会话管理或跟踪用户状态

FTP 和 SFTP 的区别

FTP,File Transfer Protocol,文件传输协议

SFTP,Secure File Transfer Protocol,安全文件传输协议

  • SFTP通过提供加密的连接和安全的数据传输来提高安全性,而FTP的安全性较低
  • FTP使用TCP/IP协议,而SFTP是SSH协议的一部分
  • FTP使用21端口,而SFTP通过SSH协议的22端口

MQTT 和 HTTP 的区别

  • MQTT以数据为中心,而HTTP是以文档为中心的
  • MQTT生成的消息大小较小,因为它使用二进制格式。HTTP生成的消息大小更大,因为它使用ASCII格式
  • MQTT是轻量级和发布/订阅模型,HTTP是基于请求/响应模型