明天你会感谢你今天的努力。
请举手并注意。
什么是互联网协议?在解释这个问题之前,让我们先弄清楚,什么是网络通信.如果没有网络通讯,这个协议就无法发挥作用。
孤立的工作站或主机通过网络物理链路连接在一起,形成数据链路,从而达到资源共享和通信的目的。
记者之间通过某种媒介进行的信息交流和传递。
那么网络传播就不难理解了。
通信是通过网络将孤立的设备连接起来,通过信息交换实现人与人、人与计算机、计算机与计算机之间的通信。
三个网络协议是局域网中最常用的协议。当我们使用协议时,我们应该根据自己的需要选择合适的网络协议。
NETBEUI协议NetBIOS增强用户界面是NetBios,的增强用户界面,它是NetBios协议的增强版本。
不需要额外的网络地址和网络层头尾,见效快,适用于只桥接单个网络或整个环境的小型工作组环境。
IPX/spx网络分组交换/序列分组交换,
它具有强大的路由功能,在复杂环境下适应性强,适用于大规模网络。
TCP/IP协议传输控制协议/互联网协议,
他是由网络层的IP协议和传输层的TCP协议,组成的一个协议簇,可以实现多种不同网络之间的信息传输,是互联网最基本的协议。
什么是协议?字面上,协议意味着你和我,约定好规则,我们按照规则办事情.互联网协议是什么意思?
互联网协议又是个啥
网际协议是分组交换数据网络中使用的协议,它的任务只是根据源主机和目的主机的地址来传输数据。互联网协议定义了数据报的寻址方法和封装结构。第一种架构的主要版本是IPv4,它仍然是一种广泛使用的互联网协议。
一句话,互联网协议就是在互联网上传输数据的规则
不是,现在各大互联网厂商的app都已经支持IPv6了。
互联网由一系列协议组成。当我们理解了这些协议,我们就理解了互联网的原理。互联网协议太大太复杂,我一下子接触不到,在此分享一些我们开发中常用的一些协议.
互联网协议定义了通用的标准,我们都按照标准来开发和使用,大大提高了我们的开发效率和通信成本。
网络的各层都有许多协议,接收方和发送方分别是同层的协议必须一致和否则一方将无法识别另一方发出的信息,那么这就乱套了是不.网络协议使网络上的各种设备能够相互交换信息。
例如,小啊定义了A协议,小B定义了B协议。这时候如果A协议和B协议要对接,就需要在两个协议之间做一个融合和取舍,甚至其他方式,还有这个大大的增加了沟通成本和风险因素
那么,如果小A和小B都遵守共同的公共协议,比如传输层的TCP协议,是不是只需要按照标准来开发就好了呢
这也是每个行业都需要相应标准的原因之一。如果标准统一了,大家行动起来就方便多了。
互联网能做什么?网络协议是网络上所有设备(网络服务器、计算机和交换机、路由器、防火墙等)之间的通信规则的集合。).
它定义了信息交流的格式以及这些格式的含义。
大多数网络采用分层体系结构,每一层都建立在它的下层之上,并为它的上层提供一定的服务,而如何实现这一服务的细节对上一层加以屏蔽.
平时我们说的,二层交换机协议,三层协议等等都是啥意思呢?
例如,一台设备上的X层与另一台设备上的第一层通信的规则是第一协议。
说到层级,我们来分享一下互联网的层级模型。
模型互联网的逻辑实现分为很多层,每一层都有自己独特的功能,就像盖房子或者搭积木一样。
需要一层一层的建,高楼拔地而起,一层一层的支撑。
平时作为用户,基本上接触到的只是最上面的那一层,也就是应用层,不知道或许是根本感受不到还有其他的层次
但作为开发者,我们还是要尽可能多的了解每一层的原理,从而有效的指导我们的具体实践。
开始放图~
进制,mac地址长度为多少位1.jpg">就上图而言,互联网按照不同的模型划分会有不同的分层
但是不论按照什么模型去划分,我们都要明白,越往上的层越靠近用户,越往下的层越靠近硬件。
在软件开发中我们使用最多的是这张图中将互联网划分为五个分层的模型,也就是这张图中的中间这一列
物理层数据链路层网络层传输层应用层那我们就从下往上来一一看一看,每一层都是
做些啥主要作用是啥数据包又是如何封装和传输的吧物理层简单来看,这一层基本上是用双绞线、光纤、无线电波的方式来实现物理层,也叫做 实物理层
再简单来看,这一层就是把各个网络设备连接起来,让其可以传输0 1 0 1的电信号
数据链路层这一层处于”物理层”的上方,确定了物理层传输的0和1的分组方式及代表的意义
该层主要是以太网
以太网规定,一组 电信号构成一个数据包,叫做”帧”(Frame)。
每一帧分成两个部分:包头(Head)和数据(Data)。其中”包头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等;”数据”则是数据包的具体内容。”包头”的长度,固定为18字节。”数据”的长度,最短为46字节,最长为1500字节。因此,整个”帧”最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。
有没有想过,我们咋标识是谁发的,或者该数据包是要发给谁,如何指定?在哪里指定?如何实现?
以太网规定,连入网络的所有设备都必须具有网卡接口
数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。
每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,因此,很多软件校验设备唯一性的时候,大多会通过校验MAC地址来判断
MAC地址是啥样子的?
如上图,MAC地址通常用12个十六进制数表示,也就是说长度是48个二进制位
前6个十六进制数是厂商编号后6个是该厂商的网卡流水号有了MAC地址,你就可以上天了吗?到底咋传输?
我们一般会使用 ARP协议来获取接受方的MAC地址,向本网络内所有计算机都发送(以广播的方式),让每台计算机读取这个包的”包头”,找到接收方的MAC地址,每台计算机读取包头中接收方MAC地址后,与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。
如图,一个包源MAC是AA:BB:CC:DD:EE:FF,目的MAC是FF:EE:DD:CC:BB:AA,那么,这个包会发到同局域网的所有朋友,每一个朋友都会读取这个包的数据,判断目的MAC地址和自己的MAC地址是否一致,
若一致则处理若不一致,则丢弃ARP协议来获取接受方的MAC地址,有了MAC地址之后,如何把数据准确的发送给接收方呢?其实这里以太网采用了一种很”原始”的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机都发送,让每台计算机读取这个包的”标头”,找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做”广播”(broadcasting)。
网络层上面讲到包数据中写好源MAC,目的MAC,就可以在同一个局域网中找到接受方,可是如果是源机器和目的机器不在同一个网段的话咋整?
理论上依靠MAC地址,你电脑的网卡就可以找到身在世界另一个角落的某台电脑的网卡了,但是这种做法有一个重大缺陷就是以太网采用广播方式发送数据包,所有小伙伴都要去读你的这个包,效率低,且发送的数据只能局限在发送者所在的子网络。
如果两台计算机不在同一个子网络,广播是传不过去的。
用咱们的小脑袋想一下,如果你发送的一个消息,世界上的每一个机器都能收到,那么网络得多拥堵啊
还是有办法解决滴
那就判断是不是在同一个子网嘛,
如果是同一个子网络,就采用广播方式发送不是在同一个子网 , 那就采用路由方式发送这个时候,就有了网络层
网络层引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络
这套地址就叫做网络地址,简称网址
那么网络层具体是咋传输数据的咧?
我们要知道如下几个点
每台计算机有了两种地址,一种是MAC地址,另一种是网络地址两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是网络管理员分配的网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡因此,我们从上述描述就可以知道,我们在处理网络数据包的时候,肯定要先处理网络地址,再处理MAC地址,这也就是后面会说到的数据包的传输流程
数据链路层,用MAC地址,协议用ARP协议
那么,网络层,现在我知道了用网络地址,那么是用啥协议?
使用网络地址协议,叫做IP协议。
协议所它所定义的地址,就被称为IP地址
现在广泛采用IPv4,这个版本规定,
网络地址由32个二进制位组成通常用分成四段的十进制数表示地址,从0.0.0.0一直到255.255.255.255通过发送的数据,就叫做IP数据包。
也分为”包头”和”数据”两个部分:
”包头”部分主要包括版本、长度、IP地址等信息,”数据”部分则是的具体内容的”包头”部分的长度为20到60字节,整个数据包的总长度最大为65535字节顺带提一下IPv6
随着互联网的发展,现在IPv6也逐渐使用的慢慢变多,
不仅能解决网络地址资源数量的问题,而且还解决了多种接入设备连入互联网的障碍问题,并且具有更大的地址空间和更高的安全性。
有3种表示方法:
冒分十六进制表示法X:X:X:X:X:X:X:X` , 每一个X代表着一个4位的十六进制数 , 如 `EBCD:CF01:2345:1789:ABCD:EF01:2385:37890位压缩表示法一个地址中间可能包含很长的一段0,可以把连续的一段0压缩为:: , 但为保证地址解析的唯一性,地址中只能出现一次
例如:
0:0:0:0:0:0:0:1 → 表示为 ::10:0:0:0:0:0:0:0 → 表示为 ::内嵌IPv4地址表示法即地址会嵌入地址中,X:X:X:X:X:X:a.a.a.a,前96bit位采用冒分十六进制表示,而最后32bit位地址则使用的点分十进制表示
例如:
::192.168.0.1::FFFF: // :: 代表多个0传输层看到这里,小伙伴肯定知道,数据包传送的过程中,肯定不止MAC地址和网络地址那么简单,要不然就不会有传输层和应用层了。
经过上面说到的 网络地址 和 我们已经可以在互联网上任意两台主机上建立通信
可是基于网络和应用的复杂性,问题又来了
同一个设备上的多个应用程序都需要收发信息,我们咋区分哪一个数据包是给哪个程序的,又咋区分哪个数据包是哪个程序发出去的?这个咋整?
比如说,同样是数据包,我们电脑上的 WX数据包,和QQ数据包,是咋区分出来的?
想一想,基于现有的协议肯定不够玩了,那就加码吧
添加一个参数,表示这个数据包到底供哪个程序(进程)使用。
此时,端口Port就出现了,
它就是每一个使用网卡的程序的编号每一个端口号,标志一个可执行程序端口号是,0到65535之间的一个整数,正好16个二进制位0 - 1023的端口被系统占用,用户只能选用大于1023的端口现在,万事俱备了,用IP + 端口,我们就能实现唯一确定互联网上一个程序,进而实现网络间的程序通信了
那么把这个端口号加入到数据包中,又催生出了一些协议,那就是传输层的协议
TCP协议UDP协议UDP协议,就是在数据前面加上端口号
UDP数据包,也是由”包头”和”数据”两部分组成:
”包头”部分主要定义了发出端口和接收端口,一共只有8个字节”数据”部分就是具体的内容。总长度不超过65,535字节,正好放进一个IP数据包。UDP协议的优点
比较简单,容易实现缺点
可靠性较差,一旦数据包发出,无法知道对方是否收到基于以上缺点,就有了TCP协议,来提高网络的可靠性
TCP协议优点
能够确保数据不会遗失安全,可靠的传输缺点
过程复杂实现困难消耗较多的资源TCP数据包没有长度限制,理论上可以无限长,可是为了保证网络的效率,通常TCP数据包的长度不会超过的长度,也就是小于65,535字节,这也确保单个不必再分割。
关于TCP为什么可靠,什么措施来保证可靠的,TCP会涉及到哪些原理,我们后续的文章再详细分享
应用层来到了应用层,万里长征慢慢的看到了希望
应用层的作用就是规定应用程序使用的用语规范,应用层的协议包括哪些呢?举个例子
用于Web浏览的HTTP协议用于传输文件的FTP协议用于邮件的的SMTP... 等等这些协议就组成了互联网协议的应用层
如下图所示,发送方的HTTP请求的源数据经过互联网的传输过程中会依次添加各个层级对应协议的包头信息
接收方收到数据包之后再依次根据层级协议依次解包得到源数据
总结简单介绍了网络通信,互联网协议介绍了网络五层模型的每个层级的产生原因,每一层对应的协议是如何出现的数据包在每个层级的封装过程