1.网络分层
![](https://img.haomeiwen.com/i6345209/f5401a6407425d6c.png)
2.TCP概述
传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。
基本特性:1)面向连接;2)可靠性;3)往返时延(RTT)和超时重传(RTO);4)数据排序;5)流量控制;6)全双工
3.TCP的三次握手
建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立:
![](https://img.haomeiwen.com/i6345209/c1e8c93f6390d444.png)
PS:确认ACK、同步SYN这些大写表示标志位,其值为1或0;确认号ack、序列号seq小写的表序号。
- 第一次握手:建立连接时,客户端发送syn包(seq=j)到服务端,并进入SYN_SENT状态,等待服务端确认。
- 第二次握手:服务端收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,服务端进入SYN_RCVD状态。
- 第三次握手:客户端收到服务端的SYN+ACK包,向服务端发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务端进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
为什么需要三次握手?
为了实现可靠的数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。三次握手的过程即是通信双方互相告知序列号的起始值,并确认对方已经收到了序列号起始值的必经步骤。
TCP三次握手的漏洞-SYN洪泛攻击
攻击者客户端利用伪造的IP地址向服务端发出请求(第一次握手),而服务端的响应(第二次握手) 的报文将永远发送不到真实的客户端,服务端在等待客户端的第三次握手永远都不会有,在这种半开的连接过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽。
解决办法:1)无效连接监控释放;2)延缓TCB分配方法;3)防火墙
4.TCP的四次挥手
客户端和服务端通过三次握手建立了TCP连接后,当数据传送完毕,断开连接时就需要进行TCP的四次挥手(中断连接可以是客户端,也可以是服务端):
![](https://img.haomeiwen.com/i6345209/5453d50731f378c2.png)
- 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,并进入FIN_WAIT_1状态。
- 第二次挥手:服务端收到这个FIN,回发一个ACK(确认序号为收到的序号加1),并进入CLOSE_WAIT状态。客户端进入FIN_WAIT_2状态。
- 第三次挥手:服务端向客户端发送FIN请求关闭连接,并进入LAST_ACK状态。
- 第四次挥手:客户端收到FIN,回发ACK(确认序号为收到的序号加1),并进入TIME_WAIT状态。服务端收到ACK后就关闭连接,客户端则是等待2*MSL(最大报文段生存时间)后再关闭连接。
为什么需要四次挥手?
TCP是全双工(即客户端和服务端互相可以发送和接受请求),所以需要双方都确认关闭连接。
为什么需要TIME_WAIT状态?
1)为了保证客户端发送的最后一个ACK报文能够到达服务端;2)防止新连接中出现旧连接请求报文段。
5.一次完整的HTTP请求的过程
1)首先进行DNS域名解析(本地浏览器缓存、操作系统缓存或DNS服务器)
2)三次握手建立TCP连接
3)客户端发起HTTP请求
4)服务器响应HTTP请求
5)客户端解析html代码,并请求html代码中的资源
6)客户端渲染展示内容
7)关闭TCP连接
6. http的get和post的区别
http是应用层的协议,底层基于TCP/IP协议,所以本质上,get和post请求都是TCP请求。所以二者的区别都是体现在应用层上(HTTP的规定和浏览器/服务器的限制)
1)参数的传输方式:GET参数通过URL传递,POST放在Request body中。
2)GET请求在URL中传送的参数是有长度限制的,而POST没有。
3)对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。不过要注意,并不是所有浏览器都会在POST中发送两次包,比如火狐
4)对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
5)GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
6)GET请求只能进行url编码,而POST支持多种编码方式。
7)GET在浏览器回退时是无害的,而POST会再次提交请求。
8)GET产生的URL地址可以被Bookmark,而POST不可以。
9)GET请求会被浏览器主动cache,而POST不会,除非手动设置。
7.HTTPS和HTTP的区别
1)https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
8.TCP和UDP的区别
TCP提供的是面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。 简单的说,TCP注重数据安全,而UDP数据传输快点,但安全性一般。
网友评论