最近刷面经整理了一些计算机网络的问题,自己总是记不住,所以就就此梳理一下吧!希望自己持续更新,持续记忆

TCP/IP的体系结构及协议

应用层:HTTP FTP SMTP DNS
传输层:TCP UDP
网络层:IP ICMP ARP
数据链路层:MAC

统领性问题:从键入网址到网络显示,其间发生了什么
1.第一步,浏览器要对URL进行解析,从而生成发送给Web服务器的请求信息,确定Web服务器和文件名。
2.通过DNS服务器查询服务器域名对应的IP地址。
3.在HTTP传输数据之前,需要在传输层TCP进行三次握手连接,保证服务端和客服端都具有发送和接收的能力,之后生成TCP报文,交给网络层处理。
4.在网络层IP将数据封装成网络包发送给通信对象
5.加上MAC头部在数据链路层进行点对点的传输
6.将数字信息转换为电信号在网线上传输

超文本传输协议HTTP相关

1. GET与POST的区别
GET方法的含义是请求从服务器获取资源,安全且幂等;
POST方法是向URI指定的资源提交数据,数据就放在报文的body里,不安全且不幂等。

2. 5大类HTTP状态码
2xx:成功,报文已经收到并被处理
3xx:资源位置发生变动,需要重新发送请求
4xx:客户端错误,服务器无法处理
5xx:服务器错误,服务器在请求时内部发生了错误

3. HTTP的特点
HTTP最突出的优点是[简单、灵活和易于扩展、应用广泛和跨平台]
优点同时也有双刃剑,会导致很大的不安全:
无状态 没有记忆能力,没办法完成有关联性的操作
明文传输信息裸奔,导致信息被窃取,窃听
不安全 不验证通信方的身份,有可能遭遇伪装。无法证明信息的完整性,有可能被篡改。

4. HTTP与HTTPS的区别
HTTPS则解决HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。

HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输,HTTPS三次握手之后,还需进行SSL/TLS的握手过程

HTTP的端口号是80,HTTPS的端口号是443

HTTPS协议需要向CA申请数字证书,来证明服务器的身份是可信的

HTTPS解决HTTP的风险[混合加密防止窃听 摘要算法防止篡改 数字证书预防伪装]

5.cookie和session的区别
cookie和session得都是用来跟踪浏览器用户身份的会话方式
保存位置:cookie数据保存在客户端,session数据保存在服务端
安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全性用session
大小session会在一定时间保存在服务器上,考虑到减轻服务器性能,采用cookie
所以,可以将登录信息等重要信息存放为session,其他信息如果需要保留,放在cookie中。

网络层IP协议相关:实现主机与主机之间的通信

1、相关技术
DNS域名解析技术,将域名网址转换为具体的IP地址
ARP 协议借助ARP请求与ARP响应两种类型的包确定数据链路层的MAC地址
ICMP互联网控制报文协议,确认IP包是否成功送达目标地址、报告发送过程中IP包被废弃的原因和改善的网络设置等。
IPV6的位数:IPV6的128位地址通常写成8组,每组由四个16进制数组成

TCP基本知识

1.什么是TCP连接
连接是用于保证可靠性和流量控制维护的某种状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接
建立一个TCP连接是需要客户端与服务器达成上述三个信息的共识。

最大TCP连接数=客户端的IP数×客户端的端口数
TCP数据的长度=IP总长度-IP首部长度-TCP首部长度

TCP和UDP的区别
1.连接

  • TCP是面向连接的传输层协议,传输数据前要先建立连接
  • UDP是不需要连接,即刻传输数据

2.服务对象

  • TCP是一对一的两点服务
  • UDP支持一对一、一对多、多对多的交互通信

3、可靠性

  • TCP是可靠交付数据的
  • UDP是尽最大努力交付,不保证可靠交付数据

4、拥塞控制、流量控制

  • TCP有拥塞控制和流浪控制机制,保证数据传输的安全性
  • UDP无

TCP是用于FTP文件传输,HTTP/HTTPS
UDP用于视频、音频等多媒体通信,广播通信等

tcp三次握手连接

示意图

  • 客户端初始化序号x,SYN标志位置为1,向服务端发起连接
  • 服务端生成序号y,将确认应答号字段设置为x + 1,同时将SYN和ACK标志位置为1,发给客户端
  • 将ACK标志位置为1, 将确认应答号字段设置为y + 1,把报文发送给服务端。

可见,第三次握手是携带数据的哦
三次握手可以[确定双方都具备发送和接收的能力]
还有!避免历史连接 同步双方初始序列号 避免资源浪费

TCP连接断开四次挥手过程
图片说明

  • 客户端打算关闭连接,发送FIN标志位被置为1的报文
  • 服务端收到,发送ACK应答报文
  • 服务端处理完数据,向客户端发送FIN报文
  • 客户端收到FIN,回复ACK应答报文
  • 服务器收到,进入关闭,客户端在2msl一段时间后,关闭

注意
FIN代表自己不再发送了,但是还可以接受哦
MSL报文最大生存时间
linux系统停留在TIME_WAIT的时间是固定的60s,TIME_WAIT的原因:防止旧连接的数据包 保证连接正确关闭。

如何保证可靠性传输
重传机制 滑动窗口 流量控制 拥塞控制

重传机制
TCP每发送一个数据,都要进行一次确认应答。
超时重传:发送时计时,超过指定的时间没有收到ACK确认应答报文,就会重发该数据。
快速重传:不以时间为驱动,而是以数据驱动重传

滑动窗口
窗口大小,无需等待确认应答,就可以继续发送数据的最大值。这个字段是接收端告诉发送端告诉发送端自己还有多少缓冲区可以接收数据,于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。

流量控制 TCP提供一种机制可以让发送方根据接收方的实际接收能力控制发送的数据量。

拥塞窗口

是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。只要[发送方]没有在规定时间内接收到ACK应答报文,也就是发生了超时重传,就会认为网络出现了拥塞,拥塞控制主要是四个算法:

  • 慢启动
  • 拥塞避免
  • 拥塞发生
  • 快速恢复

慢启动:当发送方每收到一个ACK,拥塞窗口cwnd的大小就会加1。
拥塞避免:每当收到一个ACK时。cwnd增加1/cwnd。
超时重传:发生超时重传的拥塞发生算法,将慢启动门限ssthresh设置为cwnd/2, 将cwnd重置为1,接着重新开始慢启动,方式太激进。
快速重传:接收方发现丢了一个中间包的时候,发送三四前一个包的ACK。cwnd=cwnd/2,设置为原来的一般,令ssthresh = cwnd。