精华内容
下载资源
问答
  • 概述        本文章将分别介绍耳熟能详的三种网络协议区别,以及这三...最早出现的其实是早先一批的网络领域的探索者草拟,然后国际标准化组织国际电话电报共同提出的OSI七层网络参考模型,...
    • 概述
             本文章将分别介绍耳熟能详的三种网络协议的区别,以及这三种网络协议产生的原因和演变过程

    • 三种网络协议产生的原因和演变过程
             首先大致介绍一下这三种协议的产生的先后顺序。最早出现的其实是早先一批的网络领域的探索者草拟,然后国际标准化组织和国际电话电报共同提出的OSI七层网络参考模型,这里的七层网络模型细分比较详细,但是也正式过于细致的分类,导致其不够实用,基本沦为一种参考模型,仅有少数早期的一些科研院所和大学还支持这七种网络模型(具体原因后续还会介绍)。然后就是罗伯特·卡恩和温特·瑟夫通过不断改进,提出的TCP/IP四层协议,这里将原来的七层协议的上三层的应用层和表示层以及会话层简化为应用层,将下面两层数据链路层和物理层简化为网络接口层。最后是业界产生的结合了OSI和TCP/IP而推出的五层TCP/IP协议,但是目前很多应用还是用的TCP/IP的四层协议。
      在这里插入图片描述
      未完待续。。。

    展开全文
  • 网络七层模型就是一个参考模型,也就是说有这么个七层的定义,就像是项目中的dao、service、controller三层架构一样,每一层都有自己的工作要干,互联网协议就按照不同的作用分为osi七层或tcp/ip五层或tcp/ip四层。...

    OSI网络七层模型简介

    网络七层模型就是一个参考模型,也就是说有这么个七层的定义,就像是项目中的dao、service、controller三层架构一样,每一层都有自己的工作要干,互联网协议就按照不同的作用分为osi七层或tcp/ip五层或tcp/ip四层。

    应用层

    第一层:应用层。定义了用于在网络中进行通信和传输数据的接口

    第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等

    第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断

    传输层

    第四层:传输层。管理着网络中的端到端的数据传输

    网络层

    第五层:网络层。定义网络设备间如何传输数据

    链路层(网络接口层)

    第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输

    第七层:物理层。这一层主要就是传输这些二进制数

    学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构学习即可,这样既简洁又能将概念阐述清楚。
    在这里插入图片描述

    网络通讯的流程了基本如下(五层):

    应用层,数据(加http协议等)—》传输层(包上tcp或者udp协议)—》网络层(包上ip协议)—》数据链路层(包上以太网协议)—》物理层

    下面就开始详细介绍这个几层,并按如上流程进行演示,最好开一台服务器或者虚拟机,跟着一起操作感受一下,相信你会对OSI这几层以及各种协议有一个全新的认识

    应用层

    比如浏览器、qq微信都是属于应用层,准确的说是应用层客户端,访问的服务器就是应用层服务端。我们在浏览器发送的请求会被加上http协议传输到传输层。还有xftp、sqlyong等等会加ssh协议。

    这些协议就是所谓的应用层协议,用来约定两个程序传输的格式、怎么加密的等等。不同的场景选择不同的协议来工作。

    其后的传输层、网络层、网络接口层我们并不需要关心,因为这是操作系统内核帮我们做好的事情了。就像我们使用浏览器一样,http协议浏览器帮我们加好了,只需要输入域名就可以。

    用linux访问百度举个例子:

    1.创建连接: 8就代表文件描述符,<>代表输入输出,然后指向了一个路径,但是操作系统内核会把这个路径转换成对百度的socket连接

    exec 8<> /dev/tcp/www.baidu.com/80
    

    创建socket之后,cd到/proc目录下
    在这里插入图片描述
    这个目录下是内核程序运行时我们能在文件系统看到的东西,可以看到目录中有很多数字的目录,可以把他们想象成线程号一样。

    如下命令就是查看当前执行进程的进程号,相当于查看当前运行的线程了。

    echo $$
    

    在这里插入图片描述
    可以看到当前的进程号就是5725,那么进入5725
    在这里插入图片描述
    可以看到一些目录,这个fd就是前面说的文件操作符了,再cd进去,ll查看
    在这里插入图片描述
    0代表标准输入,1代表标准输出,2代表报错,下面的8就是我们刚才创建的socket,指向的百度。

    那么我们现在其实就是应用层客户端,我们已经有了应用服务端百度的连接,那么我现在应该遵循某种协议,给百度发一些信息,让百度把主页返回给我们。现在很明显我们应该遵循HTTP协议。

    2.发送请求: 请求的HTTP协议规范为 “GET / HTTP/1.0\n”,最后\n就是换行符,-e代表识别换行符,>代表会写到文件中,>&就代表会写到文件描述符中。

    echo -e "GET / HTTP/1.0\n" >& 8
    

    通过执行上面命令,就会把“GET / HTTP/1.0\n”通过8号文件描述符发送给百度,我们8号文件描述符的这个socket连接是双向的,可输入输出,那么百度就会把主页的信息放到socket中,我们只需要把8文件描述符的数据输入重定向出来,就可以看到百度主页的信息了

    cat <& 8
    

    在这里插入图片描述
    在这里插入图片描述
    上面我们干的其实就是一个应用层做的事,传输层网络层我们是无感的,因为系统内核已经把TCP协议的事做了,后面我们继续深入研究系统内核怎么做的TCP协议。

    我们想一下刚才就做了两步,通过exec建立连接,发请求。那么怎么从应用层到的传输层、网络层的呢,其实太明显了,传输就是socket做的嘛,所以exec创建socket时就是调用了内核的传输层才建立的socket。

    传输层

    传输层就是把一台计算机的数据传输到另一台,基于的协议可以是TCP或者UDP,TCP是面向连接并可靠的协议,那么什么叫面向连接还可靠的呢,他要通过三次握手,四次挥手来保证它的连接的可靠性,以及滑动窗口的概念,这个后面再说。

    三次握手

    什么是三次握手呢,其实就像下图一样,由客户端这边的传输层创建了一个sync数据包发给服务端,代表我想和你建立握手,服务端如果能收到这个包,一般服务端的传输层会给客户端回一个sync+ack确定包,最后客户端还得再给客户端回一个确认包,这样就通过三次握手建立了连接。

    在这里插入图片描述
    在这里插入图片描述

    再来解释一下为什么需要三次握手,我们建立的socket这种网络通信是双向的,也就是客户端也发送有接收,服务端也有接受和发送,我们就需要让客户端和服务端都必须确定自己的接收和发送的是通的,那么最少需要三次,才能确定一个可用的socket。

    一旦双方通过三次握手确认了自己的输入输出没有问题,这时候怎么建立连接呢,连接并不是一个实质性的连接,而是双方专门开辟出一块资源,这个资源有可能是一个进程,也可能是java当中一个线程,它是专门为对方而准备,然后就可以完成后面后续的通信过程,这就是所谓的面向连接。

    如下这段代码其实就是开启一个socket,然后如果有客户端连接进来,等三次握手成功了,就能通过socket对象的accept方法拿到连接,然后开启个线程处理它,进而完成后续的数据读取与写入。
    在这里插入图片描述

    四次挥手(四次分手)

    当双方完成交互,要做的事情干完了,就要断开连接,断开连接其实就是释放开辟的资源。那我们断开是想断开就能断开嘛,并不能,因为我们的资源是为对方服务的,所以需要对方知道并且同意了我们才能断开。

    在这里插入图片描述
    如上图,假如是客户端想断开,那么客户端的传输层会创建一个Fin数据包,服务端收到后,会回送一个ACK包,回的意思是我知道你想断开了,但是并没有同意断开呢,服务端还需要再发送一个Fin数据包,代表我同意断开了,客户端再回一个我收到了。俩次的断开都是各自发出的,以保证双方安全的释放掉资源。

    如果超时了或者其他原因导致没有完成四次分手,那么时间过了,太久没响应,自己也会把资源释放掉了。

    思考

    这时候其实对网络通讯已经比较了解了,那么我们再来想一个问题,比如我们浏览器打开十个标签页,搜索不同的东西,为什么搜索的结果没有传乱了呢,可以想到他们每个标签都是不同的连接,不同的socket,那么大家对socket的认知恐怕只知道他是一个套接字。

    其实可以把他理解为“Ip-port ip-port”,两台计算机的ip和端口组成唯一映射关系。这个在Linux系统当中也可以体现出来

    输入命令,netstat代表网络状态, n就是忽略地址到ip的翻译,a就是所有,t就是tcp,p就是显示id号和进程

    netstat -natp
    

    在这里插入图片描述
    前面的是本机的ip和prot,后面的是对端的ip和prot,这一对就可以理解为套接字socket,我们还可以注意一下第一列,端口号的22,并且还是sshd协议,LISTEN状态,就代表这个程序是一个Server服务端,开始监听我的22端口有没有人连接。

    下面我们干一个有趣的事。
    在这里插入图片描述
    我们开启三个标签,创建了三个连接,是不是和刚才说到的浏览器标签是一样的感觉,那我们找到这三行进行对比
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    Linux服务器本机的ip地址和端口完全一样,这时候的对端就是连接服务器的window了,因为是同一台windows连接的服务器,所以ip相同,但是可以发现端口号不同,打开的标签页都和windows申请了唯一的随机端口号,最终可以区分这几个socket。

    但是端口是数量有限的(0-65535),所以事情做完会断开连接释放资源,释放端口号。

    补充:一台服务器可以启动两个tomcat,但是服务端的两个tomcat不能同时使用8080,其实这也符合前面说的一切皆文件,两个tomcat就是两个进程,我们的请求到主机了,主机就可以根据不同的端口号的映射找到目标进程
    在这里插入图片描述

    网络层

    传输层会帮我们做三次握手,创建数据包,但是是在网络层发出去的。也就是在创建握手包之后他是调向网络层的,网络层对应的就是IP协议了。

    这里要说到一点就是经常会把TCP/IP说到一起,这个TCP/IP其实指的就是OSI模型,OSI的应用层对应HTTP、SSH等,传输层对用TCP,网络层对应IP,所以叫做TCP/IP,说的就是OSI模型了。

    IP是互联网所有设备唯一标识的ID,网络层就是通过IP寻找到对方的路由路径,这时候我们考虑全球那么多IP,应该怎么去找到目标IP,在互联网里也是层级关系的,也就是先有小网也就是我们局域网,后有大网就是我们的互联网。从互联网中找到局域网,在从局域网中找到目标IP。所以我们IP中相当于有两个信息,一个是自己的名字,一个是归属于哪个局域网。

    首先查一下我们ip信息

    ifconfig
    

    在这里插入图片描述
    可以看到ip地址,广播地址和掩码,那么他们怎么来的

    打开网卡配置文件,if是interface,cfg是config,eth就是以太网,0就是第一块网卡

    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    

    在这里插入图片描述
    可以看到上面有device是eth0这个设备,硬件地址、开机启动等等,最下面两个DNS是做域名向地址的解析。但是传输层创建的数据包,封的是ip,不是域名,这点需要知道,然后主要看我们下面的三行。

    第一行是IP地址,第二行是子网掩码,第三行是网关。

    这块需要了解二进制和十进制,不懂的百度一下吧,很简单。

    我们先说IP和掩码的关系,IPV4是点分字节,也就是一个点两侧分别是一个字节Byte,一个字节有8个二进制位。

    所以我们常说IPV4是32位的就是4*8(IPV6是128位),一个字节有8个二进制位那么最大就是11111111,最小00000000,二进制转十进制,11111111转为十进制就是255,也就是0-255。

    IP清楚以后看掩码,掩码是三个255一个0,掩码和IP之间有个运算关系,叫做二进制的按位与运算,按位与运算就是全1为1,有0则0。

    即(0&0=0; 0&1=0; 1&0=0; 1&1=1)

    那么每一位做比较,192的二进制是11000000,255的二进制是11111111,所以得到的还是11000000,14的二进制和0的二进制做与运算得到的是0

    也就是拿IP和掩码做完运算得到的是192.168.150.0,算出的192.168.150.0就是这台计算机所在的局域网,如果其他计算机能找到192.168.150这个局域网就能找到14号机。

    然后我们先抛开GATEWAY网关,继续说IP,IP协议这层对应着一个路由表,我们可以想一下现在这个世界当中,手机,笔记本,台式机都是可以联网的,他们之间可以互相通讯,那么怎么手机怎么连接到服务器呢,互联网怎么互联的呢?

    这里补充个知识点,比如我们ping了以下百度,他能在三四毫秒就能找到百度,我们读硬盘来读文件,磁头寻址读到目标文件的时间也是毫秒级别,我们再回想之前说的冯诺依曼体系,我们的硬盘、网卡都是输入输出设备,那么我们可以得出一个结论:在计算机系统当中IO是个瓶颈,他的延迟是毫秒级,因为内存的寻址时间是纳秒级别,内存比一切IO快了十万倍,所以说IO就是计算机系统中的瓶颈,从时间就是可以算出来。
    在这里插入图片描述

    说回来,毫秒对于人的体感来说已经足够快了,那么如何在这个庞大的互联网中快速的寻找到要访问的地址呢,其实在TCP/IP协议诞生的时候就解决了这个问题。通信很快但是它受到了学术界的抨击和质疑,为什么呢,因为它是采用的下一跳的传输方式。
    在这里插入图片描述
    下一跳是个什么机制什么概念呢,就和上图是一样的,比如上图三台计算机,a连b,b连c,a想访问c,它会直接把数据包扔给b,但是a并不知道能不能找的到,但它只有b这么一个出口,所以a会直接把数据包丢给直连的b,b再丢给c,这样都只扔给和自己直连的机器,就这样一跳一跳的就能有可能跳到目标计算机,当然也有可能跳丢了,这也就是学术界质疑的点。

    为什么会采用这种下一跳的机制呢,因为我们面向每台主机,它不需要知道全局,只需要知道一个出口就可以了,所以前面提到的路由表就是要去完成这个下一跳机制。

    我们来人肉模拟一下数据包出入选址的过程:

    Linux系统中输入查看路由表命令

    route -n
    

    在这里插入图片描述
    我们注意看第一行的信息,它的目标地址或者终点是192.168.150.0,网关是四个0,掩码是三个255一个0,那么这条信息哪来呢,就是刚才看到的网卡配置文件,拿着IP和掩码做完运算得到了网络号,然后通过eth0这块网卡,就可以和自己所的在的192.168.150.0这个局域网里的任何机器通信,且不需要网关。

    第二行不需要看,接着看第三行,第三行的目标地址是四个0,网关是192.168.150.2,掩码是四个0,代表什么意思呢,比如我在ping百度
    在这里插入图片描述
    百度的域名通过DNS转换成了61.135.169.125这么一个目标地址,也就是说这台服务器会封装一个数据包,这个数据包的目标ip地址就是了61.135.169.125,然后我们的数据包应该去找哪块网卡呢,下一跳跳哪去呢,其实会有一个路由判定的过程

    只需要拿着目标地址61.135.169.125和路由表当中的每一行掩码位做按位与运算,然后和前边的网络号比,不一样不匹配相当于作废,继续对比一下条

    这时想想路由表的最后一行很神奇,掩码和目标地址全都是0,那么用任何的ip地址都能和最后一条匹配上,这个就叫做默认网关条目,也就是访问任何的地址都会和这个条目匹配上,这个条目中还有一个网关是192.168.150.2,也就是我们要把这个数据包扔给192.168.150.2,它去做下一跳去

    猜猜这个网关是谁,太明显了,他就是路由器嘛,我们的路由器就是我们的网关,我们把数据包扔给路由器,路由器也有自己的路由表,它扔给运营商,运营商再扔给城域网,城域网再扔给骨干网,最终扔到我们要访问的服务器上去,这就是下一跳的过程

    那么我们访问同一局域网怎么访问的,比如我们ping自己局域网内的一台机器
    在这里插入图片描述
    拿ip和掩码做完运算就走路由表的第一条了吧,并且没有网关

    最后这里还有一个点,比如我们要访问百度,得把访问百度的数据包扔给了网关,那么这时候的数据包里面的ip地址是放路由的ip地址还是百度的ip地址?我们放网关的ip的话,到了网关,网关就以为是给它的数据包,就不会再有下一跳了,但是放百度的ip,连网关都找不到。所以一层是不够的,这时候就得有了下一层——链路层。

    链路层

    前面几层都有协议,到了链路层也有协议,叫做ARP协议,它可以根据IP地址获取物理地址,到了这层会把访问百度的数据包外边再套一个包,再写一个地址,这个地址是根据网关的ip地址解析完的网卡硬件地址

    arp -a
    

    在这里插入图片描述

    可以看到192.168.150.2这个IP地址在53:2b这块物理网卡上,那么链路层只需要把访问百度的数据包按照MAC地址(物理地址)就可以转发到路由器那块网卡上了,到了路由器它会再走它的路由判定,继续向外扔。但是会把MAC地址换成路由器的网关的MAC地址,让路由器也能找到下一跳。

    所以网络层是端点地址,就是客户端服务端通信的地址,但是链路层的地址是下一跳下一跳这种节点间的地址,端点的地址是不会发生变化的,但是节点的地址是每跳一次都换成下一跳的MAC地址。

    这就是由网络层和链路层组成的完整的TCP/IP下一跳机制。

    ARP协议补充:

    arp这个表的数据怎么来的,服务器或者电脑刚开机的时候,arp这个表其实是空的,在从网络层到链路层,ip到了链路层从arp表中没有找到的话,会发送一个apr协议进行获取mac地址,用下面这张图做解释。
    在这里插入图片描述
    计算机1想访问计算机4,那么通过前面的知识,可以知道会通过网络层路由表匹配到路由器的ip地址,然后到链路层再封一个数据包,里面是目标ip地址也就是192.168.3.4,外面再套一个路由器的mac地址,就可以请求到路由器,再从路由器找到3.4。

    但是如果mac表没有对应ip会怎么办呢,他会发一个arp请求,这个请求的目标mac地址为全F,请求到了交换机,交换机会把这个arp请求广播,广播到计算机2,计算机发现目标ip不是自己就把请求丢了,到了路由器,发现是自己,就会把请求收下,然后返回。如下图,请求的时候会带着源ip和mac地址,还有目标的ip和mac地址,所以请求可以从路由器返回到计算机3,这样计算机3就拿到了路由器的mac地址
    在这里插入图片描述
    这里还要补充一下,交换机是两层的,它具有学习能力,计算机1刚开始的时候发送了一个arp请求,这个请求肯定带着源ip和mac地址,所以交换机会把他记下来,在自己的1号机位或者1号端口他的mac地址是xx,这样在路由器返回请求的时候,请求到了交换机,就可以对比,发现mac地址在自己这里记过了,那就不需要广播了,可以直接给1号端口

    到这里网通通讯的过程已经结束了,鄙人初学的时候觉得很难理解,经过了三四天的思想转变才想明白。下面通过抓包测试,来验证以下前面的通讯逻辑是否正确。

    抓包测试、验证

    首先安装一个抓包工具

    yum install tcpdump
    

    安装完以后输入命令 -nn代表不显示逻辑名称,显示ip地址和端口号,-i代表抓的哪块网卡后面跟抓哪些包,所以我们抓arp包或者这个包的端口号是80,这样两个包,然后让它执行着

    tcpdump -nn -i eth0 arp  or port 80
    

    然后再开打一个新的标签页去访问百度,这里需要有一点改动,因为arp这张表本来开机是空的,但是它自己会通过arp协议请求到MAC地址,所以为了看到完整的网络通讯过程,我们可以先把MAC地址信息删掉,再通过curl去爬百度的主页

    arp -d 192.168.150.2  && curl www.baidu.com 80
    

    然后看我们的数据包都发生了什么事情
    在这里插入图片描述

    这时候链路层arp初始化好了以后,链路层就可以和网络层一起配合着发送数据包了。
    在这里插入图片描述

    三次握手完毕以后,双方为对方开辟了资源。后续操作都携带.,也就是ack确认

    • 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大。

    • 在一定时间内没有等待到确认应答,发送端就可以认为数据已经丢失,并进行重发。由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输。

    • 未收到确认应答并不意味着数据一定丢失。也有可能是数据对方已经收到,只是返回的确认应答在途中丢失。这种情况也会导致发送端误以为数据没有到达目的地而重发数据。

    传输数据过程如下
    在这里插入图片描述

    这个步骤就是数据传输的过程,本地给服务器请求,服务器响应确认,服务器分批返回数据,本地收到数据响应确认,P就代表着,我的请求发完了,尽快执行,不要有缓存积压。

    其实就是在这里有窗口的概念,目的是为了提高传输的效率和可靠性,下面说下这个窗口的概念以及刚才上面说的确认、重发机制

    利用窗口控制提高速度

    TCP 以1个段为单位,每发送一个段进行一次确认应答的处理。这样的传输方式有一个缺点,就是包的往返时间越长通信性能就越低。

    为解决这个问题,TCP 引入了窗口这个概念。确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅地缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。如下图所示:
    在这里插入图片描述

    窗口大小就是指无需等待确认应答而可以继续发送数据的***值。上图中窗口大小为4个段。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。

    滑动窗口控制

    在这里插入图片描述

    • 上图中的窗口内的数据即便没有收到确认应答也可以被发送出去。不过,在整个窗口的确认应答没有到达之前,如果其中部分数据出现丢包,那么发送端仍然要负责重传。为此,发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答。

    • 在滑动窗口以外的部分包括未发送的数据以及已经确认对端已收到的数据。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除。

    • 收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也别称为滑动窗口控制。

    窗口控制中的重发控制

    在使用窗口控制中, 出现丢包一般分为两种情况:

    ① 确认应答未能返回的情况。在这种情况下,数据已经到达对端,是不需要再进行重发的,如下图:
    在这里插入图片描述

    ② 某个报文段丢失的情况。接收主机如果收到一个自己应该接收的序列号以外的数据时,会针对当前为止收到数据返回确认应答。如下图所示,当某一报文段丢失后,发送端会一直收到序号为1001的确认应答,因此,在窗口比较大,又出现报文段丢失的情况下,同一个序列号的确认应答将会被重复不断地返回。而发送端主机如果连续3次收到同一个确认应答,就会将其对应的数据进行重发。这种机制比之前提到的超时管理更加高效,因此也被称为高速重发控制。
    在这里插入图片描述

    在这里插入图片描述
    最终客户端把主页数据接受完,四次分手断开连接,网络通讯完成。

    模型总结

    在这里插入图片描述

    应用层

    应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等等。我们把应用层交互的数据单元称为报文

    传输层

    运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。

    传输层协议

    传输控制协议TCP(Transmisson Control Protocol)–提供面向连接的,可靠的数据传输服务。

    用户数据协议UDP(User Datagram Protocol)–提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)

    网络层

    网络层(network layer)负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报。

    网络层的另一个任务就是选择合适的路由,使源主机运输层所传下来的分株,能通过网络层中的路由器找到目的主机

    数据链路层

    数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)

    协议及相关概念总结

    TCP/IP(传输控制协议/网际协议) 是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP,以及http等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。所以完全可以把TCP/IP理解为它就是OSI网络模型

    TCP是传输层协议, 主要解决数据如何在网络中传输,它是以二进制数据流的形式解决传输层的事,它能将信息分割成组,并在接收端将其重组,并且提供拥塞控制和流量控制机制,丢包时的重发控制,但是对于上层应用的开发极不友好,所以面向应用层的开发又产生了HTTP协议,TCP是面向连接的,通过三次握手保证通信可靠性

    UDP也是传输层协议, 但不是面向连接的,不具有可靠性的数据报协议,也就说UDP不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务,UDP 无法进行流量控制等避免网络拥塞行为因此网络出现拥塞不会使源主机的发送速率降低。

    甚至当包的到达顺序出现乱序时也没有纠正的功能。UDP支持一对一、一对多、多对一和多对多的交互通信,UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。也就是包总量较少的通信(DNS、SNMP等),视频、音频等多媒体通信(即时通信)

    HTTP协议是一个基于请求和应答模式,存在于传输层之上的应用层协议,通常是基于TCP的连接方式,它本身是一个无状态,无连接的协议,每次连接只处理一个请求.服务器处理完客户端的请求,然后响应,并收到应答之后,就断开连接.这种方式可以节省传输时间

    请求和应答模式
    HTTP协议定义了web客户端如何从web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型.客户端向服务器发送一个请求报文,请求报文包括请求的方法,url,协议版本,请求头部和请求数据.服务器以一个状态行作为响应,响应的内容包括协议的版本,成功或者错误代码,服务器信息,响应头部和响应数据

    无状态
    无状态是指协议对于事务处理没有记忆能力,这种方式的一个坏处就是,如果后续的处理需要用到之前的信息,则必须要重传,这样就导致了每次连接传输的数据量增大.好处就是,如果后续的连接不需要之前提供的信息,响应就会比较快.而为了解决HTTP的无状态特性,出现了Cookie和Session技术.

    HTTP和tcp的区别
    很多人会把http和tcp看作两种不同但是是同级的协议,注意不是这样的,http是要基于TCP连接基础上的,简单的说,TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,即实际应用上来的。TCP是底层通讯协议,定义的是数据传输和连接方式的规范 HTTP是应用层协议,定义的是传输数据的内容的规范 HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP

    socket: socket并不是一种协议,他是对复杂的tcp进行了封装。是针对TCP或UDP的具体接口实现,提供了在传输层进行网络编程的方法

    结尾:

    到现在是把,通讯和协议都聊明白了,下一章会深度讲解IO模型,让你明白什么叫NIO、BIO、多路复用,可以关注我的公众号,里面有全部完整的文章

    在这里插入图片描述
    关注公众号回复“资源”,可以免费领取架构师、大数据、AI等课程,以及面试题

    展开全文
  • OSI七层协议模型TCP/IP四层协议模型的区别和联系 OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。 OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有...

    OSI七层协议模型和TCP/IP四层协议模型的区别和联系

    • OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。
    • OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。
    • OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。
    • TCP:transmission control protocol 传输控制协议

      UDP:user data protocol 用户数据报协议

    • 记忆方法:七层结构记忆方法:应、表、会、传、网、数、物     四层:应、传、网、数

    转载于:https://www.cnblogs.com/buptmarciaguo/p/8601944.html

    展开全文
  • Python进阶----网络通信基础 ,OSI七层协议() ,UDPTCP的区别 , TCP/IP协议(三次握手,次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    一丶CS/BS 架构

    C/S: 客户端/服务器

       定义:
          这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上对用户的电脑操作系统环境依赖较大

       比如:
          qq、微信、网盘、优酷这一类是属于需要安装的桌面应用

       优点:

          安全性高,个性化设置,功能全面,响应速度快

       缺点:

          开发成本高,维护成本高.面向的客户固定

    img

    B/S:浏览器/服务器

       定义:

          Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。

        比如:

          百度、知乎、博客园等使用浏览器访问就可以直接使用的应用

       优点:

          开发维护成本低,面向用户广泛

       缺点:

          安全性相对低,响应速度相对慢,个性化的设置单一

    img

    二丶互联网通信的原理

       1.首先通过各种物理连接介质连接

       2.精准找到对方计算机(软件)的位置

       3.通过统一的标准协议(互联网协议:一系列的协议)进行数据的收发.

    三丶osi七层协议

    img

    物理层:

       功能:

          主要是基于电器特性发送高低压(电信号), 0低压 1高压

       传输介质:

          光纤 ,双绞线

    数据链路层:

       功能:

    ​      将电信号进行分组

       以太网协议:

          对比特流数据进行分组.

          一组电信号构成一个数据报,也称作'帧'

          每一数据报(帧)由: 报头head 和 数据data 组成. 结构如下图?:

    head (固定18个字节) data(最短46字节,最长1500字节)
    发送者/源地址6个字节, 接收者/目标地址6个字节, 数据类型6个字节 head长度+data长度=最短64字节,最长1518字节. 超过最大就分片发送

       mac地址:

          每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

    img

       广播:

          采用'大喇叭'方式进发送数据,目的地址为网络中所有设备的一种传输方式.

          在局域网内的一台主机,发送数据,N台主机都要接收.这N台主机中必有一台主机接收数据.其他的主机则丢弃发送过来的数据.

    # 发送数据格式: 本机mac地址 目标mac地址(未确定)  数据
    # 源地址: 1C-1B-0D-FF-E8-8F  目标地址: FF-FF-FF-FF-FF-FF  | 数据

    ​ 广播原理图:

    img

       单播:

          单播是客户端与服务器之间的点到点连接.

          免局域网内每一次都广播的形式通信.记录双方的mac地址后,以后就可以单播,提升传输效率.

    # 发送数据格式:   本机mac地址 目标mac地址(确定)  数据
    # 源地址: 1C-1B-0D-DA-E8-8F 目标地址: 1C-1B-0F-4A-E8-8F  |   数据

       交换机原理:(原理摘自百度百科)

           一种用于电(光)信号转发的网络设备

          为接入交换机的任意两个网络节点提供独享的电信号通路

          最常见的交换机是以太网交换机

           交换机工作于OSI参考模型的第二层,即数据链路层

           交换机拥有一条高带宽的背部总线和内部交换矩阵,在同一时刻可进行多个端口对之间的数据传输。交换机的传输模式有全双工半双工,全双工/半双工自适应。

    #交换机对照(网口与MAC地址的)表:
    1:    1C-1B-0D-DA-E8-8F
    2:    FF-FF-FF-FF-FF-FF
    3:    FF-FF-FF-FF-FF-FF
    4:    FF-FF-FF-FF-FF-FF
    5:    1C-1B-0F-4A-E8-8F
    
        
    网口1: 出来一条信息:
    # 第一次广播的形式发出去.
    网口1:源地址: 1C-1B-0D-DA-E8-8F 目标地址: 1C-1B-0F-4A-E8-8F  |   明天放假
    
    # 局域网内每个网口都收到数据
    2,3,4,5口接收到次消息,查看目标mac地址是否是自己的,
    # 只有网口5 收到网口1 发送的数据
    5口确定是自己的.
    
    # 单播基于交换机的对照表
    每个网口都广播发送消息一遍之后,对照表就构建好,下次在任意的网口在发消息,就直接以单播的形式发送.
    目的: 避免局域网内每一次都广播的形式通信.以后就可以单播,提升效率.

    网络层:

       功能:

             两台主机通信,定位主机的在哪一个局域网,

       ip协议:

              IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

              IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。

              IP地址通常用"点分十进制"表示成(a.b.c.d)的形式,其中a,b,c,d都是0~255之间的十进制整数。

              例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

       ip地址分成两部分:

    ​          网络部分:标识子网

              主机部分:标识主机

              单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

        子网掩码:判断两个IP是否是在同一个网段

    子网掩码: 一般都是C类.
    255.255.255.0
    
    #  判断两个IP 是否在同一个网段,   采用 and 判断
    # ip地址+子网掩码如何确定局域网的位置?  
        一个ip:   172.16.10.1  :  10101100.00010000.00001010.00000001
        子网掩码: 255.255.255.0 : 11111111.11111111.11111111.00000000
        #  结果:  网段,子网,局域网:   172.16.10.0
        
        另一个ip: 172.16.10.2: 10101100.00010000.00001010.00000010
        子网掩码: 255.255.255.0 11111111.11111111.11111111.00000000
        #   结果: 网段,子网,局域网:  172.16.10.0
    # 证明两个IP是在同一个局域网.
       
       
    ## 一般情况下: C类子网掩码,一个局域网能承载多少计算机?
        # C类子网掩码可以分配的ip数量: 254个.
        # 一个局域网 最多可以分类254个ip地址(同一个局域网内的ip地址不能重复),也就是可以连接254台计算机.
    
    # 总结
        通过iP地址与子网掩码可以确定对方计算机是否和自己的计算机在同一子网.
        如果确定在同一子网: 通过广播+单播就可以通信.
        如果不确定在同一个子网: 需要通过交换机的传输,路由的转发.找到对方计算机.

       ARP地址解析协议协议:通过IP或的对方的mac地址

              是根据IP地址获取物理地址的一个TCP/IP协议

    ### ARP协议:就是将对方的ip地址获取到对方的MAC地址
    # 如果两个用户进行第一次通信的时候,你必须要知道对方的IP地址.
    ## 例如:
    IP + ARP协议 获取对方的MAC地址
    
    
    
    #案例:
    # 站在 发送端角度,不知道对方的mac地址. 通过arp(地址解析协议),根据对方IP解析出对方mac地址
    源mac                          目标mac(未知)          源ip          目标ip          数据部分
    发送端mac:1C-1B-0D-DA-E8-8F  FF:FF:FF:FF:FF:FF 172.16.10.10/24  172.16.10.11/34         数据
    
    # 站在 接收端角度.接收完数据后,向发送端发送一条信息.告诉发送端,你已经接收数据
    目标计算机
    源mac:1C-1B-0F-4A-E8-8F目标mac 1C-1B-0D-DA-E8-8F 源ip: 172.16.10.11/34  目标ip:172.16.10.10/24

    传输层:

       传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。

    会话层:

       会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成

    表示层:

       表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。

    应用层:

       OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。

    图解数据传输osi七层

        发送方: 自上到下,每一层都对要发送的数据进行加工(封包),直至物理层传输完毕.
        接收方: 自下而上 , 逐层解包,每层按照一定格式或协议,拆除指定段的数据, 直至应用层数据拆分完毕

    img

    两种模型,每层协议

    TCP/IP:

    网络接口层(链路层):

    网络层: IP,ICMP,IGMP,【ARP,RARP】

    传输层:TCP ,UDP,UGP

    应用层:Telnet,FTP,SMTP,SNMP.

    OSI:
    物理层:EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45, Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ, B8ZS

    数据链路层:Frame Relay, HDLC, PPP, IEEE 802.3/802.2, FDDI, ATM, IEEE 802.5/802.2

    网络层:IP,IPX,AppleTalk DDP,【ARP,RARP】

    传输层:TCP,UDP,SPX

    会话层:RPC,SQL,NFS,NetBIOS,names,AppleTalk,ASP,DECnet,SCP

    表示层:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption,MPEG,MIDI,HTML

    应用层:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP

    四丶UDP与TCP

    tcp协议:

       优点:

             可靠传输,面向连接,面向字节流(流协议),安全性高,保证数据正确性,顺序性,仅支持单播传输,提高阻塞控制,提高全双工通信

       缺点:

             传输效率相对低,消耗资源大

             TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    以太网头 ip 头 tcp头 数据

    TCP/IP传输五层模型:

    TCP/IP协议簇

              数据发送端是一层一层封装数据,数据接收端一层一层拆封,最后应用层获得数据。

    tcp头信息

           TCP报文包=TCP头信息+TCP数据体

    ### TCP头信息中包括了六种控制位:
    #  1. URG  紧急数据  urgent-data
    #  2. ACK  确认已收到
    #  3. PSH  接收端应用程序应该立即从tcp接收缓冲区中读走数据
    #  4. RST  表示要求对方重新建立连接
    #  5. SYN  表示请求建立一个连接
    #  6. FIN  表示通知对方 本端要关闭连接了
    
    # ?下图红框中展示了6中控制位
    

    TCP详解摘自裸睡的猪 HTTP详解一文,仅供自己技术学习.

    UDP协议:

          优点:

             面向无连接,面向报文,传输效率高,有单播,多播,广播的功能.非常节省资源

          缺点:

             不可靠传输,不保证数据的安全性,容易产生丢包现象

              ”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    以太网头 ip头 udp头 数据

    TCP和UDP的对比

    TCP UDP
    是否连接 面向连接 面向无连接
    是否可靠 可靠的传输,采阻塞方法进行控流 不可靠,不可控
    是否安全 安全的传输,保证数据的一致性,顺序性 不安全的传输(易丢包)不能保证数据的一致性,顺序性
    传输方式 以字节流形式(TCP也称作流协议) 以数据报文形式
    头部消耗 最小20字节,最大60字节 仅8字节
    连接方式 点对点通信 支持所有通信方式(点对点,广播,多播)
    应用 文本文件和数据 视频,即时通讯(QQ,威信)

    端口:

          含义:

             因此ip地址精确到具体的一台电脑,而端口精确到具体的程序。

              "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。

          端口号的范围 0 ~ 655355 :

             1~ 1025 系统占用端口号

             1024~8000之内:一般的是由软件占用

    五丶TCP的三次握手,四次挥手

    TCP的三次握手:

             是一种面向连接的、可靠的、基于字节流的传输层通信协议。如下图?:

    
    ### 为什么必须是三次握手呢? 不是四次,或两次呢?
    三次握手,既能保证数据传输的可靠性,也不消耗资源
    
    两次,不能保证双端通讯正常
    四次,浪费资源
    
    

    三次握手讲解:

    1. 客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机(客户端:我要连接你)

    2. 服务器收到请求后要确认联机信息,向A发送 ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:好的,你来连吧)

    3. 客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。

      (客户端:好的,我来了)

    1613203-20190715210812516-928702662.png

    TCP的四次挥手:

    讲解:

    1. client --->server: FIN (客户端关闭请求)
    2. server--->client:ACK(客户端关闭请求结果)
      3.server---->client:FIN(服务端关闭请求) 保证服务端关闭前 数据 完全发送到客户端
      4.client---->server: ACK (服务端关闭请求结果)

    1613203-20190716085828585-991303506.png

    转载于:https://www.cnblogs.com/dengl/p/11191547.html

    展开全文
  • OSI七层协议 物理层 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质物理设备的差异。 数据链路层 负责建立管理节点间的链路。该层的主要功能是:通过各种控制协议,将有差错...
  • OSI体系是七层协议,而TCP/IP体系是四层协议, 1.OSI七层模型是国际标准化组织ISo制定的开放系统互连基本参考模型,是法律上的国际标准 而TCP/IP是事实上的国际标准 2.OSI协议实现起来过分复杂,而且运行效率低,...
  • 四层负载均衡,在网络模型中的传输层中,基于主要是基于tcp协议报文实现负载均衡(比如LVS、haproxy就是四层负载均衡器),使用改写报文的源地址目的地址。 支持反向代理 LVS(软负载) F5(硬负载) Haproxy ...
  • 1、四层七层网络模型(以及每层对应的协议网络模型 对应协议 2、五类IP的范围6、VPN,DNS端口号,IP地址,子网掩码,网关的作用7、抓包工具有哪些8、TCP数据包的组成以及UDP数据包的组成9、并发服务器,分布式...
  • 2.1OSI七层模型TCP/IP四层模型的区别 三、五层模型 一、OSI七层模型 OSI(Open System Interconnection),意为开放式系统互联。 为了使全世界不同体系结构的计算机能够互联,国际化标准组织ISO提出开放系统...
  • 如下图可见,是OSI七层协议体系与TCP/IP的体系结构,实际上,TCP/IP的体系结构是四层,如图b。但是一般在学习计算机网络的原理时往往会采取折中的方法,综合OSI与TCP/IP的优点,就会采用五层协议的体系结构,如图c:...
  • 目录一、OSI七层模型与TCP/IP五层模型(1)OSI七层模型:(2)TCP/IP五层模型-数据传输过程-数据接收的过程(3)OSI七层和TCP/IP五层模型所对应的协议(4)OSI七层和TCP五层的区别二、tcp的三次握手,次断开(1)...
  • 四层负载和七层负载 所谓四层就是基于IP+端口的负载均衡,主要代表有lvs。 七层负载也称内容交换,就是基于URL等应用层信息的负载均衡,主要代表有nginx。 参考:LVS三种模式的区别及负载均衡算法 一分钟了解...
  • 五层模型详细作用4.TCP/IP协议和OSI协议区别5.每一层协议有哪些?6.交换机路由器各工作在哪一层?7.TCP/UDP,IP,HTTP、SOCKET分别在哪一层? 1.OSI七层模型 物理层、数据链路层、网络层、传输层、会话层、表示层、...
  • 目录 OSI七层网络模型与TCP/IP四层模型介绍 1.OSI七层网络模型介绍 2.TCP/IP四层网络模型介绍 ... 4.OSI七层和TCP/IP四层区别 5.交换机工作在OSI的哪一层 6.路由器工作在OSI的哪一层 ...
  • 1、网络通信 互联网本质就是一系列的网络通信,互联网协议的功能是定义计算机如何介入internet,以及介入internet的计算机通信的... 1、osi七层协议 应用层 DHCP...
  • 4.OSI七层和TCP/IP四层区别 OSI网络模型TCP/IP网络模型对应关系: 5.交换机工作在OSI的哪一层 如果有人问这个问题,我的回答是 :二层交换机工作在OSI的第二层数据链路层,,由于它们要对帧解码并使用帧...
  • 目录OSI七层模型TCP/IP 4层模型IP地址以及MAC地址作用TCP/IP数据链路层的交互过程搜索url,会用到计算机网络中的什么层怎么区分UDP报文还是TCP报文阻塞,非阻塞,同步,异步GETPOST的区别 OSI七层模型 物理层: ...
  • 什么是OSI ...OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。 每一层实现各自的功能和协议,并完成与相邻层的接.
  • 1、简述osi七层模型TCP/IP五层模型 1.OSI 七层模型: 应用层:OSI 参考模型中最靠近用户的一层,为计算机用户提供应用接口,也为用户直接提供各 种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP...
  • 七层网络模型

    2019-02-18 10:14:20
    参考链接 网络七层模型与四层模型区别 juejin.im/post/59a047… 详谈OSI七层网络协议和TCP/IP协议 juejin.im/post/5a900d… 转载于:https://juejin.im/post/5c6a8541f265da2d8d69ceed...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 378
精华内容 151
关键字:

网络七层协议和四层协议区别