首先,
介绍HTTP请求头。都说面试总是问HTTP请求,赶紧去网上搜搜了解了解,看看博客什么的,听博客里面说:
比如 :HTTP 请求报文 由请求行 ,请求头 ,请求包体组成,
请求行 :包含 请求的方法、URL、协议版本 ;
请求头: 包含一些提交给服务器关于客户端的基本信息什么的
请求包体: 用于Post方法,提交数据 什么的。
但是很一部分人,你去浏览器里看过HTTP请求头是什么样子? 死记硬背有什么用,自己打开google,开发者模式,
network 这不都出来了么,背什么背,自己看看不比什么强!!!
什么都有,自己看。。。,看不懂的 ,,,,查。。。。。别偷懒
其次,
所谓的三次握手,四次握手
二话不说,上个图:
图的上半部分,请求的演示,下半部分,关闭的演示。。。。
首先需要明确的一点是:TCP协议他是面向连接的,何谓面向连接,通俗点说就是,打电话,我给你打电话,然后你接听了电话,连接到了,这才能说话吧。不然说个JJ
三次连接的过程就相当于打电话。那些名词SYN,ACK 什么意思。。。。自己查。。。。。。网上都有
过程如下:
客户端想勾引服务器: 波---发个包.. 妹纸,约么(SYN)。。
接着客户端等回复呗,进入了SYN_SEND状态,,,,
妹纸如果想跟你约呢,就发个娇羞的表情(SYN_ACK),进入SYN_RCVD状态,,,
接着,猴急的客户端,赶紧发了个收到(ACK),六点楼下见。。。。然后俩人约起来,,,ESTABLISED。。。
大概就是这么个过程。。。。
--------------------------------------------------------------------------
四次连接呢,就是分手了。。。。
分手呢,双方谁都可能先提出来。。。
假设Client端提出分手,发送FIN报文。妹纸(server端)接到FIN报文后,
客户端 意思是说"跟你做不了恋人了,但是朋友还是可以的",(我Client端没有数据要发给你了,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据)。
妹纸说: "你的请求我收到了,但是我还没准备好,请继续你等我的消息"。
这个时候,Client端就进入 FIN_WAIT状态,继续等待Server端的FIN报文。
当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。
Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。
Server端收到ACK后,"就知道可以断开连接了"。
Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!