http, tcp三次握手和四次挥手

http请求的一次过程:
举个例子:比如我想访问www.baidu.com这个网址,
1 首先会对这个www.baidu.com进行dns解析,找到对应的ip地址
2 然后 客户端对这个ip地址所对应的服务器进行tcp三次握手
3 tcp连接建立以后,客户端发起http连接请求
4 服务器接收请求,并且响应
5 客户端接收来自服务端的响应
6 断开连接时, tcp进行四次挥手,断开连接

dns怎么解析的呢?
首先向本地的dns服务器发起查询请求,如果找不到,就会到根dns服务器去找,然后根服务器再以子域.com地址应答,然后本地dns服务器向com dns服务器请求ip地址,.com dns服务器在以子域baidu.com地址来应答,本地dns服务器在向baidu.com 这个dns服务器进行ip请求,然后baidu.com 这个dns服务器就把www.baidu.com网址对应的ip地址告诉本地dns服务器,然后本地dns服务器在返回ip地址给客户机。

tcp三次握手:
tcp是一个传输层协议
功能:
可靠传输 同序传输 建立会话 流量控制
说到tcp,不得不说一下udp
udp也是一个传输层协议
udp它是一个尽力传输协议,不可靠,事先不会建立会话,不会同序传输,不会可靠传输,不会进行流量控制

udp的报文字段数比较小,允许丢包现象,这种特性很适合实时视频,因为实时视频需要流量高速传输,而且传输过程中可能会丢包,但是这并不会对通信造成很大影响,因为你视频的时候丢包,可能就是表现为图像失真或者声音不是很清楚,这都是短暂的过程。tcp报文字段多,为了保证各种功能,有许多复杂的机制,这样开销会比较大,它适合于web应用,数据库和电子邮件客户端等等。这些应用不允许数据的丢失,因为任何的数据丢失都有可能导致通信的失败。

tcp三次握手:
http, tcp三次握手和四次挥手
第一次握手:
客户端发送一个syn,然后客户端进入syn-send状态,syn为同步序列编号

第二次握手:
服务端接受了客户端的syn,并且确认了,然后自己也发一个syn(SYN+ACK),服务端进入syn-recv

第三次握手:
客户端收到了服务端的SYN+ACK,然后客户端发送一个ACK给服务端,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

四次挥手:
图片:
http, tcp三次握手和四次挥手
第一次挥手:
客户端发送一个FIN,用来关闭客户端到服务器的数据发送,客户端进入FIN-WAIT1状态
第二次挥手:
服务端接收到FIN,发送一个ACK,此时服务器进入close_wait状态,客户端进入WAIT2
第三次挥手:
服务端发送一个FIN给客户端,服务端进入LAST-ACK状态,客户端接收并且进入time-wait状态
第四次挥手:
客户端发送一个ACK,服务端接收后, 两者就进入closed状态

四次挥手释放连接时,等待2MSL的意义?即time_wait = 2MSL的意义
第 一,为了保证A发送的最有一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN和ACK 报文段的确认。B会超时重传这个FIN和ACK报文段,而A就能在2MSL时间内收到这个重传的ACK+FIN报文段。接着A重传一次确认。
第二,就是防止上面提到的已失效的连接请求报文段出现在本连接中,A在发送完最有一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失