【网络】必备知识点

应用层工作在用户态,传输层及以下工作在内核态
应用层、传输层、网络层、数据链路层、物理层

一、HTTP篇

HTTP基本概念

HTTP是超文本传输协议,是一个双向协议, 超文本:超越了普通文本的文本包括图片、视频、压缩包等
具体来说:HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和协议
在这里插入图片描述

HTTP状态码

在这里插入图片描述
1xx 类代码属于提示信息,是协议处理中的一种中间状态,实际用到的较少

2xx 类是表示服务器成功处理了客户端的请求 200、 204【响应头没有body数据】、 206【应用于HTTP分块下载和断点续传】

3xx 类 表示客户端请求的资源发生了变动, 需要重定向(改用新的URL重新发送请求获取资源)
301【永久重定向】 302【临时重定向】 304【缓存重定向】

4xx 类表示客户端发送的报文有误,服务器无法处理 400【报文错误】 403【服务器禁止访问资源】 404【请求资源不存在】

5xx 类表示客户端请求报文正确,但是服务器内部发生错误。
500【服务器未知错误】 501【请求的功能还不支持,敬请期待】 502 【错误网关】 503【服务器忙】

HTTP 常见字段

  1. Host 客户端发送请求时,用来指定服务器域名
  2. Content-Length 字段 服务器返回数据,表明本次回应的数据长度
  3. Connection 字段 用于客户端要求服务器使用TCP持久连接,以便其他请求复用
  4. Content-Type 字段服务器回应时告诉客户端本次数据格式
  5. Content-Encoding 字段 表示服务器返回数据的压缩格式

GET 和 POST 区别

Get 方法的含义是从服务器获取资源,这个资源可以是静态文本、页面、图片视频等, 是安全且幂等的
Post方法则是 像URI指定的资源提交数据,数据就放在报文的body里。是不安全的,不是幂等的。
get方法是只读操作,无论多少次服务器上的数据都是安全的,且每次结果相同
Post 是新增或提交数据的操作,会修改服务器上的资源,是不安全的,多次提交创建多个资源,所以不是幂等的

二、TCP篇

在这里插入图片描述

什么是TCP

TCP是一个工作在传输层的可靠数据传输的服务,它能确保接收端的网络包的无损坏、无间隔、非冗余和按序的。
TCP是面向连接的、可靠的,基于字节流的传输层通信协议
在这里插入图片描述
面向连接:指的是一对一连接,无法像UDP那样作到一对多
可靠的:无论网络链路中发生怎样的链路变化,TCP都可以保证一个报文一定能到达接收端
字节流: 消息是没有边界的,也就是消息多大都可以传输,并且是有序的。

什么是TCP连接

建立一个TCP连接需要客户端和服务器端达成三个信息的共识:

  • Socket: 由IP地址和端口号组成
  • 序列号:用来解决乱序问题
  • 窗口大小:用来做流量控制

如何唯一确定TCP连接

TCP四元组可以唯一的确定一个连接:源地址、源端口、目的地址、目的端口
源端口和目的端口的字段(16位)是在TCP头部,作用是告诉TCP协议应该把报文发送给哪个进程
源地址和目的地址的字段(32位)在IP头部中,作用是通过IP协议发送报文给对方主机

UDP和TCP有什么区别?应用场景

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务
UDP协议很简单,头部只有8个字节(64位)
在这里插入图片描述

TCP和UDP的区别

1.连接
TCP是面向连接的传输协议,传输前需要先连接
UDP是不需要连接的,立即发送数据
2.服务对象
TCP是一对一的两点服务,即一条连接只有两个端点
UDP支持一对一、多对一、多对多交互通信
3.可靠性
TCP是可靠交付数据的,保证数据无差错、不丢失、不重复、按需到达
UDP是尽最大能力交付,不保证数据可靠交付
4.拥塞控制,流量控制
TCP用拥塞控制和流量控制机制,保证数据传输的安全性
UDP没有复杂的控制机制,即使网络非常拥堵的也不影响UDP的发送速率
5.首部开销
TCP首部长度较长,有一定开销,首部在没有使用选项字段时是20字节,使用了会更长
UDP首部是固定不变的8个字节,开销小
6.传输方式
TCP是流式传输,没有边界,但保证顺序和可靠
UDP是一个包一个包的发送,是有边界的,可能会丢包和乱序
7.分片不同

TCP连接建立——三次握手

首先服务端主动监听某个端口,
客户端发送第一个SYN报文, 随机初始化报文的序列号
服务器收到SYN报文,服务器也随机初始化自己的序号,把收到的客户端确认应答号+1填入TCP头部,发回去
客户端收到报文,回应一个应答报文,把确认应答号字段 + 1填入TCP头部,本次报文可以携带客户到服务器的数据。

前两次握手不携带数据,第三次是可以携带数据的
客户端 connect 成功返回是在第⼆次握⼿,服务端 accept 成功返回是在三次握⼿成功之后。

为什么是三次握手

三次握手可以 防止旧的重复连接初始化,造成混乱。
如果网络阻塞的话,新的连接请求先到,老的后到,然后服务器通过确认应答号可以确定是旧连接,还是新连接的回应。
三次握手避免资源浪费,三次连接同步双方初始序列号

SYN攻击

TCP需要三次握手,攻击者短时间伪造不同IP地址的SYN报文,服务器端接收到一个SYN报文,就会进入SYN_RCVD状态,然后发送出去ACK+SYN报文,但是无法得到未知主机的ACK应答,时间长了,服务器端的SYN接收队列就被占满了,不能为正常用户服务。

TCP断开连接——四次挥手

双方都可以主动断开连接,断开连接后主机中的资源将被释放。
在这里插入图片描述
客户端打算关闭连接,发送一个FIN报文,客户端进入FIN_WAIT_1状态
服务端接收到该报文,向客户端回复ACK应答报文,服务端进入COLSED_WAIT状态
客户端接收到ACK报文,进入FIN_WAIT_2,等待服务端处理完数据,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态
客户端接收到服务端的FIN报文,回应一个ACK应答报文,进入TIME_WAIT状态。
服务端接收到了ACK应答报文,进入CLOSED状态,服务端完成连接的关闭,等 2倍报文最大生存时间后,自动进入CLOSED状态

每个方向都需要一个FIN和一个ACK报文,因此被称为四次挥手。

为什么挥手需要四次

关闭连接时,客户端向服务端发送FIN报文时,仅仅表示客户端不在发送数据了,但是还能接收数据
服务端收到客户端FIN报文时,先回一个ACK应答报文,服务器可能还有数据需要处理和发送,等服务端也不在发送数据了,才发送一个FIN报文表示同意现在关闭连接。

服务端通常会等待数据的发送和处理,所以他先发一个ACK应答报文,然后发送处理完数据再发一个FIN报文,所以比三次握手多一次

猜你喜欢

转载自blog.csdn.net/weixin_44179010/article/details/123747622
今日推荐