HTTP(TCP/IP)通信协议

冷暖自知 提交于 2020-01-12 14:51:19

HTTP(Hyper Text Transfer Protocol)即超文本传输协议

超文本:

原来的计算机只有简单的文本格式,故文本就是指简单的文本格式,随着计算机的发展,出现了视频,图片,音乐等格式,而超文本就是原来文本语义的引申

传输:

由传输载体(例如同轴电缆,电话线,光缆)负责把二进制数据包由计算机终端传输到另一个终端的过程,称为传输(transfer)

协议:

协议就是一种约定和规范,大家都遵守的规范,只有都使用同一种规范,才能有条不紊的进行信息交互,常见的协议有:SMTPTCPUDPFTP

ISO 七层网络模型和TCP/IP四层概念模型

TCP/IP四层概念模型是在ISO模型基础上建立的,简化了IOS模型,在实际应用中更为广泛,以下是两种模型的关系:
网络分层模型

ISO 七层网络模型

在这里插入图片描述

TCP/IP四层概念模型

TCP/IP四层概念模型

一个 HTTP 请求,在整个网络中的请求过程

发送过程

当应用程序用 TCP 传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息
发送过程

接收过程

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用
接收过程
在接收报文的过程中,报文的每一跳都会拆开MAC头,和封装入新的MAC头,具体的报文转发过程可以参考以下博文

浅谈通信网络(四)——报文转发(IP/MAC)

为什么有了 MAC 层还要走 IP 层呢?

mac 地址就好像个人的身份证号,人的身份证号和人户口所在的城市,出生的日期有关,但是和人所在的位置没有关系,人是会移动的,知道一个人的身份证号,并不能找到它这个人,mac 地址类似,它是和设备的生产者,批次,日期之类的关联起来,知道一个设备的 mac,并不能在网络中将数据发送给它,除非它和发送方的在同一个网络内。所以要实现机器之间的通信,还需要有 ip 地址的概念,ip 地址表达的是当前机器在网络中的位置,类似于城市名+道路号+门牌号的概念。通过 ip 层的寻址,我们能知道按何种路径在全世界任意两台 Internet 上的的机器间传输数据。

IP协议和TCP/UDP协议

IP协议

TCPUDP 是两种最为著名的传输层协议,他们都是使用 IP 作为网络层协议。IP协议提供了一组数据报文服务,每组分组报文都是由网络独立处理和分发,就像寄送快递包裹一样,为了实现这个功能,每个 IP 报文必须包含一个目的地址的字段;就像我们寄送快递都需要写明收件人信息,但是和我们寄送快递一样,也可能会出现包裹丢失问题,所以 IP 协议只是一个“尽力而为”的协议,在网络传输过程中,可能会发生报文丢失、报文顺序打乱,重复发送的情况。IP 协议层之上的传输层,提供了两种可以选择的协议,TCPUPD。这两种协议都是建立在 IP 层所提供的服务基础上,根据应用程序的不同需求选择不同方式的传输;

TCP/IP

TCP/IP 协议你一定听过,TCP/IP 我们一般称之为协议簇,什么意思呢?就是 TCP/IP 协议簇中不仅仅只有 TCP 协议和 IP 协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是 TCP / IP 协议,其他的还有 UDPICMPARP 等等,共同构成了一个复杂但有层次的协议栈。

TCP 协议能够检测和恢复 IP 层提供的主机到主机的通信中可能发生的报文丢失、重复及其他错误。TCP 提供了一个可信赖的字节流通道,这样应用程序就不需要考虑这些问题。同时,TCP 协议是一种面向连接的协议,在使用 TCP 进行通信之前,两个应用程序之间需要建立一个 TCP 连接,而这个连接又涉及到两台电脑需要完成握手消息的交换。

TCP三次握手

由于 TCP 协议是一种可信的传输协议,所以在传输之前,需要通过三次握手建立一个连接,所谓的三次握手,就是在建立 TCP 链接时,需要客户端和服务端总共发送 3 个包来确认连接的建立
三次握手

TCP四次挥手

四次挥手表示 TCP 断开连接的时候,需要客户端和服务端总共发送 4 个包以确认连接的断开;客户端或服务器均可主动发起挥手动作(因为 TCP 是一个全双工协议),在socket 编程中,任何一方执行 close() 操作即可产生挥手
四次挥手

为什么握手只需要3次,挥手需要四次

三次握手是因为因为当 Server 端收到 Client 端的 SYN 连接请求报文后,可以直接发送 SYN+ACK 报文。其中 ACK 报文是用来应答的,SYN 报文是用来同步的。但是关闭连
接时,当 Server 端收到 FIN 报文时,很可能并不会立即关闭 SOCKET(因为可能还有消息没处理完),所以只能先回复一个 ACK 报文,告诉 Client 端,“你发的 FIN 报文我收到了”。只有等到我 Server 端所有的报文都发送完了,我才能发送 FIN 报文,因此不能一起发送。故需要四次挥手。

TCP数据传输过程的流量控制(滑动窗口)和拥塞控制

建立可靠连接以后,就开始进行数据传输了。在通信过程中,最重要的是数据包,也就是协议传输的数据。如果数据的传送与接收过程当中出现收方来不及接收的情况,这时就需要对发方进行控制以免数据丢失。利用滑动窗口机制可以很方便的在 TCP 连接上实现对发送方的流量控制。TCP 的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数。

(1)滑动窗口协议

滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题;发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口

(2)发送窗口

就是发送端允许连续发送的幀的序号表。发送端可以不等待应答而连续发送的最大幀数称为发送窗口的尺寸。

(3)接收窗口

接收方允许接收的帧的序号表,凡落在 接收窗口内的帧,接收方都必须处理,落在接收窗口外的帧被丢弃。接收方每次允许接收的幀数称为接收窗口的尺寸。

(4)滑动窗口调整过程(慢开始&线性增长)

拥塞控制的工作过程

UDP/IP

UDP 协议不会对 IP 层产生的错误进行修复,而是简单的扩展了 IP 协议“尽力而为”的数据报文服务,使他能够在应用程序之间工作,而不是在主机之间工作,因此使用 UDP 协议必须要考虑到报文丢失,顺序混乱的问题。典型的应用就是 直播。

TCP 和 UDP 的区别

  • TCP 是面向连接的,UDP 是面向无连接的
  • UDP 程序结构较简单,仅仅扩展了HTTP的“尽力而为”的传输
  • TCP 是面向字节流的,UDP 是基于数据报的
  • TCP 保证数据正确性,UDP 可能丢包
  • TCP 保证数据顺序,UDP 不保证

为什么TCP是传输是可靠的?

  1. 三次握手协议,保证连接可靠
  2. 四次挥手协议,保证传输可靠
  3. 确认和重传机制
    • 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
    • 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传
  4. 数据包重排序
    • TCP有专门的序列号SN字段,可提供数据re-order
  5. 流量控制
    • 窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量
  6. 拥塞控制
    TCP的拥塞控制由4个核心算法组成。
    • “慢启动”(Slow Start)
    • “拥塞避免”(Congestion avoidance)
    • “快速重传 ”(Fast Retransmit)
    • “快速恢复”(Fast Recovery)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!