美文网首页
TCP协议和HTTP协议

TCP协议和HTTP协议

作者: Amy1234567 | 来源:发表于2021-11-08 00:31 被阅读0次

    TCP/IP四层协议

    imooc

    TCP(Transmission Control Protocol 传输控制协议)

    TCP协议是计算机网络中非常复杂的一个协议。

    1. 它解决了以下问题:

    (1). TCP协议可靠传输

    网络环境复杂,保证数据准确无误到达

    (2). TCP协议流量控制

    感知对方压力并控制流量(比如网卡性能差异,造成接收压力,TCP可以减缓传输,控制流量。感受接收方的压力)

    (3). TCP协议拥塞控制

    感知网络压力并控制发送速度(如果网络出现拥塞,TCP可以控制发送速度感受网络的压力)

    2. TCP报文

    imooc

    TCP协议是面向字节流的协议,不管传输什么数据,都需要转成字节,再传输

    3. 应用场景

    (1). 微信、QQ等APP消息发送接收

    (2). 浏览器-服务器通信

    (3). 其他可靠通信的场景

    TCP的三次握手与四次挥手

    (1). 三次握手

    三次握手是建立连接的过程,当客户端向服务端发起连接时,会发一包连接请求数据,过去询问一下,能否与你建立连接,这包数据称为SYN包,如果对端同意连接,则回复一包SYN+ACK包,客户端收到后回复一包ACK包,连接建立,因为这个过程中互相发送了三包数据,所以称之为“三次握手”

    哔哩哔哩UP掌芝士

    为什么不是三次握手而不是两次握手?

    这是为了防止因为已失效的请求报文,突然又传到服务器引起错误。三次握手本质上是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立可靠的连接。

    三次握手之后,客户端和服务器端都进入到了传递数据的状态。

    (2). 传输确认

    一包数据有可能会被拆成多包发送,如何处理丢包问题?

    这些数据包到达的先后顺序不同,如何处理乱序问题?

    针对这些问题,TCP协议为每一个连接,建立了一个发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1。发送数据时,从发送缓冲区取一部分数据组成发送报文,在其TCP协议中会附带序列号和长度。接收端在收到数据后,需要回复确认报文,确认报文中的ACK等于接受序列号加长度,也就是下一包数据需要发送的起始序列号。这样一问一答的发送方式,能够使发送端确认发送的数据,已经被对方收到,发送端也可以发送一次连续多包数据,接收端只需要回复一次ACK就可以了。这样发送端可以把待发送的数据分割成一系列的碎片,发送到对端,对端根据序列号和长度,在接收后重构出来完整的数据,假设其中丢失了某些数据包,在接收端可以要求发送端重传。

    TCP连接是全双工的,对于两端来说均采用上述机制。

    哔哩哔哩UP掌芝士

    (3). 四次挥手

    假设客户端主动发起连接关闭请求,它需要将服务端发起一包FIN包,表示要关闭连接,自己进入中止等待1状态,这是第一次挥手。

    服务端收到FIN包,发送一包ACK包,表示自己进入了关闭等待状态,客户端进入中止等待2状态,这是第二次挥手。

    服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手。

    客户端收到之后回复ACK包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。

    为什么客户端需要等待超时时间?

    这是为了保证对方已收到ACK包,因为假设客户端发送完最后一包ACK后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态。客户端在发送完最后一包ACK包后等待一段时间,这时服务端因为没有收到ACK包,会重发FIN包,客户端会响应FIN包,重发ACK包,并刷新超时时间,这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中,进行可靠的连接断开。

    哔哩哔哩UP掌芝士

    UDP协议是非连接的,发送数据就是把数据封装一下,然后从网卡发送出去就可以了,数据包之间并没有状态上的联系,正因为UDP这种简单的处理方式,导致它的性能损耗非常少,对于CPU内存资源的占用也远小于TCP,但是对于网络传输过程中时产生的丢包,UDP协议并不能保证,所以UDP在传输稳定性上要弱于TCP

    TCP vs UDP 

    TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如传输网络,发送邮件,浏览网页等。

    UDP的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高,但是对少量丢包没有太大要求的场景,比如域名查询,语音通话,视频直播等。UDP还有一个非常重要的应用场景,就是隧道网络,比如VPN,以及在SDN中用到的VXLAN.

    哔哩哔哩UP掌芝士

    网络套接字与通信过程

    进程之间的通信:HTTP协议

    imooc

    计算机可以同时运行多个不同的进程,比如打开浏览器的同时,可以播放视频,那么如何识别是哪一个进程进行通信呢?

    (1). 使用端口(Port)来标记不同的网络进程

    (2). 端口(Port)使用16比特位表示0~2^16(0~65535)

    imooc imooc

    套接字(Socket)是抽象概念,表示TCP连接的一段。

    通过套接字可以进行数据发送或接收。

    imooc

    HTTP(HyperText Transfer Protocol: 超文本传输协议)

    通过HTTP协议来获取互联网资源。包含着超链接,图片,视频等多媒体的副本,这个副本可以通过HTTP协议进行传输

    imooc

    互联网资源那么多,怎么获取    --通过地址获取

    imooc

    HTTP请求方法:

    imooc

    比较常用的请求方法

    (1). GET:   获取指定的服务器资源

    (2). POST:  提交数据到服务端

    (3). DELETE:  删除指定的服务器端资源

    (4). UPDATE:  更新指定的服务端资源

    Web服务器工作流程

    (1). 接受客户端请求:服务端接受客户端连接

    (2). 接收请求报文,通过报文,服务端可以知道浏览器想要干什么,想获取或操作什么资源

    (3). 处理请求

    (4). 访问Web资源:通过路径去判断需要访问哪些资源

    (5). 构造应答:构成应答报文

    (6). 发送应答:把应答报文发送给浏览器

    imooc

    HTTP协议的请求报文详解

    请求报文的主要内容

    imooc

    1. 请求行:不管有多少内容,都只有一行

    包含:请求方法(GET,POST等),请求地址(唯一对应Web服务器的资源),HTTP版本

    2. 请求头:

    通信的附加信息:比如说明当前手机还是计算机

    格式:<key>:<value>

    常用的请求头:

    imooc

    实例:

    3. 请求内容

    发送数据

    数据格式是不固定的,只要客户端和服务端协商好就可以

    注意:请求内容不是必须的

    4. 实例

    imooc

    HTTP协议的应答报文详解

    imooc

    1. 状态行

    状态码:三位数

    imooc imooc

    304: 客户端缓存的数据并没有发生变化,不需要再次请求后台,可以直接使用本机缓存,即304为重定向到本机缓存

    2. 应答头

    和请求头类似

    imooc

    常用的应答头

    imooc

    3. 实例:

    imooc

    相关文章

      网友评论

          本文标题:TCP协议和HTTP协议

          本文链接:https://www.haomeiwen.com/subject/vhctzltx.html