三次握手

第一次请求方发送SYN和初始序列号seq=x给接收方
接受放接受到信息之后,发送一个初始序列号seq=x,并且把SYN=1,awk=1,表示接收到信息,并且询问请求放
请求方接收到信息之后,再发送信息给接收方,表示自己可以接受和发送消息

问题一:只建立两次握手,会有什么问题
比如client发送请求到server端
server端接受到client端之后的数据,向client端发送数据,
如果这个时候数据丢失了,client就会认为连接没有建立好
这样server段超时之后,会重新发送数据包到client端,这样就形成了死锁

四次挥手

client端发送释放连接数据,并且把自身置为等待状态
server端接受到client端的释放信号,立即发送确认报文给client端,并进入等待关闭状态
server端经过等待关闭(把剩余数据发送完成),再次向server端发送准备好释放(没有数据传输)的信号
client端接收到server端准备好释放信号后,再次像server端发送已经接受到释放信号,TIME-WAIT阶段等待2MSL ( 最大报文生存时间) 后再断开连接,server端也断开连接

问题二:为什么客户端在TIME-WAIT阶段要等2MSL?
确认最后最后一次挥手,server端正常断开了。
2MSL即是一个发送和一个回复所需的最大时间。

问题三:为什么三次握手,四次挥手
因为握手过程没有数据传输,不需要确认数据是否传输完成,多一次挥手是需要确认数据传输已经完成,可以开始关闭连接了

websocket

websocet也是基于TCP连接,但是建立连接之后就跟HTTP协议无关了
websocket请求头带有Connection:Upgrade 和Upgrade:websocket
tcp连接是长连接,需要通信双方释放断开连接
http之所以是无状态的,是因为服务端没有记住浏览器端的状态

问题四:为什么TCP是双向连接,但是http是单向的
如果http改成双向的,当一个用户打开浏览器之后,就和服务器建立了一个双向TCP连接,但是一个服务器所能建立的TCP连接数量有限,这样就造成了一个服务器只能为几百上千人服务