Http的三次握手四次挥手

客户端和服务端是通过三次握手协议建立TCP会话连接。建立连接的理论图如下

è¿éåå¾çæè¿°

通过wireshark进行抓包,得到数据

è¿éåå¾çæè¿°

可以看出10.240.80.99     58971是客户端的一个临时端口,47.95.47.253     80是服务器端口 

第一次是 客户端向服务器端发送请求 58971-->80 【SYN】

第二次  服务器向客户端发送请求,80-->58971 【SYN,ACK】,并携带第一次传来的SYN

第三次 客户端向服务器端发送请求  58971-->80 【ACK】

为什么需要三次握手:

  • 第一次握手成功:说明客户端的数据可以被服务端收到,说明客户端的发功能可用,说明服务端的收功能可用。但客户端自己不知道数据是否被接收
  • 第二次握手成功:说明服务端的数据可以被客户端收到,说明服务端的发功能可用,说明客户端的收功能可用。同时客户端知道自己的数据已经正确到达服务端,自己的发功能正常。但是服务端自己不知道数据是否被接收
  • 第三次握手成功:说明服务端知道自己的数据已经正确到达客户端端,自己的发功能正常。至此服务成功建立

建立连接后,可以发送HTTP请求:

è¿éåå¾çæè¿°

1、客户端向服务器端发送http请求,如图:GET     /hry2015/HTTP/1.1

2、服务器端对客户端请求进行确认,如图中间的TCP

3、服务器端响应如图:1139 HTTP/1.1 200  OK

客户端和服务端交互数据完毕后,开始通过四次挥手结束TCP会话连接。

  1. 第一次挥手:客户端 发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入FIN_WAIT_1状态(不能再发送数据到服务端,但能够发送控制信息ACK到服务端)。
  2. 第二次挥手:服务端收到FIN后,知道不会再有数据从客户端传来,发送ACK进行确认,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态。
  3. 第三次挥手:服务端发送FIN给对方,表示自己没有数据要发送了,服务端进入LAST_ACK状态,然后直接断开TCP会话的连接,释放相应的资源。
  4. 第四次挥手:客户端收到了服务端对FIN的ACK后,进入FIN_WAIT2状态(等待服务端完成资源释放的一系列工作:然后释放你为创建这个连接所分配的资源,并通知我你关闭了); 客户端收到了服务端的FIN信令后,进入TIMED_WAIT状态,并发送ACK确认消息。客户端在TIMED_WAIT状态下,等待2MSL一段时间,没有数据到来的,就认为对面已经收到了自己发送的ACK并正确关闭了进入CLOSE状态,自己也断开了到服务端的TCP连接,释放所有资源。当服务端收到客户端的ACK回应后,会进入CLOSE状态,并关闭本端的会话接口,释放相应资源。

è¿éåå¾çæè¿°

第一次握手 客户端(10.240.80.99) 发送ACK ,通过FIN通知对方关闭连接

第二、三次握手:服务端(47.95.47.253)关闭的连接,通过FIN通知对方关闭连接

第四次握手客户端(10.240.80.99 )关闭连接,并发送ACK值和Ack确认号( Ack的值+1) 

四次挥手:可以由服务器端发起,也可以由客户端发起

Charles网络调试代理工具

http默认端口80

https默认端口443

HRI和URL区别

HRI:统一资源标识符,相当于人的身份证号

URL:统一资源定位符,相当于人的地址

Http是无状态的,即没有记忆功能,

猜你喜欢

转载自blog.csdn.net/douxingpeng1/article/details/82561479