聊TCP/IP协议之前, 咱们先看一下OSI七层模型.
第 7 层:应用层
为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
第 6 层:表示层
把数据转换为接受者能够兼容并且适合传输的内容,比如数据加密,压缩,格式转换等。
第 5 层:会话层
负责数据传输中设置和维持网络设备之间的通信连接。管理主机之间的会话进程,还可以利用在数据中插入校验点来实现数据的同步。
第 4 层:传输层
把传输表头加至数据形成数据包,完成端到端的数据传输。传输表头包含了协议等信息,比如: TCP,UDP 等。
第 3 层:网络层
负责对子网间的数据包进行寻址和路由选择,还可以实现拥塞控制,网际互联等功能。网络层的协议包括:IP,IPX 等。比如路由器就在这
第 2 层:数据链路层
在不可靠的物理介质上提供可靠的传输,主要主要为:物理地址寻址、数据封装成帧、流量控制、数据校验、重发等。比如交换机就在这
第 1 层:物理层
在局域网上传送数据帧,负责电脑通信设备与网络媒体之间的互通,包括针脚,电压,线缆规范,集线器,网卡,主机适配等。
应用层
通俗点说:是协议定义了每一层的作用是什么, 每一层的职责是什么, 类似于规范和约束.
有的文章里就是具体指的TCP协议和IP协议, 但是大多数时候提到的TCP/IP协议, 可以理解为互联网通信所需要的协议, 是一个协议家族, 以TCP、IP协议为核心, 包含HTTP、SMTP、TELNET等各种协议。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mnlF7ZIP-1632226537473)(435DD81F8E614271A1F879119E60FCE0)]
TCP/IP参考模型是一个抽象的分层模型,这个模型中,所有的TCP/IP系列网络协议都归类到4个抽象的“层”中.
可以看一下图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1lEZ4Oo-1632226537477)(0DA04E02BDFC48CD93CB349EA00A5646)]
不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。
数据包是网络层及以上分层中包的单位.
每个分层都会对发送的数据添加一个首部, 首部包含了该层协议相关的信息, 而真正要发送的内容称之为数据.
也就是说每一个数据包都由首部 + 数据组成.
而对于下层来说, 上层发送过来的全部内容, 都会当做本层的数据, 举个例子:
传输层 TCP包:TCP包首部 + 数据
网络层 IP包:IP包首部 + (TCP包首部 + 数据)
数据链路层 以太网包:以太网包首部 + (IP包首部 + (TCP包首部 + 数据))
这里可以看图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aRsCh8au-1632226537478)(0F5099D87FC0415390B21A98EB77E6FE)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BlDergUo-1632226537480)(9479F90A246B4986A9076B09B442243B)]
用户1
用户2
总结一下几个地址:
答案是否定的.
我们需要通过以下这几个数据综合来识别一次通信:
那么咱们的直播底层是什么协议呢?
其实现在常见的rtmp和hls直播, 都是基于TCP的, 希望能提供稳定的直播环境.
拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。
发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。
为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。
ssthresh的用法如下:
当出现拥塞的时候就把心的门限值设为此时窗口大小的一般,窗口大小设置为1,再重新执行上面的步骤。
当收到连续三个重传的时候这就需要快重传和快恢复了,当收到连续三个重传 这个时候发送方就要重传自己的信息,然后门限减半但是这个时候并不是网络阻塞,窗口只会减半执行拥塞避免算法。
可以看一下图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AsSVSPeC-1632226537481)(AF2FC15E04AD4581A80BE15CFF895CE4)]
第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。通信结束客户端和服务端就断开连接,需要经过四次分手确认。
第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
IP 地址(IPv4 地址)由32位
正整数来表示,在计算机内部以二进制方式被处理。日常生活中,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数
IP地址包含网络标识和主机标识, 比如172.112.110.11
172.112.110就是网络标识, 同一网段内网络标识必须相同
11就是主机标识, 同一网段内主机标识不能重复
IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 位字节,即 32 比特。而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,一般写成 8 个 16 位字节。