zoukankan      html  css  js  c++  java
  • 网络通信原理

    转自:http://www.cnblogs.com/yaoyao-sun/p/10296503.html

    一 网络五层模型

    一 实体层,就是把电脑连接起来的物理手段,规定网络的一些电气特性,主要传送0或1的电信号。

    二 链路层

    2.1 链路层定义,它在实体层的上方,通过以太网协议在同一个子网里发送数据包。

    2.2 以太网协议

    以太网规定,一组电信号构成一个数据包,叫做“帧”,每个帧分为两个部分,标头(head),数据(data)。

    标头,是数据包的说明项,包括发送者,接收者,数据类型。数据则是数据包的具体内容。

    “标头”的长度固定为18个字节,“数据”的长度最短为46个字节,最长为1500个字节。因此,整个“帧”的长度最短为64个字节,最长为1518个字节。如果数据很长,就必须分割成多个包来发送。

    2.3 MAC地址

    “标头”中发送者和接收者的信息。以太网规定,进入网络的所有设备,必须具有“网卡”的接口。数据包是从一块网卡传送到另一块网卡。网卡的地址就是数据包的发送地址和接收地址,也称为MAC地址。

    前6个十六进制位是厂商编号,后六个是网卡流水号。有了MAC地址,就可以网卡和数据包路径。

    2.4 广播

    以太网必须知道接收方的MAC地址,然后才能发送。

     

    上图中,1号计算机向2号计算机发送数据包,同一个子网的3号,4号,5号计算机都能够收到包。它们读取这个包,找到接收者的MAC地址,和自身的MAC地址相比较,如果相同,就接收这个包,做进一步的处理。如果不同,就丢弃这个包。这种发送方式,称为“广播”。

    有了数据包,MAC地址,“广播”发送方式,链路层就可以在同一个子网中传递数据包。

    三 网络层

    3.1 网络层的由来

    以太网中发送数据,局限在同一个子网中。互联网是由若干个子网构成的巨型网络。

    如果是同一个子网络,我们就采用“广播”方式发送数据包。不是同一个子网,就采用“路由”发送。

    网络层使用IP地址,让我们能够区分不同主机是否属于同一个子网。

    于是,一台主机就有了两种地址,一个MAC地址,另一个IP地址。两者之间没有任何联系。MAC地址绑定目标网卡,IP地址由管理员分配。

    IP地址负责找到目标主机的子网,MAC地址把数据包发送至子网中的目标网卡,先处理IP地址,再处理MAC地址。

    3.2 IP协议

    规定IP地址的协议称为IP协议。现阶段,使用IP协议的第四个版本,IPv4,由32位二进制表示,分为4段,两部分,前部分表示网络,后部分表示主机。

    子网掩码,用来判断两台主机是否属于同一个子网络,由32位二进制数表示,网络部分全为1,主机部分全为0。例如IP地址172.16.254.1,子网络掩码是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,可知他们的网络部分是相同的都是172.16.254,因此它们在同一个子网络。

    IP地址 = {<网络号>:<主机号>}

    IP地址分类

    A类地址,只用一组8位二进制数来表示网络号,规定网络号第一位必须是0,地址空间为 0.0.0.0~127.0.0.0   默认子网掩码是255.0.0.0

    B类地址,使用两组二进制数表示网络号,规定网络号前两位必须是10,地址空间是 128.0.0.0~191.255.0.0    默认子网掩码为255.255.0.0

    C类地址,采用三组二进制数表示网络号,规定网络号前三位必须是110,地址空间为 192.0.0.0~223.255.255.0   默认子网掩码是255.255.255.0

    IP协议有两个功能,为每一台主机分配一个IP地址,确定哪些地址在同一个子网。

    4.3 IP数据包

    根据IP协议发送的数据包,称为IP数据包。不难想象,必定包括IP地址信息。

    向下传输过程,直接把IP数据包放置以太网数据包的“数据”部分,完全不用修改以太网的数据规格,这就是互联网分层的好处:上层的变动完全不涉及下层结构。

    IP数据包也包括“标头”和“数据”部分。

    放入以太网数据包后,以太网数据包就变为这样。

    4.4 ARP协议

    需要一种机制,将IP地址转为MAC地址。

    如果两台主机不在同一个子网中,则无法通过ARP协议得到MAC地址,需要使用“网关”来“路由”处理。

    如果两台主机在同一个子网中,ARP协议发送一个数据包,包含要查询主机的IP地址,在对方MAC地址这一栏填的是FF:FF:FF:FF:FF:FF,表示这是一个“广播”地址。同一子网的所有主机,都会收到这个数据包,从中取出IP地址,与自身IP地址相比较,如果相同,则告诉对方自己MAC地址。如果不相同,则丢弃。

    有了ARP协议,我们就可以得到同一子网内的所有主机MAC地址,于是就可以把数据包发送到任何一个主机。

    四 传输层

    4.1 传输层的由来

    有了IP地址,MAC地址,互联网上的任何两个主机之间都可以通信。还需要一个参数,用来确定数据包是供主机上哪个程序使用,这个参数就是“端口”。“端口”其实是主机上每一个使用网卡的程序的编号。每个数据包发送到主机的特定端口,所以每个程序都能够获得所需要的数据。

    “端口”是一个0到65535之间的一个整数,16个二进制位,0~1023由系统占有,用户只能选择大于1023的端口号。不管是浏览网页还是在线聊天,应用程序都选择一个“端口”,与服务器的“端口”通信。

    传输层的功能是定义“端口到端口”之间的通信。网络层的功能是定义“主机到主机”间的通信。有了主机和端口,就能够在程序之间交流。UNIX系统把“主机+端口”称为“套接字”,有了它,就能够进行网络应用程序的开发。

    4.2 UDP协议

    我们需要在数据包中加入端口信息,就需要新的协议,最简单的实现就是UDP协议。只要在数据包前加入端口号即可。

    UDP数据包也由“标头”和“数据”两部分组成。

    “标头”包括发送端口和接受端口的信息,“数据”则是具体的内容。UDP数据包放入IP数据包的“数据”部分,IP数据包又放入以太网数据包中,所以以太网数据包变为如下所示。

    4.3 TCP协议

    面向连接的协议。点对点连接,每个连接有两个端点,端点称为“套接字”。可靠交互。全双工通信。面向字节流。

    每发出一个数据包都需要确认,如果丢失数据包,就收不到确认,发送方就知道有必要重发。TCP协议能够确保数据不丢失。缺点就是过程复杂,实现困难,消耗较多资源。

    五 应用层

    应用程序收到传输层的数据,就要进行解读。由于互联网是开放架构,数据来源五花八门,必须规定好数据格式,否则,根本无法解读。

    “应用层”的作用就是规定应用程序的数据格式,常见的应用程序协议有HTTP,FTP,SMTP,DNS。

    TCP协议可以为各种各样的程序传递数据,比如Email,WWW,FTP等,那么就必须有不同协议规定电子邮件,网页,FTP数据的格式,这些应用程序的协议就构成了应用层。

    这是最高一层,直接面向用户,数据放在TCP数据包的“数据”部分。以太网数据包变成了如下所示。

    六 过程解析

    对互联网的结构模型有了以上的认识,我们通过一个实例来深入了解数据包的传输过程。

    某个用户在浏览器地址栏输入 www.google.com后。这意味着浏览器向谷歌发送一个请求网页的数据包。

    6.1 DNS解析(域名解析)

    根域名服务器:最高层次的域名服务器。

    顶级域名服务器:如上www.google.com

    权限域名服务器:负责一个区的应用服务器

    本地域名服务器:主机发送DNS查询请求就是发送给它。

    我们知道,发送数据包,必须要有IP地址,但是现在只有网址,没有IP地址。DNS协议可以帮助我们,将这个网址转为IP地址。

    已知DNS服务器的地址为8.8.8.8,我们向这个服务器发送一个DNS数据包,DNS服务器做出响应,告诉我们谷歌IP地址,于是,就能够进行通信。

    6.2 子网掩码

    拿到谷歌IP地址,我们需要判断这个IP地址和主机地址是不是在同一个子网中,就需要使用子网掩码。

    假设某子网掩码为255.255.255.0。使用子网掩码和主机IP地址做一个二进制AND运算,得到一个地址A。再使用子网掩码和谷歌IP地址也做一次运算,得到一个地址B。对比这两个地址,如果相同,就说明在同一个子网中,如果不相同,就说明不在同一个子网,需要使用“网关”来发送数据包。。

    6.3 应用层传输

    每一次HTTP请求都需要建立一次TCP连接和释放TCP连接。

    HTTP是无连接,无状态,每一次请求都作为一次新请求。

    HTTP中的GET,POST。

    GET用于请求,查询数据。POST请求用于发送数据。

    GET请求参数在URL中,POST请求的参数在请求头中,安全性略高于GET请求。

    万维网使用cookie跟踪用户,表示HTTP服务器和用户之间传递的状态信息。

    cookie工作原理。

    1 用户浏览某网站,该网站的服务器为用户产生一个唯一的表示符,为此在服务器后端数据库产生一个项目。

    2 返回给用户的HTTP响应报文添加一个set-cookie识别码,用户的浏览器将cookie保存起来,继续浏览该网站时发送的每一个HTTP请求都会有一个cookie,这个网站就知道这个用户都做了什么,为这个用户维护一个独立的列表。

    session工作原理。cookie保存在客户端上,session保存在服务器中。当服务器收到用户的cookie时,就会根据cookie找到sessionID,来查找对应的session,如果没有,则生成一个新的sessionID返回给用户。

    浏览网页使用HTTP协议,整个数据包的结构如下。

    我们假定这个长度为4960个字节,它会被嵌入到TCP的数据包之中。

    6.4 传输层传输

    TCP协议传输。TCP协议需要设置端口,接受方(Google)HTTP默认端口为80,发送方的端口是1024~65535之间的一个数。

    TCP的“标头”有20个字节,加上嵌入的HTTP数据包,有4980个字节。

    6.5 网络层传输

    TCP数据包再嵌入IP数据包,IP数据包需要设置双方的IP地址。IP数据包“标头”部分长为20字节,加上嵌入TCP数据包长度为5000字节。

    6.6 数据链路层传输

    以太网协议,IP数据包嵌入以太网数据包之中,以太网需要设置双方的MAC地址,发送方位主机的网卡地址,接收方为网关的MAC地址(根据子网掩码计算出谷歌IP地址和主机IP地址不在同一个子网),此网关的MAC地址通过ARP协议解析出。

    由于以太网数据包的最大长度为1500字节,现在IP数据包有5000字节,所以需要分割IP数据包。由于每个IP数据包的标头长度为20字节,所以分割后的四个数据包的长度为1500,1500,1500,560。

    6.7 服务器响应

    经过多个网关的转发,Google服务器收到这四个以太网数据包。根据IP标头的序号,Google将这四个数据包拼接,取出完整的TCP数据包。读出里面的“HTTP”请求,做出“HTTP”响应,再用TCP协议发回来。本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

  • 相关阅读:
    CentOS 6.5/6.6 安装mysql 5.7 最完整版教程
    linux下的find文件查找命令与grep文件内容查找命令
    为mongodb数据库增加用户名密码权限
    mac 用密钥远程登陆
    MongoDB导入导出以及数据库备份
    ubuntu12.04上的mongodb卸载
    在Ubuntu下进行MongoDB安装步骤
    slice,substr和substring的区别
    再议js的传递和深复制
    js 参数传递
  • 原文地址:https://www.cnblogs.com/feng1014/p/12454866.html
Copyright © 2011-2022 走看看