ISO标准是指由『 国际标准化组织 (International Organization for Standardization), ISO 』,OSI是由ISO提供的。
各层的功能:
物理层:在TCP/IP协议栈中的物理层,他对应到OSI七层协议中的物理层和数据链路层。其中物理层用来决定了两张物理网卡之间通信的电信号(0和1)的传输方式。利用传输介质为数据链路层提供物理连接。
直接可以理解为以二进制数据形式在物理媒体上传输数据。
工作:集线器、网络适配器。
在物理层中常见的协议有:有线网络802.3、无线网络802.11等
IEEE 802协议簇是指IEEE标准中关于局域网(LAN)和城域网(MAN)的一系列标准。IEEE 802中定义的服务和协议限定在OSI七层网络模型的最低两层,即数据链路层和物理层。IEEE802协议簇由IEEE802标准委员会维护。其中最广泛应用的协议有以太网(802.3)和WLAN(802.11)。
以太网/有线网络协议: 802.3协议
无线局域网标准/wifi的标准(规定了一个基站和无线客户端或两个无线客户端之间通过空气传输的接口): 802.11标准
数据链路层:对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。(我的理解就是获取对方的MAC地址形成数据帧然后才能发送)
我么详细了解一下:
以太网(IEEE 802.3,有线网络)规定一组电信号就是一个数据包,一个数据包被称为一帧,制定这个规则的协议就是以太网协议。一个完整的以太网数据包如下图所示:
整个数据帧由首部、数据和尾部三部分组成:
因此,以太网协议通过对电信号进行分组并形成数据顿,然后通过物理介质把数据帧发送给接收方。那发给谁呢?这个标识是什么呢?
以太网规协议定,接入网络的设备都必须安装网络适配器,即网卡,数据包必须是从一块网卡传送到另一块网卡。而网卡地址就是数据包的发送地址和接收地址,也就是帧首部所包含的MAC地址,MAC地址是每块网卡的身份标识,就如同我们身份证上的身份证号码,具有全球唯一性。
MAC地址采用十六进制标识,共6个字节,前三个字节是厂商编号,后三个字节是网卡流水号,例如4C-OF-6E-12-D2-19。有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。
所以链路层的主要工作就是对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。
工作:网桥、交换机。
数据链五层涉及到的协议有:ARP协议(地址解析),RARP协议(逆地址解析), PPP协议
就是ARP(Address Resolution Protocol)协议来获取到的主机的MAC地址的。
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP缓存表。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。
RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。平时我们可以通过电脑设置IP,也可以通过DHCP自动分配获取IP地址。
比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。
PPP协议:point-to-point协议,即点对点协议,是数据链路层封装协议的一种。PPP协议工作在串行接口和串行链路上,一般来说,PPP协议所构成的网络只允许双方之间通信,不允许像以太网一样接入交换机后接入其他的主机或设备。
手机上网都是PPP协议。点对点协议(Point-to-Point Protocol)提供了一种通过点到点链路传输多协议数据报的标准方法。
网络层:为数据包选择路由。
网络层使用的中间设备:路由器
我们来看一看网络层具体有哪些功能:【具体参考的这篇文章:网络层的作用】
左边的主机想和右边的主机通话,那么这个数据包一定会经过网络。中间灰色的圈是路由器,他们组成了一个网络,数据链路层只是把数据从一端传递到另一端,在图里面比如说从路由器1传递到2。但是网络层做的事情是,规划好所有跳的路线,比如说数据包要依次经过1,2,3,6才能从左边主机到达右边主机,这就是网络层一个非常重要的作用,也就是提供“路由routing”。
别看这个功能看似简单,实际上非常复杂,因为网络是动态可变的,每个链路成本可能都在变化,网络层需要时刻都对于每一个数据包给定最佳的路线,这就涉及到路由器的各种确定最佳路线的算法,比如距离矢量算法和链路状态算法等等,想了解的可以去看看这篇文章:
路由算法之距离矢量算法和链路状态算法
网络层除了上面说的第一个功能 ——路由选择以外,还有第二个功能:存储、交换、转发。
具体来说这是具体的网络中路由器做的事情。路由器中存在着路由表,路由表的作用是为路由器提供包的方向依据。路由器会根据每个到达包的目的地址来确定他应该向那个方向转发这个包。这个就是转发的功能。当路由器接收包的速度要小于它转发包的作用时候,他就会把暂时发送不了的包缓存在自己的缓冲区里面,直到前面的都发出去再将其发出去,这就是存储。
第三个功能是拥塞控制。拥塞控制是网络设计的时候必不可少的功能。就像城市里面哪里堵车了,其他人就知道不要再去了,网络层也一样。比如上图中2,3路由器出现了严重的拥塞,那么左边主机往右边发送包就会从1236变成1456。拥塞控制对于网络的效率以及降低丢包率有着无可替代的作用。
网络层第四个作用是呼叫准入。什么是呼叫准入呢?比如左边主机想传一个大的视频文件给右边的主机,但是网络这个时候非常拥挤很难传送。首先左主机先发送一个控制包给右主机,这个控制包说明了自己视频数据所需要的带宽等等信息,那么这个包所途径的路由器都会首先查看自己能不能满足这个需求,如果不能就返回一个不能的信息,如果能就按照路由表向右主机传送。所以一旦有一个路由器不能提供这个服务,那么呼叫建立就失败了,否则只要所以路由器许可,才能传送。呼叫准入是在网络层所选路径沿途的路由器,在真正数据交换之前握手协商状态信息。呼叫准入是为了保证网络的服务质量而设计的功能。
网络层的核心就是路由器的功能,上面的几个功能,比如路由,存储转发,拥塞控制,呼叫准入都是路由器的功能,除此以外,路由器还有包分类的功能。比如说一个直播视频和一个ftp文件流都需要一个路由器转发,那么视频流肯定是优先级更高的,因为直播的高延迟是不可忍受的,所以路由器会根据不同包确定优先级,优先转发高优先级的,低优先级的需要在高优先级转发之后再转发。
网络层涉及到的协议:IP协议
IP 协议(Internet Protocol)又称互联网协议,是支持网间互联的数据包协议。该协议工作在网络层,主要目的就是为了提高网络的可扩展性,和传输层 TCP 相比,IP 协议提供一种无连接/不可靠、尽力而为的数据包传输服务,其与TCP协议(传输控制协议)一起构成了TCP/IP 协议族的核心。
IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。
传输层:提供端对端的接口
传输层是用来实现不同PC上的两个进程之间互相通信,在传输层中有一个非常重要的概念,叫做端口。其中端口是16位的,最大为65535,其中1024以下的端口为众所周知端口,这些端口已经分配给了一些常用的服务:
ftp (20/21) - ssh (22) - telnet (23) - smtp (25) - dns (53) - dhcp (67/68) - tftp (69) - www/http (80) - ntp (123) - snmp (161) - https (443)
每一个需要使用网络通信的程序都会占用一个端口,当操作系统从网络上收到一个数据包之后,他根据数据报文中的目的端口号来决定这个数据包给哪个应用程序,这样一个端口只能被一个应用程序占用使用。
在Linux下,使用低于1024以下的端口的程序必须以root权限运行。另外可以使用netstat命令查看哪些端口正在被使用。
sudo netstat -tlnp
sudo netstat -tlnp | grep pid
TCP的三路握手和TCp断开四次挥手想了解的可以看这篇文章:TC三次握手与四次挥手
TCP协议是一个面向连接的、可靠的传输协议,它提供一种可靠的字节流,能保证数据完整、无损并且按顺序到达。TCP尽量连续不断地测试网络的负载并且控制发送数据的速度以避免网络过载。另外,TCP试图将数据按照规定的顺序发送。
TCP协议传输效率低,但可靠性强。
UDP协议是一个无连接的数据报协议,是一个“尽力传递”和“不可靠”协议,不会对数据包是否已经到达目的地进行检查,并且不保证数据包按顺序到达。
UDP协议传输效率高,但可靠性略低,适用于传输可靠性要求不高、体量小的数据(比如QQ聊天数据)。
家里的路由器为什么可以上网,我们了解NAT技术之后,就会知道啦。首先我们需要了解IP地址有两种:公网IP和私有IP。
假设我们需要向www.qq.com腾讯服务器发送一个“腾讯你好”,我们来看一下实际的流程是怎么样子的。
我们来分步讲解一下实际的流程是怎么样子的(一图一解释)
我们的电脑会域名解析这个域名,将这个域名的IP地址解析出来,默认端口号是80端口;我们的主机IP(私有IP)以及默认生成的端口号也会随着报文发送出去。
当然,我们的IP地址需要和我们的路由器在一个网段内,不然没法发送到路由器的。
至于如何在一个网段内,是需要自己的私有IP和子网掩码按位与运算获得的。
图中我们的IP是192.168.1.2,子网掩码是255.255.255.0,那么按位与运算过后就得到192.168.1.0
图中路由器的IP是192.168.1.1,子网掩码也是255.255.255.0,按位与运算也是192.168.1.0,所以是在一个网段内的。
我们的路由器从LAN口收到这个报文之后,肯定不能直接将你的数据从WAN口发送出去,因为你的私有Ip没有人知道这是什么,只能使用路由器的公网IP替代你出去路由,并且端口号也是需要改的,如果不改的话,每个PC来的数据报文都是这个路由器的公网IP,如何区分?所以端口也需要改。
改了之后路由器中有NAT表会记住,因为还需要等你回来,回来之后再改回来才能发送到你的PC上,不然路由器找不到你的PC。
然后通过路由发送到腾讯服务器 (www.qq.com 180.97.33.108)上,腾讯服务器就收到了你的消息内容。
如果是腾讯服务器要回复你的话,那就需要将目的Ip和源IP,以及源端口和目的端口互换一下就可以了,然后路由到我们的路由器上的时候,路由器就会查询NAT表,将IP地址和端口号换回来,然后发送到你的PC上,刚好发送回来你发出去的那个端口上。
当我们在浏览器输入www.baidu.com是,浏览器都做了什么呢?