文章目录
HTTP(Hyper Text Transfer Protocol)即超文本传输协议
超文本:
原来的计算机只有简单的文本格式,故文本就是指简单的文本格式,随着计算机的发展,出现了视频,图片,音乐等格式,而超文本就是原来文本语义的引申
传输:
由传输载体(例如同轴电缆,电话线,光缆)负责把二进制数据包由计算机终端传输到另一个终端的过程,称为传输(transfer)
协议:
协议就是一种约定和规范,大家都遵守的规范,只有都使用同一种规范,才能有条不紊的进行信息交互,常见的协议有:SMTP
,TCP
,UDP
,FTP
ISO 七层网络模型和TCP/IP四层概念模型
TCP/IP四层概念模型
是在ISO模型基础上建立的,简化了IOS模型,在实际应用中更为广泛,以下是两种模型的关系:
ISO 七层网络模型
TCP/IP四层概念模型
一个 HTTP 请求,在整个网络中的请求过程
发送过程
当应用程序用 TCP
传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息
接收过程
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用
在接收报文的过程中,报文的每一跳都会拆开MAC头,和封装入新的MAC头,具体的报文转发过程可以参考以下博文
为什么有了 MAC 层还要走 IP 层呢?
mac 地址就好像个人的身份证号,人的身份证号和人户口所在的城市,出生的日期有关,但是和人所在的位置没有关系,人是会移动的,知道一个人的身份证号,并不能找到它这个人,mac 地址类似,它是和设备的生产者,批次,日期之类的关联起来,知道一个设备的 mac,并不能在网络中将数据发送给它,除非它和发送方的在同一个网络内。所以要实现机器之间的通信,还需要有 ip 地址的概念,ip 地址表达的是当前机器在网络中的位置,类似于城市名+道路号+门牌号的概念。通过 ip 层的寻址,我们能知道按何种路径在全世界任意两台 Internet 上的的机器间传输数据。
IP协议和TCP/UDP协议
IP协议
TCP
和 UDP
是两种最为著名的传输层协议,他们都是使用 IP
作为网络层协议。IP协议提供了一组数据报文服务,每组分组报文都是由网络独立处理和分发,就像寄送快递包裹一样,为了实现这个功能,每个 IP 报文必须包含一个目的地址的字段;就像我们寄送快递都需要写明收件人信息,但是和我们寄送快递一样,也可能会出现包裹丢失问题,所以 IP 协议只是一个“尽力而为”的协议,在网络传输过程中,可能会发生报文丢失、报文顺序打乱,重复发送的情况。IP 协议层之上的传输层,提供了两种可以选择的协议,TCP
、UPD
。这两种协议都是建立在 IP 层所提供的服务基础上,根据应用程序的不同需求选择不同方式的传输;
TCP/IP
TCP/IP
协议你一定听过,TCP/IP
我们一般称之为协议簇,什么意思呢?就是 TCP/IP
协议簇中不仅仅只有 TCP
协议和 IP 协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是 TCP / IP
协议,其他的还有 UDP
、ICMP
、ARP
等等,共同构成了一个复杂但有层次的协议栈。
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是传输是可靠的?
- 三次握手协议,保证连接可靠
- 四次挥手协议,保证传输可靠
- 确认和重传机制
- 建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础
- 传输过程中,如果Checksum校验失败、丢包或延时,发送端重传
- 数据包重排序
- TCP有专门的序列号SN字段,可提供数据re-order
- 流量控制
- 窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量
- 拥塞控制
TCP的拥塞控制由4个核心算法组成。- “慢启动”(Slow Start)
- “拥塞避免”(Congestion avoidance)
- “快速重传 ”(Fast Retransmit)
- “快速恢复”(Fast Recovery)
来源:CSDN
作者:IT-Lenjor
链接:https://blog.csdn.net/weixin_29053561/article/details/103944787