网络通信

Internet

  电脑与电脑之间是如何通信呢?我们都知道是通过网络,就好比一个人与另一个人交流是通过语言,那么问题来了,世界上这么多的语言我们如何确定语言相同呢,因此我们定义了一个国际通用语言英语

  那电脑与电脑之间同样,我们要给他定义一个通用语言,因此网络协议便诞生了。

osi七层协议

  互联网协议根据功能不同又分为osi七层协议或tcp/ip五层协议或tcp/ip四层协议  

  

  传输层:主要运行四层交换机,四层路由器

  网络层:路由器,三层交换机

  数据链路层:网桥,以太网交换机,网卡

  物理层:中继器,集线器,双绞线

tcp/ip五层模型详解

  物理层:主要基于电器特性发送高低电压 高电压对应数字1 ,低电压对应数字0

  数据链路层:我们通过物理层可以发送一组一组的电信号(相当于二进制数),但我们怎么知道什么意思呢,因此数据链路层定义了电信号的分组方式

     以太网协议 (一个统一的标准)

      1 规定一组电信号构成一个数据包,叫做‘帧’  

      2 每一帧的数据分为:报头head和数据data部分

      3 head包含:(固定18个字节) 发送者 / 源地址 (6字节); 接收者 / 目标地址 (6字节); 数据类型(6字节)

      4 data包含: (最短46字节,最长1500字节) 数据内容

    mac地址 (网卡的地址)

    广播

      有了mac地址,主机之间便可以通过广播的方式来进行通信

      

   

      

   网络层

      有了以太网,mac地址,广播的通信方式但这种方式在一个局域网内很好的运作,但所有的电脑都这样通信就会成为灾难了

      我们的网络有一个一个的局域网所组成,因此我们必须要能够区分每个局域网

      ip协议

        规定网络地址的协议叫做ip协议,由32为的二进制组成

        范围0.0.0.0 ~255.255.255.255

        一个ip地址通常写成四段十进制数,例如:127.0.0.1

        ip地址分为两大部分 

          网络部分:标示子网

          主机部分:标示主机

      子网掩码

        我们如何区分ip地址的两大部分呢,根据子网掩码,他表示子网络特征的一个参数。在形式上等同于ip地址,也是一个32位的二进制数,它的网络部分全部为1,主机部分全部为0

        例如:ip地址192.168.11.111,如果已知网络部分是前24位,主机部分为后8位,那么子网络掩码就是1111 1111. 1111 1111. 1111 1111. 0000 0000,写成十进制就是255.255.255.0

 

        通过子网掩码与ip的AND运算我们就可以计算出ip的网络部分  例如:

          172.16.10.1:10101100.00010000.00001010.000000001

          255255.255.255.0:11111111.11111111.11111111.00000000

          AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

      ip数据包

        分为head和data

          head:长度为20到60字节

          data:最长为65515字节

      arp 协议

        通信是基于mac广播的方式实现 但我们如何获取到目标的mac地址呢,就需要通过arp协议

        首先通过ip地址和子网掩码区分自己所处的子网

        

        其次 分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac

        

        三 这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac

 

    局域网与局域网之间的通信需要网关

      一个主机在局域网内通信 通过广播就可以找到,如果不在同一局域网则将ip交予网关,网关通过路由规则则可以找到相应的局域网,网关与对方网关通信,提供要找的ip,对方网关在自己局域网内广播,根据mac地址找到主机,发送信息,同样滴方式返回数据

 

  传输层

    网络层帮我们把主机联系在一起 我们如何找到主机上的应用呢 便是端口

    传输层功能:建立端口到端口的通信 (端口范围0~65535, 0~1023为系统占用端口)

    tcp协议:可靠传输 理论上没有长度限制 但一般不会超过ip数据包的长度

      

    udp协议:不可靠传输 报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

     tcp报文

    

     tcp三次握手和四次握手

    

 

  socket :帮助我们进行tcp/ip通信 是一个抽象层

    

    socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件

   

  网络通信实现

    每台主机需要:本机的ip地址,子网掩码,网关的ip地址,dns的ip地址

    获取这些要素的方式

      静态获取 (手动配置)

      动态获取 (通过dhcp获取)

        以太网头 | ip头 | udp头 | dhcp数据包

        前边的以太网头设置本机的mac地址和接收方的mac地址 接收方不知道则填入一个FF-FF-FF-FF-FF-FF

        ip头 设置发送方的ip和接收方的ip,这时对于这两者,本机都不知道。于是本机为0.0.0.0,接收方设为255.255.255.255

          udp头,设置发出方的端口和接收方的端口,这一部分是dhcp协议规定好的,发出方是68 接收方是67

        这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

 

  网络通信流程

      1. 本机获取

         本机的ip地址

         子网掩码

         网关的ip地址

         dns的ip地址

      2 打开浏览器

      3 dns协议

      

    4 HTTP请求

    5 tcp协议

    6 ip 协议

    7 以太网协议

    8 服务端响应

 

posted @ 2019-03-16 10:43  lizyn  阅读(149)  评论(1)    收藏  举报