1、TCP建立连接三次握手-断开连接四次挥手
SYN:同步位,SYN=1 表示这是一个连接请求或连接接受报文
ACK:确认位,ACK=1确认有效;ACK=0确认无效
FIN: =1时,表示要求释放TCP连接
ack:确认号,=对方发过来的序号seq+1
seq:序号(随机生成的)
A:客户 B:服务器
① A向B发出连接请求报文段,其首部中的SYN=1,并选择序号seq=x, 表明传送数据时的第一个数据字节的序号是x
② B收到连接请求后,如同意,则发回确认,其中SYN=1,ACK=1,确认号ack=x+1,自己选择的序号seq=y
③ A收到后向B给出确认,其ACK=1,确认号ack=y+1
• B收到后,TCP连接建立 ,双方可以进行数据传送
• 为什么采用3次握手而不是2次?
– 防止“失效的连接请求”在服务器端占用资源
• 客户端发出了连接请求,但该数据报在网络中某处滞留了
• 客户端等待超时后,重发连接请求,服务器响应,建立连接
• 滞留的连接请求又到达服务器端,如果采用2次握手,服务器将建立一个连接,分配资源(缓冲区、定时器、…) → 占用资源且长期存活
• 3次握手带来的安全问题:TCP SYN Flooding攻击
• 攻击者连续发送大量SYN报文,但却不对SYN ACK报文做出响应 【连接处于半开状态,攻击者可以将此连接占用,从而阻止正常的客户端请求访问服务器】
• 结果:服务器内部数据结构满,无法响应正常用户的TCP连接请求
• 此类攻击大多使用IP地址伪装,使得对攻击源的定位比较困难
• Linux内核采用了SYN_Cookies机制应对这种攻击 基本思路:服务器返回SYN+ACK时,根据自身特有信息(时间戳、IP地址、 端口号等)计算Cookies,作为seq返回给客户端,并在收到对方应答前,不为该连接分配数据结构
关闭连接前等待2MSL时间的原因
– 为了保证A发送的最后一个ACK报文段能够到达B
– 防止“已失效的连接请求报文段”出现在本连接中
• A在发送完最后一个ACK报文段后,再经过时间2MSL, 就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这 种旧的连接请求报文段
TCP和UDP的区别:
- 连接性:TCP是面向连接的协议,UDP是无连接的协议。TCP在传输数据前要先建立连接,传输完毕后还要释放连接;而UDP不需要建立连接,只是直接传输数据包。
- 可靠性:TCP提供可靠的数据传输服务,UDP则不保证数据的可靠传输。TCP通过序列号、确认应答和重传等机制来保证数据的可靠传输,而UDP则不提供这些机制。
- 速度:UDP传输速度较快,TCP传输速度较慢。由于TCP提供了可靠性保证,它需要较多的计算和通信开销,因此速度较慢;而UDP则不需要提供这些保证,所以速度相对较快。
- 数据大小:TCP可以传输大量数据,而UDP的数据大小则受限制。TCP可以将数据分成多个数据包传输,每个数据包最大可以达到64KB;而UDP则限制每个数据包的大小为64KB以内。
- 适用场景:由于TCP具有可靠性保证,因此适用于需要确保数据完整性和可靠性的场景,如文件传输、电子邮件等。而UDP则适用于需要实时性和速度的场景,如视频直播、网络游戏等。
对UDP的了解:
UDP(User Datagram Protocol)是一种无连接的网络协议,它提供了一种非常简单的方式来发送和接收数据报(Datagram),不像TCP那样需要建立连接和维护状态。UDP被广泛用于需要高速数据传输和不需要可靠性保证的应用程序,例如流媒体、视频游戏和DNS等。
UDP的特点如下:
- 无连接性:每个UDP数据报都是独立的,发送端发送后就不再负责,接收端收到数据报后也不会发送任何响应。这意味着在发送数据时不需要建立连接,也不需要维护连接状态,因此UDP具有更小的数据包头,更少的网络延迟和更快的速度。
- 不可靠性:由于UDP数据报没有任何确认、重传和流量控制机制,因此UDP数据报可能会在传输过程中丢失、重复、乱序和到达时延迟,但是这些问题可以在应用层通过适当的算法来处理。
- 适用范围:由于UDP协议没有TCP协议那样的可靠性保证和流量控制机制,因此它通常适用于对传输速度和实时性要求较高,但对数据可靠性和完整性要求不高的应用,例如多媒体数据传输、音频和视频通话、在线游戏、视频直播等。
总之,UDP是一种非常简单的协议,它提供了高速、低延迟的数据传输方式,但不保证数据传输的可靠性和完整性。
2、DNS解析:将域名转换为IP地址
客户端应用程序请求一个域名,如www.example.com,DNS解析过程如下:
1、客户端检查其本地DNS缓存/浏览器缓存/本地HOST文件是否有匹配的IP地址。如果找到了匹配的IP地址,该IP地址将返回给客户端,该过程就完成了。
2、客户端就向本地DNS服务器发送DNS查询
3、本地DNS服务器检查其缓存中是否有匹配的IP地址。如果找到了匹配的IP地址,该IP地址将返回给客户,整个过程就完成了。
4、本地DNS服务器向根域名服务器查询所请求的顶级域名(.com、.org等)的顶级域名服务器的ip地址
5、本地DNS服务器向(.com、.org等)顶级域名服务器查询所确定所请求的域名(example.com)的二级域的权威域名服务器地址。
6、向二级域名的权威域名服务器发送 DNS 查询,以获得所请求的域名的 IP 地址(www.example.com)。
3、OSI七层模型:
【无数网传会表演(应用层)】
4、应用层协议
- HTTP(HyperText Transfer Protocol):用于Web应用程序,基于客户端-服务器模型。HTTP协议定义了客户端和服务器之间交换的数据格式和传输方式,使得用户可以通过Web浏览器与远程Web服务器进行通信。
- FTP(File Transfer Protocol):用于文件传输,支持文件的上传和下载。FTP协议提供了两种传输方式:ASCII模式和二进制模式,可以适应不同类型的文件。
- SMTP(Simple Mail Transfer Protocol):用于发送电子邮件。SMTP协议定义了电子邮件的格式和传输方式,它使用TCP协议来传输邮件。
- DNS(Domain Name System):用于域名解析。DNS协议将域名解析为IP地址,使得用户可以通过域名访问Web服务器。DNS协议使用UDP协议来传输数据。
- Telnet:用于远程登录到服务器。Telnet协议通过终端模拟器提供一个远程登录环境,使得用户可以在远程主机上执行命令。
- SSH(Secure Shell):用于远程登录到服务器和传输文件。SSH协议提供了一种加密的通信协议,可以保证远程登录和文件传输的安全。
- DHCP(Dynamic Host Configuration Protocol):用于动态分配IP地址。DHCP协议可以自动为计算机分配IP地址、子网掩码、默认网关等网络配置信息。
这些应用层协议都有不同的功能和特点,应用场景也不同。在实际应用中,我们需要选择合适的协议来满足不同的需求。
5、表示层的作用:
6、http
http的特点:
HTTP是一种应用层协议,用于在Web浏览器和Web服务器之间传输数据。HTTP的特点包括:
- 简单易用:HTTP协议使用简单明了的文本格式,易于理解和调试。
- 无状态:HTTP协议是无状态的,即服务器不会在请求之间保留任何数据。这意味着每个请求都是独立的,服务器不会根据前一个请求的状态来处理后续请求。为了解决这个问题,HTTP引入了Cookie和Session等机制。
- 可扩展:HTTP协议的头部非常灵活,允许使用自定义的头部字段来扩展协议功能。
- 请求响应模型:HTTP协议采用了请求-响应模型,即客户端向服务器发送请求,服务器返回响应。请求和响应都由起始行、首部和正文组成。
- 支持多种数据类型:HTTP协议支持多种数据类型,如HTML、XML、JSON等,可以通过Content-Type头部字段指定。
- 明文传输:HTTP协议传输的数据都是明文的,容易被窃听和篡改。为了解决这个问题,HTTPS协议采用了SSL/TLS协议对HTTP数据进行加密和身份认证。
http有哪些版本并介绍一下:
- HTTP/0.9:是最早的HTTP版本,只支持GET请求,并且响应只能是纯文本格式。
- HTTP/1.0:是第一个正式发布的HTTP版本,它支持多种请求方法,比如GET、POST、HEAD等,响应也支持更多的内容类型,包括图片、视频等。不过,HTTP/1.0存在一些缺陷,比如请求和响应都是基于短链接的,每个请求都需要建立一次TCP连接,因此效率较低。
- HTTP/1.1:是目前广泛使用的HTTP版本,它的主要特点是支持持久连接(Keep-Alive)和管道化(Pipelining),可以在一个TCP连接上发送多个请求和响应,大大提高了性能。HTTP/1.1也支持分块传输编码(Chunked Transfer Encoding),可以传输大文件或流媒体数据。
- HTTP/2:是HTTP/1.1的升级版本,它采用了二进制协议,可以更高效地传输数据。HTTP/2支持多路复用,可以在一个TCP连接上同时发送多个请求和响应,同时还支持服务器推送(Server Push),可以提前把客户端需要的资源推送给客户端,从而进一步提高性能。
- HTTP/3:是HTTP/2的升级版本,它使用QUIC协议替代了TCP协议,并采用了基于UDP的传输方式。HTTP/3主要特点是支持快速握手(0-RTT Handshake)和移动设备优化,可以更好地适应当前互联网的发展趋势。
get和post请求的区别:
1、缓存上:
- get:请求资源,可以使用缓存,会被浏览器主动cache
- post:提交数据,POST 产生两个 TCP 数据包,浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据),不能使用缓存
2、传输数据类型:
- get:使用url编码
- post:一般没有限制
3、可传输数据的长度:
- get:有长度限制,受浏览器url长度影响
- post:一般没有限制
4、可见性:
- get:请求的参数暴露在url中,可见
- post:请求的参数放在请求体中,不可见
5、安全性:
- get:
- post:由于参数不被暴露,相对来说更安全
6、get请求参数会被完整的保存在浏览器历史记录中,而post不会
7、get请求在浏览器回退时是无害的,而post请求在浏览器回退时会重新发送请求。
总的来说,GET和POST请求方法的主要区别在于它们的作用以及参数传递的方式以及能否缓存。
GET请求用于获取数据,通过URL传递参数(参数以问号 ? 的形式出现在URL后面,参数之间以 & 符号分隔,例如**example.com?name=john&age=20**。),而POST请求用于提交数据,通过请求体(例如:**name=john&age=20**)传递参数。
同时,GET请求是无害的,不会对服务器上的数据进行修改,而POST请求可以对服务器上的数据进行修改。
补充:
这是因为在浏览器的历史记录中,对于 GET 请求的页面,浏览器会缓存页面内容及其对应的 URL 和查询参数,而对于 POST 请求的页面,浏览器不会缓存页面内容及其对应的数据。
当用户在浏览器中访问一个 GET 请求的页面后,浏览器会将该页面及其 URL 和查询参数添加到浏览器的历史记录中,当用户点击浏览器的后退按钮时,浏览器会从历史记录中加载上一个页面,如果该页面是 GET 请求的页面,则浏览器会从缓存中加载该页面,而不是重新发送请求,因此不会产生任何副作用。
相反,当用户在浏览器中访问一个 POST 请求的页面后,浏览器不会将该页面及其数据添加到浏览器的历史记录中,因此当用户点击浏览器的后退按钮时,浏览器无法从缓存中加载该页面及其数据,而是重新发送请求,这可能会导致数据重复提交或产生其他副作用。
为了解决这个问题,可以使用 POST/重定向/GET 模式,即在 POST 请求完成后,将用户重定向到一个 GET 请求的页面,这样就可以将页面及其数据添加到浏览器的历史记录中,从而避免了在浏览器回退时重新发送 POST 请求的问题。
状态码:
状态码都是三位数字
1xx:表示通知信息的,如请求收到了或正在进行处理
2xx:表示成功,如接受或知道了
3xx:表示重定向,表示要完成请求还必须采取进一步的行动
4xx:表示客户的差错,如请求中有错误的语法或不能完成
| 403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求(请求的资源没有权限) |
|---|
5xx:表示服务器的差错,如服务器失效无法完成请求
http请求报文:
- 请求行:请求行包括HTTP请求方法、请求URL和HTTP协议版本。
- 请求头部:请求头部包括与请求相关的信息,比如客户端支持的语言、客户端使用的浏览器类型、请求发送的日期等。
- 空行:请求头部和请求体之间必须有一个空行。
- 请求体:只有POST、PUT等方法才有请求体。请求体包含了客户端提交的查询字符串、表单数据等信息。
http请求方法随协议升级的变化:
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
7、https
https与http的区别:
【 HTTPS的熟知端口号为443,而不是80 】
最大区别在于安全性。HTTPS通过在HTTP之上添加一层SSL/TLS协议,对数据进行加密,从而提供了更高的安全性,避免了传输过程中数据被窃听、篡改的风险。
具体来说,HTTPS相对于HTTP的主要优点包括:
- 数据加密:HTTPS使用SSL/TLS协议对数据进行加密,从而避免了数据在传输过程中被窃听、篡改等风险。
- 身份认证:HTTPS使用SSL/TLS证书对服务端进行身份认证,确保客户端与服务端通信的安全性。
- 数据完整性:HTTPS使用消息摘要算法对数据进行完整性校验,避免了数据被篡改的风险。
除此之外,HTTPS还可以有效地避免恶意攻击,比如中间人攻击、会话劫持等。
需要注意的是,HTTPS在加密、认证和完整性校验等方面的处理会增加通信的开销,导致请求速度变慢。此外,HTTPS需要使用SSL/TLS证书,通常需要购买,因此成本也相对较高。
8、对称加密和非对称加密区别
对称加密和非对称加密是常用的两种加密方式,它们的主要区别在于密钥的使用和管理方式。
对称加密使用同一个密钥进行加密和解密,加密和解密的过程都是快速的。但由于密钥是相同的,一旦密钥泄露,加密信息也将不再安全。
非对称加密使用一对密钥进行加密和解密,其中一个是公开密钥,另一个是私有密钥。公钥用于加密数据,私钥用于解密数据。由于私钥只有密钥持有者才能访问,因此非对称加密更加安全。
另外,由于非对称加密加密和解密的过程都比较慢,因此通常使用对称加密和非对称加密相结合的方式,称之为混合加密。在混合加密中,对称加密用于加密数据,非对称加密用于安全地传输对称加密所使用的密钥。这样可以同时保证安全性和效率。
9、数字证书:
服务器把证书传输给浏览器,浏览器从证书里取公钥。
需要做的是,证书的传输过程中,如何防止被修改。使用数字签名。
把证书内容生成一份签名,比对证书内容和签名是否一致就能察觉是否被修改。