1.TCP三次握手
TCP三次握手过程:
(1):客户端发送SYN包到服务器,并进入SYN_SEND状态;
(2):服务器收到SYN包,必须确认客户端的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器计入SYN_RECV状态;
(3):客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此时客户端进入ESTABLISHED状态,完成了3次握手。
2.TCP的四次挥手
TCP四次挥手过程:
(1):客户端发送一个FIN,用来关闭客户端到服务端的数据传输,客户端进入到FIN_WAIT_1状态;
(2):服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入到CLOSE_WAIT状态;
(3):服务器发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态;
(4):客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSE状态。
3.附录:三次握手跟四次挥手中常见问题
(1)为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
(2)为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
4.TCP和UDP的区别:
TCP(可靠、有序、五丢失、不重复)
(1)面向连接的传输层协议
(2)每一条TCP连接只能有两个端点
(3)提供可靠的交付
(4)提供全双工通信(TCP连接两端都没有发送和接收缓存)
(5)面向字节流
UDP
(1)无需建立连接
(2)无连接状态(接收和发送缓存,拥塞控制参数和序号与确认号的参数)/开销小
(3)分组首部开销小(8字节,TCP首部20字节)
(4)应用层能更好地控制要发送的数据和发送时间
TCP及UDP首部格式:
5.HTTP
HTTP主要特点:
(1)支持客户/服务器模式
(2)简单快捷
(3)灵活
(4)无连接
(5)无状态
请求响应步骤:
(1)客户端连接到web服务器
(2)发送HTTP请求
(3)服务器接收请求并返回HTTP响应
(4)释放TCP连接
(5)客户端浏览器解析HTML内容
浏览器键入URL,按下回车之后经历的流程:
(1)DNS解析
(2)TCP连接
(3)发送HTTP请求
(4)服务器处理请求并返回HTTP报文
(5)浏览器解析渲染页面
(6)连接结束
HTTP状态码:
(1)200 OK:请求已正常处理。
(2)400 Bad Request:服务器端无法理解客户端发送的请求,请求报文中可能存在语法错误。
(3)401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。
(4)403 Forbidden:不允许访问那个资源。该状态码表明对请求资源的访问被服务器拒绝了。(权限,未授权IP等)
(5)404 Not Found:服务器上没有请求的资源。路径错误等。
(6)500 Internal Server Error:貌似内部资源出故障了。该状态码表明服务器端在执行请求时发生了错误。也有可能是web应用存在bug或某些临时故障。
(7)503 Service Unavailable:抱歉,我现在正在忙着。该状态码表明服务器暂时处于超负载或正在停机维护,现在无法处理请求。
6.Cookie和Session
Cookie:
(1)是由服务器发送给客户端的特殊信息,以文本的形式存放在客户
(2)客户端再次请求时,会把Cookie回发
(3)服务器接收到后,会解析Cookie生成与科幻段相对应的内容
Session:
(1)服务器端的机制,在服务器上保存的信息
(2)解析客户端请求并操作Session id,按需保存状态信息
Cookie与Session的区别:
(1)Cookie数据存放与浏览器上,Session放在Server中
(2)Session相对于Cookie更安全
(3)若考虑减轻服务器负担,应当使用Cookie
7.HTTPS
HTTPS实现原理:
(1)client向server发送请求,然后连接到server的443端口。
(2)服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。
(3)传送证书:这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
(4)客户端解析证书:这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(秘钥)。然后用证书对该随机值进行加密。
(5)传送加密信息:这部分传送的是用证书加密后的秘钥,目的就是让服务端得到这个秘钥,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
(6)服务段加密信息:服务端用私钥解密秘密秘钥,得到了客户端传过来的私钥,然后把内容通过该值进行对称加密。
(7)传输加密后的信息:这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
(8)客户端解密信息:客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。
HTTP和HTTPS的区别:
(1)HTTPS需要到CA申请证书,HTTOP不需要
(2)HTTPS密文传输,HTTP明文传输
(3)连接方式不同,HTTPS默认端口号443,HTTP80
(4)HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全