浅谈HTTP(简) TCP协议

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈HTTP(简) TCP协议相关的知识,希望对你有一定的参考价值。

前言:HTTP请求是依赖TCP协议的,当我们掌握HTTP请求流程之后,应当掌握TCP中究竟发生了什么,做了什么事情?


补充:TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.168.1.1 而端口号为80,那么得到的套接字为192.168.1.1:80。


1.三次握手

  1. TCP服务器创建 TCB 传输控制块,服务器进入监听(Listener)状态。
  2. 首先由 Client 端向服务器端发送SYN = 1 ,seq = a(序列号) , 发出连接请求报文,此时,TCP 客户端进程进入了 SYN-SENT(同步已发送状态) 状态 。SYN报文段,不能携带数据,但需要消耗掉一个序号
  3. Server 端收到 Client 端发送的请求后,确认报文中应该 ACK=1,SYN=1,确认号是ack=a+1,同时也要为自己初始化一个序列号 seq = b携带数据为【ACK=1,SYN=1,ack=a+1,seq=b】,同时,Server 端 进入 SYN-RCVD(同步收到) 状态【这个报文也不能携带数据,但是同样要消耗一个序号
  4. Client 端收到来自 Server 端的确认后,会向 Server 端发送 ACK=1,ack=b+1,自己的序列号seq=a+1 确认收到 ,此时 Client 端进入 ESTABLISHED(已建立连接) 状态。【ACK报文段可以携带数据,但是如果不携带数据则不消耗序号
  5. Server 端 收到 Client 端数据后 , 也会进入 ESTABLISHED(已建立连接) 状态。
  6. 这个过程即完成三次握手

如下图所示:

在这里插入图片描述

拓展:如果在三次握手中发生了丢包,又会是一个怎样的机制呢?使用一个简单的例子模拟为什么需要三次握手

  • 打电话的场景
  • 电话接通…
  • A:你好啊,能听到我说话吗?
  • B:你好,能听到你说话
  • A:我也可以听得到你说话
  • 开始交谈…

这个过程其实很好理解,A在向B确认自己的传输通信是否正常,B向A反馈A是否正常,最后A向B反馈B是否正常,当这几个过程都正常之后,才能建立起连接

问题:如果中途发生丢包行为了怎么办?

  • 打电话的场景
  • 电话接通…
  • A:你好啊,能听到我说话吗?
  • B:你好,能听到你说话
  • B:喂?你还在吗?能听到我说话吗?
  • B看到这么久无人回应,于是挂断电话…

在这里插入图片描述
如对话中B行为所示,在收不到对方回应时,会重新发送丢失的包,并且收到对方的反馈才算确认完成,如果B(长时间)未得到回应,自然就会挂掉电话(断开连接)。

三次握手细节详解:浅谈HTTP(简)TCP概念深入

2.四次挥手

加深印象:模拟课堂结束的过程

  • 叮叮叮
  • 下课铃已经响起来了,让我们把镜头推到C32班
  • 班长:王老师,下课铃响了,我们应该下课了
  • 王老师:我知道,等我把这道题讲完
  • 王老师:好了,这道题讲完了,同学们下课
  • 全班同学(起立):老师再见,谢谢老师
  • 直到看到王老师走出教室才坐下

挥手的过程如图所示:

在这里插入图片描述
过程解析:

  1. Client 端主动发起关闭请求,发送 FIN 到 Server 端 , 此时,Client 端进入 FIN-WAIT-1(等待终止1) 状态
  2. Server 端收到后,发送 ack 返回给 Client 端 , 此时 Server 端进入 CLOSE-WAIT(关闭等待) 状态
  3. TCP服务器通知高层的应用进程,Client 端向 Server 器的方向就释放了,这时候处于半关闭状态,即Client 端已经没有数据要发送了,但是 Server 端若发送数据,Client 端依然要接受。此时,客户端进入 FIN-WAIT-2(等待终止2) 状态。
  4. Server 端数据传输完之后 , 发送 FIN 到 Client 端 ,此时 Server 端 进入 LAST-ACK(等待确认关闭) 状态
  5. Client 端收到 Server 端的FIN ,返回 ack 给 Server 端 ,此时 Client 端进入 TIME-WAIT(等待2MSL) 状态,Client 端会进入等待区 (2MSL)两倍的交互时间,为的是确保 Server 端收到 Client 端的ack 。
  6. Server 端 收到 Client 端的 确认, 进入 CLOSED 状态 , 撤销TCB , 结束TCP连接,即完成四次挥手。

以上是关于浅谈HTTP(简) TCP协议的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Http协议与TCP/IP协议

浅谈HTTP协议

浅谈Http和TCP

浅谈TCP/IP协议

浅谈TCP/UDPIP SocketHTTP

浅谈 TCP 协议