TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
tcp三次握手
第一步,client发送syn到server发起握手
第二步,server收到syn后回复syn+ack给client
第三步,client收到syn+ack后,回复server一个ack标识收到server的syn+ack (此时client的48287端口的连接已经是已建立的)
握手的核心目的是告知对方seq(绿框是client的初始seq,蓝色框是server 的初始seq),对方回复ack(收到的seq+包的大小),这样发送端就知道有没有丢包了。
断开连接的四次挥手
- 第一步: client主动发送fin包给server
- 第二步: server回复ack(对应第一步fin包的ack)给client,表示server知道client要断开了
- 第三步: server发送fin包给client,表示server也可以断开了
- 第四部: client回复ack给server,表示既然双发都发送fin包表示断开,那么就真的断开吧
为什么握手三次,挥手四次?
看起来挥手的时候多一次,主要是收到第一个fin包后单独回复了一个ack包,如果能回复fin+ack那么四次挥手也就变成三次了。
博主理解:之所以绝大数时候我们看到的都是四次挥手,是因为收到fin后,知道对方要关闭了,然后OS通知应用层要关闭啥的,这里应用层可能需要做些准备工作,有一些延时,所以先回ack,准备好了再发fin 。 握手过程没有这个准备过程所以可以立即发送syn+ack。