TCP/IP 网络协议

TCP/IP网络协议

聊TCP/IP协议之前, 咱们先看一下OSI七层模型.

第 7 层:应用层
为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

第 6 层:表示层
把数据转换为接受者能够兼容并且适合传输的内容,比如数据加密,压缩,格式转换等。

第 5 层:会话层
负责数据传输中设置和维持网络设备之间的通信连接。管理主机之间的会话进程,还可以利用在数据中插入校验点来实现数据的同步。

第 4 层:传输层
把传输表头加至数据形成数据包,完成端到端的数据传输。传输表头包含了协议等信息,比如: TCP,UDP 等。

第 3 层:网络层
负责对子网间的数据包进行寻址和路由选择,还可以实现拥塞控制,网际互联等功能。网络层的协议包括:IP,IPX 等。比如路由器就在这

第 2 层:数据链路层
在不可靠的物理介质上提供可靠的传输,主要主要为:物理地址寻址、数据封装成帧、流量控制、数据校验、重发等。比如交换机就在这

第 1 层:物理层
在局域网上传送数据帧,负责电脑通信设备与网络媒体之间的互通,包括针脚,电压,线缆规范,集线器,网卡,主机适配等。

1. html在哪一层?

应用层

2. 那么咱们一直提到的协议是啥意思? 协议是什么?

通俗点说:是协议定义了每一层的作用是什么, 每一层的职责是什么, 类似于规范和约束.

3. TCP/IP协议具体指什么?

有的文章里就是具体指的TCP协议和IP协议, 但是大多数时候提到的TCP/IP协议, 可以理解为互联网通信所需要的协议, 是一个协议家族, 以TCP、IP协议为核心, 包含HTTP、SMTP、TELNET等各种协议。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mnlF7ZIP-1632226537473)(435DD81F8E614271A1F879119E60FCE0)]

4. TCP/IP参考模型?

TCP/IP参考模型是一个抽象的分层模型,这个模型中,所有的TCP/IP系列网络协议都归类到4个抽象的“层”中.

可以看一下图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1lEZ4Oo-1632226537477)(0DA04E02BDFC48CD93CB349EA00A5646)]

不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”

5. 我们常说的数据包是什么?

数据包是网络层及以上分层中包的单位.

每个分层都会对发送的数据添加一个首部, 首部包含了该层协议相关的信息, 而真正要发送的内容称之为数据.

也就是说每一个数据包都由首部 + 数据组成.

而对于下层来说, 上层发送过来的全部内容, 都会当做本层的数据, 举个例子:

传输层 TCP包:TCP包首部 + 数据
网络层 IP包:IP包首部 + (TCP包首部 + 数据)
数据链路层 以太网包:以太网包首部 + (IP包首部 + (TCP包首部 + 数据))

这里可以看图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aRsCh8au-1632226537478)(0F5099D87FC0415390B21A98EB77E6FE)]

6. 每层在接收到数据后除了添加首部, 还要做什么呢?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BlDergUo-1632226537480)(9479F90A246B4986A9076B09B442243B)]
用户1

  • 传输层:TCP模块为保证数据的可靠传输, 需要添加TCP首部
  • 网络层:IP包生成后,参考路由控制表决定接受此 IP 包的路由或主机。
  • 数据链路层:生成的以太网数据包将通过物理层传输给接收端

用户2

  • 数据链路层:主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。
    如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,比如IP.
  • 网络层:从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,比如TCP
  • 传输层:在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照顺序接收数据。最后检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。

总结一下几个地址:

  • 数据链路层的是MAC地址, 用来识别同一链路中的不同计算机
  • 网络层的是IP地址, 用来识别TCP/IP 网络中互连的主机和路由器
  • 传输层的是端口号(程序地址), 用来识别同一台计算机中进行通信的不同应用程序
7. 那么我们通过这三个地址就可以识别一次通信了吗?

答案是否定的.

我们需要通过以下这几个数据综合来识别一次通信:

  • IP首部:源IP地址
  • IP首部:目标IP地址
  • 协议号, TCP或者UDP
  • TCP首部:源端口号
  • TCP首部:目标端口号
8. 我们常说的TCP/UDP他们的区别是什么?分别适合用在什么场景?
  • UDP是无连接的,TCP必须三次握手建立连接
  • UDP是面向报文,没有拥塞控制,所以速度快,适合多媒体通信要求,比如及时聊天,支持一对一,一队多。多对一,多对多。就像牛客网的视频面试就是用的UDP
  • TCP只能是一对一的可靠性传输

那么咱们的直播底层是什么协议呢?

其实现在常见的rtmp和hls直播, 都是基于TCP的, 希望能提供稳定的直播环境.

9. TCP通过什么方式提供可靠性?
  • 超时重发,发出报文段要是没有收到及时的确认,会重发。
  • 数据包的校验,也就是校验首部数据和。
  • 对失序的数据重新排序
  • 进行流量控制,防止缓冲区溢出
  • 快重传和快恢复
  • TCP会将数据截断为合理的长度
10. TCP如何控制拥塞?

拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。

发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。

为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。
ssthresh的用法如下:

  • 当cwnd
  • 当cwnd>ssthresh时,改用拥塞避免算法。也就是加法算法
  • 当cwnd=ssthresh时,慢开始与拥塞避免算法任意。

当出现拥塞的时候就把心的门限值设为此时窗口大小的一般,窗口大小设置为1,再重新执行上面的步骤。
当收到连续三个重传的时候这就需要快重传和快恢复了,当收到连续三个重传 这个时候发送方就要重传自己的信息,然后门限减半但是这个时候并不是网络阻塞,窗口只会减半执行拥塞避免算法。

11. TCP协议的一次数据传输, 从建立连接到断开连接都有哪些流程?

可以看一下图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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也可以关闭连接了。

1. IP地址

IP 地址(IPv4 地址)由32位正整数来表示,在计算机内部以二进制方式被处理。日常生活中,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数

IP地址包含网络标识和主机标识, 比如172.112.110.11

172.112.110就是网络标识, 同一网段内网络标识必须相同
11就是主机标识, 同一网段内主机标识不能重复

12. IPv6

IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 位字节,即 32 比特。而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,一般写成 8 个 16 位字节。

你可能感兴趣的:(网络,网络协议,tcp/ip,udp)