又到了金三银四的时间,阿粉也是有点蠢蠢欲动,想要准备面试一下,检验一下自己的工作水平了,于是阿粉就开始了改改简历,然后想着准备面试一下,结果在面试的第一家就遭遇了滑铁卢,直接是凉凉收尾.为什么呢?那就是面试官按着协议就开始怼,HTTP协议,TCP/IP协议,SSL协议,MQTT协议,反正就是各种怼,导致阿粉就不得不好好看看这些协议的内容.阿粉今天就给大家分析一下这个TCP协议.
什么是TCP/IP协议TCP/IP协议,中文名传输控制协议。是指能够在多个不同网络间实现信息传输的协议簇。
如果你觉得 TCP/IP 协议只是指的TCP和IP鞋油的话,那么阿粉就得给你安排一下了,TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP、SMTP、TCP、UDP、IP 等协议构成的协议簇, 只是因为在 TCP/IP 协议中 TCP 协议和IP协议最具代表性,所以被称为 TCP/IP 协议。
也就是说,TCP/IP 协议是由很多构成的,而不仅仅是 TCP 和 IP 这两块的内容。
TCP/IP协议的组成在上面阿粉已经把图给大家放到了上面,实际上图中已经给大家画出来这个TCP协议的分层了,实际上TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。
而根据OSI参考模型的分类,又有很多人称他为七层,而不同的层级又分别对应不同的内容。
实际上OSI七层模型中 应用层,表示层,会话层,对应的都是四层模型中的应用层,因为应用层、表示层、会话层三个层次提供的服务相差不是很大,所以都给他合并了。
而数据链路层和物理层都是归属于网络接口层,又称之为链路层。这是因为数据链路层和物理层的内容相差不多,所以在TCP/IP协议中它们被归并在网络接口层(链路层)一个层次里。
TCP/IP协议分层介绍分层既然都是四层了,我们就来分别的介绍一下这四层都是代表了什么,以及他们主要完成的功能情况。
自上而下:
1.应用层
应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
- 加密、解密、格式化数据.
- 可以建立或解除与其他节点的联系,这样可以充分节省网络资源.
- 对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用了SMTP协议、万维网应用使用了HTTP协议、远程登录服务应用使用了有TELNET协议.
2.运输层
运输层也有人喜欢称之为传输层,实际上就是提供了进程间的逻辑通信,运输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个运输层实体之间有一条端到端的逻辑通信信道。
而传输层包含了两部分的协议
TCP(传输控制协议):应用程序之间通信
UDP(用户数据报协议):应用程序之间的简单通信
作用都是用来在程序之间通信的,但是 UDP 相对于 TCP 来说,是不具备可靠性的。
UDP只是做了运输协议能够做的最少工作,除了复用/分解功能及少数的差错检验外,它几乎没有对ip增加别的东西。
既然说 TCP 相对于 UDP 协议来说,他是具备可靠性的,那么为什么他是可靠的呢?
TCP可靠性来自于:
- 当TCP发送一个段之后,启动一个定时器,等待目的点确认收到报文,如果不能及时收到一个确认,将重发这个报文。
- 当TCP收到连接端发来的数据,就会推迟几分之一秒发送一个确认。
- TCP将保持它首部和数据的检验和,这是一个端对端的检验和,目的在于检测数据在传输过程中是否发生变化。(有错误,就不确认,发送端就会重发)
- TCP是以IP报文来传送,IP数据是无序的,TCP收到所有数据后进行排序,再交给应用层
- IP数据报会重复,所以TCP会去重
- TCP能提供流量控制,TCP连接的每一个地方都有固定的缓冲空间。TCP的接收端只允许另一端发送缓存区能接纳的数据。
而 UDP 不可靠的因素则是:
- 不保证消息交付:不确认,不重传,无超时
- 不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞
- 不跟踪连接状态:不必建立连接或重启状态机
- 不需要拥塞控制:不内置客户端或网络反馈机制
既然 UDP 都是不可靠的了,那么为什么还有人是用呢?
其实最主要的原因有几点:
第一,UDP 协议简单,在使用 TCP 协议传输数据时,如果一个数据段丢失或者接收端对某个数据段没有确认,发送端会重新发送该数据段,而 TCP 重新发送数据会带来传输延迟和重复数据,降低了用户的体验,而 UDP 协议虽然不能保证这个数据传输的确认,但是他能数据丢失呀(强行解释他的low,阿粉都有点无地自容),实际上就是这样,因为用户的体验,结果只能牺牲掉消息可靠性了,丢了就丢了,我为了用户体验,我不要了,这种方式切记,写代码的时候绝对不可取。
第二,UDP适合于实时数据传输,如语音和视频通信,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响,就比如早期的QQ,是用的就是 UDP 的协议。
3.网络层
网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。实际上网络层是为运输层提供服务的,传送的协议数据单元称为数据包或分组。
而网络层协议的代表包括:IP、IPX、RIP、OSPF等
我们以经典的 IP 协议为例。
- 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:172.16.10.1
IP地址分类:
IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。
- A类IP地址 地址范围从1.0.0.0 到126.0.0.0
- B类IP地址 地址范围从128.0.0.0到191.255.255.255
- C类IP地址 范围从192.0.0.0到223.255.255.255
- D类地址用于多点广播(Multicast)
一般这些内容都是在我们学计算机基础的时候就学到的 IP 协议的地址取值范围。
而 IP 地址的主要作用就是
1.寻址与路由。
2.分段与*。
4.网络接口层
网络接口层在 TCP/IP 协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
网络接口层在发送端将上层的IP数据报封装成帧后发送到网络上;数据帧通过网络到达接收端时,该结点的网络接口层对数据帧拆封,并检查帧中包含的MAC地址。如果该地址就是本机的MAC地址或者是广播地址,则上传到网络层,否则丢弃该帧。
其实阿粉觉得网络接口层实际上就是相当于一个网卡的功能,数据包从一个网卡到另一个网卡一样。
而这些协议,其实往往都是靠个人理解,有些人喜欢交数据链路层,有些人喜欢叫网络接口层,只能说个人喜好吧,到时候面试的时候,就看你的表现了。