网络通信 订阅
网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。通信是人与人之间通过某种媒体进行的信息交流与传递。网络通信是通过网络将各个孤立的设备进行连接,通过信息交换实现人与人,人与计算机,计算机与计算机之间的通信。网络通信中最重要的就是网络通信协议。当今网络协议有很多,局域网中最常用的有三个网络协议:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和TCP/IP协议。应根据需要来选择合适的网络协议。 展开全文
网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。通信是人与人之间通过某种媒体进行的信息交流与传递。网络通信是通过网络将各个孤立的设备进行连接,通过信息交换实现人与人,人与计算机,计算机与计算机之间的通信。网络通信中最重要的就是网络通信协议。当今网络协议有很多,局域网中最常用的有三个网络协议:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和TCP/IP协议。应根据需要来选择合适的网络协议。
信息
领    域
信息科学
拼    音
wǎng luòtōng xìn
实现方式
网络通信协议
中文名
网络通信
目    的
信息交流与传递
外文名
Network Communications
网络通信名词定义
通俗地说,网络协议就是网络之间沟通、交流的桥梁,只有相同网络协议的计算机才能进行信息的沟通与交流。这就好比人与人之间交流所使用的各种语言一样,只有使用相同语言才能正常、顺 利地进行交流。从专业角度定义,网络协议是计算机在网络中实现通信时必须遵守的约定,也就是通信协议。主要是对信息传输的速率、传输代码、代码结构、传输控制步骤、出错控制等作出规定并制定出标准。
收起全文
精华内容
下载资源
问答
  • 文章目录《Netty 4核心原理》 学习总结第一章 网络通信原理1.1 网络基础架构 - C/S信息传输流程1.2 TCP/IP 五层模型详解(4层与7层是对5层模型的缩减或拆解)1.3 网络请求原理全过程(浏览器中输入url发生了什么)...

    《Netty 4核心原理》 学习总结

    第一篇 I/O基础篇

    第一章 网络通信原理

    1.1 网络基础架构 - C/S信息传输流程

    • 完成一次网络通讯的5个步骤:
      • 1.客户端将应用内存中的数据发送/copy到操作系统内存
      • 2.操作系统按照客户端指定的协议,调用网卡发送数据
      • 3.网络传输
      • 4.服务端调用系统接口,将数据从计算机内存copy到应用内存
      • 5.服务端操作系统按照发送时的协议,从网卡读取数据,并将数据copy给应用

    1.2 TCP/IP 五层模型详解(4层与7层是对5层模型的缩减或拆解)

    • 应用层
      • 用户使用的应用即应用层操作
      • 协议:DNS协议、http、FTP、SMTP、
    • 传输层
      • 建立端口与端口的通信机制,TCP/UDP协议
    • 网络层
      • 网络普及:全世界的网络是由一个个小的局域网组成,数据包只能在一个局域网(广播域)内发送,跨局域网通信需要通过路由转发
      • 作用:区分哪些计算机在同一广播域,那些不在。根据区分结构选择使用广播或路由的方式进行数据发送
      • 原理:ip与子网掩码进行与(&)操作,结果一致则证明在同一个子网络
    • 数据链路层
      • 单纯的0/1信号没有任何意义,本层的功能就是定义电信号的分组方式,多少位为一组,每组代表什么意思,
      • 例如:请求报文中head固定18个字节,data为46字节,那前18位0/1就代表head(head中包含发送者地址6字节,接收者地址6字节,数据类型6字节)
    • 物理层
      • 根据电压的高低,代表0/1信号进行传输

    1.3 网络请求原理全过程(浏览器中输入url发生了什么)

    • 1.浏览器中输入访问地址:www.baidu.com
    • 2.通过DNS域名系统服务器(基于UDP协议)获得IP地址
    • 3.想目标机器发起http请求,数据内容包含数据格式、类型、http协议相关等
    • 4.TCP协议:TCP数据包嵌入http数据包,TCP数据包需要设置访问端口
    • 5.IP协议:TCP数据包嵌入到IP数据包,IP数据包需要设置双方的IP地址
    • 6.以太网协议:ip数据包嵌入到以太网数据包,以太网数据包设置双方的MAC地址
    • 7.服务响应

    1.4 网络通信之“魂” —— socket

    • 通信的基础
      • 两个进程间想要通信的最基本前提是存在一个唯一标识,能够识别一个进程
      • 在单机中可以用PID标识一个进程,但是在网络中就不行了
      • 根据本章内容我们不难得到:ip地址能够标识唯一主机,TCP层的协议和端口能够标识唯一进程,所以使用IP+协议+端口就能唯一标识网络中的进程
    • socket通常叫做套接字,socket是应用层和传输层之间的一个抽象,他将TCP/IP层的操作抽象为简单的接口调用,实现网络中的通信。

    第二章 java I/O演进之路

    • 2.3.1 阻塞与非阻塞
      • BIO的阻塞
        • 当一个线程调用read()或write()时,当前线程会被阻塞,知道有可用数据读取或数据读取完成
      • NIO的非阻塞
        • 当一个线程通过通道(Channel)发送读取数据请求时,如果没有数据准备好,直接返回,不会阻塞当前线程,在数据接收完成,变成可读取之前,当前线程可以做其他事。非阻塞也是这样
    • 2.3.2 Selector(选择器)在NIO中的作用
      • Selector允许一个单独的线程来监听多个输入通道(Channel),即多个Channel可以注册到一个Selector上,然后selector使用一个线程来“选择”可用channle,可用channel即已经有可以处理的数据输入或已经准保好数据的通道
    • 2.3.3 AIO简介
      • 真正的AIO依赖于操作系统,这里大家需要掌握Epoll相关知识
      • 由于AIO需要操作系统按照aio_read的参数,将数据写入到内核缓存中后,再通知应用来获取数据,所以AIO体现在准保数据(接收数据)、数据拷贝都由操作系统来完成,完成后通知应用即可。

    第二篇 初始Netty

    2.1 I/O 的问世

    • 2.1.1 什么是I/O

      • 在UNIX中,一切皆文件,文件就是一串二进制流。而I/O就是对这些流的手法操作。
      • 计算机中有很多文件(流),怎么知道要操作哪个流,是由操作系统内核会创建FD(文件描述符)标识,对FD的操作就是对流的操作。
      • 创建一个Socket,通过系统函数会返回一个FD,socket的操作就变成了对流的操作。
    • 2.1.2 I/O交互流程

      • 磁盘I/O交互分两阶段:
        • 操作系统:文件数据从磁盘到内核空间(操作系统)
        • 应用程序:数据从内核空间到用户空间
      • 网络I/O包含两个阶段
        • 等待网络数据到达网卡,数据读取到内核缓冲区
        • 从内核缓冲区复制数据到用户空间
    • 2.1.3 五种I/O通信模式

      • 图:略
      • 总结与对比:整个IO过程分为两部分:发起recvfrom(接收数据)时等待数据包,数据拷贝到用户空间
        • 阻塞IO:整个流程阻塞;如果有多个请求,需要开启多个线程来支持
        • 非阻塞IO:数据拷贝阻塞;等待数据时轮训检查,可支持多请求,但请求时效性难以确定
        • 多路复用IO:等待数据、数据拷贝阻塞;等待数据阻塞是因为采用复用器selector,selector会监听注册进来的所有IO,发起recvfrom请求后会阻塞,任意请求数据准备完成,则返回处理。可支持多请求,时效性好
        • 信号驱动IO:应用启动时与系统建立SIGIO信号调用,当内核有数据包准备好时,想应用发送信号,应用再发起recvfrom请求阻塞(等待数据拷贝)获取数据
        • 异步IO:用户发起aio_readhan函数调用,参数包含:FD描述符,缓冲区指针、缓冲区大小及FD偏移量,内核接收到数据后便将数据按照入参写入缓存,完成后通知应用
    • 2.1.4 同步、异步;阻塞、非阻塞解答(不懂?接着看2.3你就明白了)

      • 同步、异步区别:请求发起方对结果的获取是主动发起还是被动通知的
        • 同步:请求发起方对结果是主动获取,eg:同步等待结果、轮训查询结果
        • 异步:请求方获取结果是被动通知的,eg:请求发起后,该干嘛干嘛,有结果了被调用方会主动发起请求或消息通知调用方
      • 阻塞与非阻塞:是对线程状态的描述,通常指IO阻塞
        • 阻塞:发起请求后,请求线程是挂起状态,只能等待结果
        • 非阻塞:发起请求后,请求时运行状态,还可以做其他事情

    2.3 从BIO到NIO的演进

    • 2.3.1 阻塞与非阻塞
      • BIO的阻塞
        • 当一个线程调用read()或write()时,当前线程会被阻塞,知道有可用数据读取或数据读取完成
      • NIO的非阻塞
        • 当一个线程通过通道(Channel)发送读取数据请求时,如果没有数据准备好,直接返回,不会阻塞当前线程,在数据接收完成,变成可读取之前,当前线程可以做其他事。非阻塞也是这样
    • 2.3.2 Selector(选择器)在NIO中的作用
      • Selector允许一个单独的线程来监听多个输入通道(Channel),即多个Channel可以注册到一个Selector上,然后selector使用一个线程来“选择”可用channle,可用channel即已经有可以处理的数据输入或已经准保好数据的通道
    • 2.3.3 AIO简介
      • 真正的AIO依赖于操作系统,这里大家需要掌握Epoll相关知识
      • 由于AIO需要操作系统按照aio_read的参数,将数据写入到内核缓存中后,再通知应用来获取数据,所以AIO体现在准保数据(接收数据)、数据拷贝都由操作系统来完成,完成后通知应用即可。

    第二篇 初始Netty


    展开全文
  • Python中的网络通信

    万次阅读 多人点赞 2018-01-22 13:47:25
    在我们平时生活工作中,常常会接触到网络通信的内容,不管你是普通的用户,还是通信行业内的开发人员,都无法避免与网络通信打交道。我在初步学习python的过程中,对python的网络通信问题做了总结,所以写下这篇...

    概述

            在我们平时生活工作中,常常会接触到网络通信的内容,不管你是普通的用户,还是通信行业内的开发人员,都无法避免与网络通信打交道。我在初步学习python的过程中,对python的网络通信问题做了总结,所以写下这篇文章作为记录,也希望能给其他初学者一些引导和启发。这篇文章的主要内容如下:

        1. 在深入讲解之前,我们先介绍一些背景信息;

        2. 介绍套接字的概念;

        3. 展示如何用Python来实现简单的网络应用程序。

    客户端/服务器架构(C/S架构)

            什么是客户端/服务器架构?总的来说,某一个特定的对象,并没有严格的客户端或者服务器之分,区分的标准在于,在实现网络通信的过程中,该对象的行为模式决定了它是客户端还是服务端。

    服务器:为一个或者多个客户端(用户)提供所需“服务"的一系列硬件或者软件。工作流程可以简单概括为:等待请求、响应并提供服务、等待下一个请求。

    客户端:因特定请求而联系服务器,接收服务并处理相关事务的一方。客户端可以持续向服务器发送请求,也可以在结束事务请求后不再发出请求。

     
    因特网上典型的C/S架构

    通信端点与套接字(socket)

            在服务器相应客户端的请求之前,双方需要进行一系列的准备工作。首先需要创建一个通信端点,服务器通过该通信端点监听客户端的请求(当然,实际的网络通信中,处理不同类型的消息会使用不同类型的通信端点,从而进行区分)。

            在网络通信中,我们常用的一种通信端点为套接字(socket),在通信开始之前,网络应用程序都需要创建套接字。

    套接字的分类

        1. 基于文件的套接字

            UNIX 套接字是我们所讲的套接字的第一个家族,并且拥有一个“家族名字”:AF_UNIX(又名 AF_LOCAL,在 POSIX1.g 标准中指定),它代表地址家族(address family):UNIX。

            包括 Python 在内的大多数受欢迎的平台都使用术语地址家族及其缩写 AF;其他比较旧的系统可能会将地址家族表示成域(domain)或协议家族(protocol family),并使用其缩写 PF 而非 AF。类似地,AF_LOCAL(在 2000~2001 年标准化)将代替 AF_UNIX。然而,考虑到后向兼容性,很多系统都同时使用二者,只是对同一个常数使用不同的别名。Python 本身仍然在使用 AF_UNIX。

        2. 面向网络的套接字

            它也有自己的家族名字 AF_INET,或者地址家族:因特网。另一个地址家族 AF_INET6 用于第 6 版因特网协议(IPv6)寻址。(还有其他的地址家族,这些要么是专业的、过时的、很少使用的,要么是仍未实现的。)在所有的地址家族之中,目前 AF_INET 是使用得最广泛的。

            总的来说,Python 只支持 AF_UNIX、AF_NETLINK、AF_TIPC 和 AF_INET 家族。下面的内容中,我们将使用 AF_INET。

    套接字地址:主机-端口对

            正如我们在现实生活中打电话一样,套接字的通信需要一些记号用作识别功能。我们打电话的时候,可以通过区号和电话号码的组合找到要呼叫的用户;在socket通信中,我们通过主机-端口对找到通信的对象。

            我们都知道,通过url或者ip地址,我们可以在互联网中找到特定的主机。在每一台主机中,不同的端口号会用作不同的通信用途。只要确定的主机和端口号,就可以在网络中唯一确定一个”通信端点“,也就是找到了所要进行通信的套接字的地址了。

            需要说明的是,有效的端口号范围是0~65535(小于1024的端口号预留给了系统)。一般来说,其余的端口号我们都可以根据实际的需要进行使用。

    面向连接的套接字与无连接的套接字

        1. 面向连接的套接字(TCP)

            也称为虚拟电路或流套接字。主要提供序列化的、可靠的、不重复的数据,它可以将消息拆分成多个片段,确保每一条片段都顺利到达目的地,然后按照顺序组合在一起,最后将完整的消息传递给正在等待的应用程序。

            实现的主要协议是传输控制协议(TCP)。创建TCP套接字时,必须使用SOCK_STREAM作为套接字类型。

        2. 无连接的套接字(UDP)

            又称为数据报类型的套接字。在传输过程中无法保证其顺序性、可靠性、重复性,事实上所发送的报文有可能最后并没有到达,也有可能存在重复的消息。

            我们之所以还继续使用数据报,这是相对于面向连接的套接字来看的。由于维护TCP连接需要大量的开销,发送数据报能够保证成本更加”低廉“,所以通常能提供更好的性能,并且可能更适合某一些类型的应用程序。

            实现的主要协议是用户数据报协议(UDP)。创建UDP套接字,必须使用SOCK_DGRAM作为套接字类型。

    Python中的网络编程

    socket()模块函数

            要创建套接字,必须使用socket.socket()函数,它的一般语法如下:

    socket(socket_family, socket_type, protocol=0)

            其中,socket_family是AF_UNIX或者AF_INET,socket_type是SOCK_STREAM或者SOCK_DGRAM,protocol通常省略,默认为0 。

            在python编程中,我们首先在文件最开始的地方引用需要用到的模块,在这里,我们使用“from socket import *",通过这样的引用,就可以向下面这样直接创建套接字:

    tcpSock = socket(AF_INET, SOCK_STREAM)
    udpSock = socket(AF_INET, SOCK_DGRAM)

            成功创建套接字后,我们就可以调用套接字对象的内置方法进行其他的操作了。具体的内容可以查看python的文档。

    TCP通信

    1. 创建TCP服务器

            以下是一个TCP服务器程序,它接受客户端发送的字符串,将其打上时间戳之后,再返回给客户端。二话不说,先贴代码:

     
    TCP时间戳服务器

    第1~4行:

            声明运行环境,导入socket模块和time.ctime()。

    第6~10行:

            指定主机地址、工作端口号、接收缓存的长度。HOST和PORT共同组成ADDR,体现的就是上面我们所说的”主机-端口对“。服务器端的HOST为空,表示它可以使用任意可用的地址。

    第12~14行:

            创建套接字 ,把套接字绑定到服务器地址,开启TCP监听。

    第16~32行:

            进入服务器的无限循环,不断等待接收客户端的连接。在第18行,我们通过accept()获取到客户端的tcpCliSock和addr,于是后续可以通过这个tcpCliSock专门处理该客户端的事务(从而与其他请求的客户端区分开来)。在第22行,使用recv()接收消息,如果消息为空,则跳出循环,关闭当前客户端的连接,然后继续等待连接;如果不为空,则把消息解析出来,添加时间戳,经过重新编码成ASCII字节后,通过send()发送回去给客户端。在这个程序里,第32行不会执行,只是用于提醒编写程序的人,在使用这一套程序时,必须要考虑到合理科学的退出方式,正确地调用close()方法。

            这里需要强调的是,由于python的编码问题,所以我们的消息在主机端时要进行解码后才能正确显示(如decode()),进行编码后才能发送到网络端去(如encode(),bytes())。不管是在服务器还是客户端,我们都需要考虑到这个情况。

    2. 创建TCP客户端

            创建客户端比服务器要简单很多。客户端与服务器建立连接,发送字符串给服务器,从服务器接收添加了时间戳的消息并打印。发送空字符串即可关闭套接字,退出这次连接。代码实例如下:

     
    TCP时间戳客户端

    第1~3行:

            声明运行环境,导入socket模块。

    第5~9行:

            指定主机地址、工作端口号、接收缓存的长度。HOST和PORT共同组成ADDR,体现的就是上面我们所说的”主机-端口对“。这里的HOST为服务器端所在主机的地址,由于我是在本地进行通信测试的,所以地址设置为127.0.0.1(localhost)。在实际网络通信的时候,根据具体的情况进行相应的修改。客户端填写的PORT必须与服务器填写的PORT对应才能正常通信。

    第11~12行:

            创建套接字 ,主动调用并通过connect()连接到服务器。

    第14~25行:

            进行无限循环:客户端填写要发送的消息,发送后等待接收服务器的回复,接收到结果后将结果打印。当客户端输入的内容为空,或者服务器断开连接、客户端接收失败时,即退出循环,调用close()函数,关闭客户端的套接字。

            同样的,发送消息前,我们需要对数据进行编码,接收的结果,也需要进行解码后才能正常显示出来。如果我们想要将代码改成相应的ipv6的形式,我们只需要把HOST改成“::1”,sock_family改成AF_INET6即可。

    UDP通信

    1. 创建UDP服务器

            UDP服务器实现的功能与TCP基本一致,主要的区别在于UDP服务器不是面向连接的,所以只需要等待客户端的请求,回复消息即可,不需要将成功连接的客户端“转换”到一个独立的套接字的操作。示例代码如下:

     
    UDP时间戳服务器

    第1~4行:

            声明运行环境,导入socket模块和time.ctime()。

    第6~10行:

            与TCP相同,指定主机地址、工作端口号、接收缓存的长度。HOST和PORT共同组成ADDR,体现的就是上面我们所说的”主机-端口对“。服务器端的HOST为127.0.0.1,表示它使用本地主机地址。

    第12~13行:

            创建套接字 ,把套接字绑定到服务器地址,绑定后直接等待接收,不需要监听。

    第15~24行:

            进入服务器的无限循环,不断等待接收客户端的连接。在第17行,使用recvfrom()接收消息,同时获取通信客户端的地址对信息。紧接着把消息解析出来,添加时间戳,经过重新编码成ASCII字节后,通过sendto()发送回去给客户端,此时由于服务器没有与客户端维护连接,所以要指定发送的地址对信息。同样的,在这个程序里,第24行不会执行,只是用于提醒编写程序的人,在使用这一套程序时,必须要考虑到合理科学的退出方式,正确地调用close()方法。

    2. 创建UDP客户端

            原理非常简单,上面都有提及到,就不作详细说明了。直接贴代码:

     
    UDP时间戳客户端

    关于服务器退出的问题

            最后再提以下服务器退出的问题。在开发中,一种相对比较友好的退出方式是:将服务器的while部分放在一个try-except的try子句中,并监控EOFError和KeyboardInterrupt异常,这样就可以在except或者finally子句中关闭服务器的套接字。


    参考文献:《Python核心编程(第三版)》[美] Wesley Chun 著,孙波翔、李斌、李晗 译。

    展开全文
  • 网络通信原理

    万次阅读 多人点赞 2019-06-02 17:13:06
    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序...网络通信原理 2.1 互联网的本质就是一系列的网络协议 一台硬件设备有了操作系统,然后装上软件你就可以...

    一.操作系统基础

        操作系统:(Operating System,简称OS)是管理和控制计算机硬件软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。

    注:计算机(硬件)->os->应用软件

     

    二.网络通信原理

    2.1 互联网的本质就是一系列的网络协议

    一台硬件设备有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用。像这样,每个人都拥有一台自己的机器,然而彼此孤立。

    如何能让大家一起玩耍呢?------通过internet

    然而internet为何物呢?

    其实两台计算机之间通信两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区有不同的方言,为了全中国人都可以听懂,大家统一讲普通话)。

    普通话属于中国国内人与人之间通信的标准,那如果是两个国家的人交流呢?

    问题是,你不可能要求一个人/计算机掌握全世界的语言/标准,于是有了世界统一的通信标准:英语。

     

    结论英语成为世界上所有人通信统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是

    一系列统一的标准,这些标准称之为互联网协议互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite)。

    互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准

     

    2.2 osi七层协议

    互联网协议按照功能不同分为osi七层tcp/ip五层tcp/ip四层

     

    每层运行常见物理设备

     

    2.3 tcp/ip五层模型讲解

    我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理

    首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解。每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件。

    2.3.1 物理层

    物理层由来:上面提到,孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网。

    物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。利用光缆、电缆、双绞线、无线电波等把计算机连接起来。

    2.3.2 数据链路层

    数据链路层由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思。

    数据链路层的功能定义了电信号的分组方式

    以太网协议:

    早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet

    ethernet规定:

    • 一组电信号构成一个数据包,叫做‘帧’。
    • 每一数据帧分成:报头head数据data两部分。
           head                       data                             

     

     

    head包含:(固定18个字节)

    • 发送者/源地址,6个字节。
    • 接收者/目标地址,6个字节。
    • 数据类型,6个字节。

    data包含:(最短46字节,最长1500字节)

    • 数据包的具体内容

    head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

     

    mac地址:

    head中包含的源和目标地址由来:ethernet规定接入internet设备必须具备网卡,发送端和接收端的地址便是指网卡的地址即mac地址。

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

     

    广播:

    有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址

    ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼

     

    2.3.3 网络层

    网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难。

    上图结论:必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送如果不是就采用路由的方式(向不同广播域/子网分发数据包)mac地址是无法区分的,它只跟厂商有关

    网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

    IP协议:

    • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示。
    • 范围0.0.0.0-255.255.255.255。
    • 一个ip地址通常写成四段十进制数,例:172.16.10.1。

    ip地址分成两部分

    • 网络部分:标识子网
    • 主机部分:标识主机

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

    例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网。

    子网掩码

    所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

     

    知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。

     

    比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,

    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

     

    172.16.10.2:10101100.00010000.00001010.000000010

    255255.255.255.0:11111111.11111111.11111111.00000000

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

     

    结果都是172.16.10.0,因此它们在同一个子网络

    总结一下IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络

     

    ip数据包

    ip数据包也分为headdata部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分

    head:长度为20到60字节

    data:最长为65,515字节。

    而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

     

    以太网头               ip 头                                    ip数据                                

     

     

     

    ARP协议

    arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议。

    arp协议功能广播的方式发送数据包,获取目标主机的mac地址。

     

    协议工作方式:每台主机ip都是已知的

    例如:主机172.16.10.10/24访问172.16.10.11/24

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

    场景数据包地址 
    同一子网目标主机mac,目标主机ip 
    不同子网网关mac,目标主机ip 

     

     

     

     

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

     源mac目标mac源ip目标ip数据部分
    发送端主机发送端macFF:FF:FF:FF:FF:FF172.16.10.10/24172.16.10.11/24数据

     

     

     

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

     

    2.3.4 传输层

    传输层的由来:网络层的ip帮我们区分子网以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。

    传输层功能建立端口到端口的通信

    补充:端口范围0-65535,0-1023为系统占用端口。

     

    tcp协议:

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

    以太网头ip 头              tcp头              数据                                                    

     

     

    udp协议:

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

    以太网头ip头                     udp头                           数据                                           

     

     

    tcp报文

    tcp三次握手和四次挥手

     

    2.3.5 应用层

    应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 。

    应用层功能规定应用程序的数据格式

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

     

     

    2.3.6 socket

            我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程

    能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信

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

     

    三.网络通信实现

    想实现网络通信每台主机需具备四要素:

    • 本机的IP地址
    • 子网掩码
    • 网关的IP地址
    • DNS的IP地址

    获取这四要素分两种方式:

    • 1.静态获取:即手动配置
    • 2.动态获取:通过dhcp获取
    以太网头ip头udp头dhcp数据包

     

     

    (1)最前面的”以太网标头”,设置发出方(本机)的MAC地址接收方(DHCP服务器)的MAC地址前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。

     

    (2)后面的”IP标头”,设置发出方的IP地址接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0接收方的IP地址设为255.255.255.255

     

    (3)最后的”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部分

    新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。

     

    四.网络通信流程

    1.本机获取

    • 本机的IP地址:192.168.1.100
    • 子网掩码:255.255.255.0
    • 网关的IP地址:192.168.1.1
    • DNS的IP地址:8.8.8.8

    2.打开浏览器,想要访问Google,在地址栏输入了网址:www.google.com。

    3.dns协议(基于udp协议)

     

    13台根dns:

    A.root-servers.net198.41.0.4美国
    B.root-servers.net192.228.79.201美国(另支持IPv6
    C.root-servers.net192.33.4.12法国
    D.root-servers.net128.8.10.90美国
    E.root-servers.net192.203.230.10美国
    F.root-servers.net192.5.5.241美国(另支持IPv6
    G.root-servers.net192.112.36.4美国
    H.root-servers.net128.63.2.53美国(另支持IPv6
    I.root-servers.net192.36.148.17瑞典
    J.root-servers.net192.58.128.30美国
    K.root-servers.net193.0.14.129英国(另支持IPv6)
    L.root-servers.net198.32.64.12美国
    M.root-servers.net202.12.27.33日本(另支持IPv6)

     

    域名定义:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html

    顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是                    以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。

    二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
    一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级

     

    4.HTTP部分的内容,类似于下面这样:

    GET / HTTP/1.1
    Host: www.google.com
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: zh-CN,zh;q=0.8
    Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
    Cookie: … …

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

     

    5 TCP协议

    TCP数据包需要设置端口接收方(Google)的HTTP端口默认是80发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

    TCP数据包标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节

     

    6 IP协议

    然后,TCP数据包再嵌入IP数据包IP数据包需要设置双方的IP地址,这是已知的,发送方192.168.1.100(本机接收方172.194.72.105(Google

    IP数据包标头长度20字节,加上嵌入的TCP数据包,总长度变为5000字节

     

    7 以太网协议

    最后,IP数据包嵌入以太网数据包以太网数据包需要设置双方的MAC地址发送方本机的网卡MAC地址接收方网关192.168.1.1的MAC地址(通过ARP协议得到)

    以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560

     

    8 服务器端响应

    经过多个网关的转发Google的服务器172.194.72.105收到了这四个以太网数据包

    根据IP标头的序号Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”接着做出”HTTP响应”,再用TCP协议发回来。

    本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

     

     

     

    展开全文
  • 网络通信基础知识 网络通信的发展历程 (1)单机阶段 (2)局域网阶段 (3)广域网internet阶段(很多个局域网之间通信) (4)移动互联网阶段 (5)物联网阶段 三大网络 (1)电信网(2)电视网络(3)...

    网络通信基础知识
    网络通信的发展历程
    (1)单机阶段
    (2)局域网阶段
    (3)广域网internet阶段(很多个局域网之间通信)
    (4)移动互联网阶段
    (5)物联网阶段
    三大网络
    (1)电信网(2)电视网络(3)互联网

    网络通信基础知识2—网卡、集线器、交换机
    网络通信基础知识3—路由器、DNS
    网络通信基础知识4—DHCP、NAT
    网络通信基础知识5—IP地址详解

    展开全文
  • java网络通信

    千次阅读 2018-08-03 16:58:12
    java已经将网络程序所需要的东西封装成不同的类,只要创建这些类的对象,使用相应的方法,就可以实现网络通信。 服务器-----------网络-----------客户机。服务器是指提供信息的计算机或程序,客户机是指请求信息的...
  • 网络通信过程

    千次阅读 2019-04-18 17:40:48
    网络通信过程 1、2台电脑 如果两台电脑之间通过⽹线连接是可以直接通信的,但是需要提前 设置好ip地址以及⽹络掩码 2、使用集线器组成一个网络 广播的形式发送 3、使用交换机组成一个网络 当需要⼴播的时候...
  • 当我们只想测试手机APP网络通信的时候,希望不受本机网络报文的影响,可以采用以下方法:
  • 网络通信技术基础

    千次阅读 2018-07-21 12:39:38
    在我们日常使用的各种各样的软件,都涉及到一项很关键的技术——网络通信技术。今天我们就从软件开发者的角度来探究一下J网络通信技术。 一、网络通信技术 当我们用在点击下QQ对话框的“发送”按键时,相应的好友...
  • 网络通信模型

    千次阅读 2019-06-02 23:31:00
    网络通信模型 一,起源 由于计算机网络的飞速发展,各大产商根据自己的协议生产不同的硬件和原件,为了实现不同的网络之间的互相通信,iso和ieee相继提出了osi参考模型,和tcp、ip模型 二,osi...
  • 网络通信框架GRPC的C++开发,本课程实现了优化的编译环境配置,能够极为方便的将GRPC引入到自己的项目中。
  • 13、python网络编程之网络通信协议

    千次阅读 2021-02-13 15:15:06
    python网络编程之网络通信协议 一、C/S与B/S架构 B/S架构 B/S架构中省去了客户端的开发,是基于浏览器(Browser)与服务端完成数据的通信 二、网络通信 什么是网络 网络是用物理链路将各个孤立的工作站或主机相连在...
  • 计算机网络通信概述题库

    万次阅读 多人点赞 2018-07-30 23:17:19
    1、以下对单工通信说明正确的是: A、 允许在两个方向上同时传输 B、 任何时候只允许在一个方向上传输C、 任何时候只允许按照一个方向传输 D、 允许双方交替地向对方传输信息2、考虑语音信道带宽为1000赫兹,信噪比...
  • 网络通信原理简述

    千次阅读 2017-04-01 12:20:39
    网络通信原理简述 背景: 主机A连接在路由器1上。主机A要与主机B通信(主机A一定是知道主机B的ip地址的,在网络层IP地址是主机的唯一标示)。 注意:即使是在同一个局域网主机A,B也是通过路由器连接的,并没有直接...
  • 网络通信基础知识总结

    万次阅读 多人点赞 2019-03-22 17:52:33
    在具有层次化结构的网络通信过程中,上层协议传递给下层协议的数据单元(报文)都可以称之为下一层协议的载荷数据。 报文 报文是网络交换与传输的数据单元,它具有一定的内在格式,并通常都...
  • 基站网络通信

    千次阅读 多人点赞 2020-06-04 09:16:01
    基站工作原理:基站的主要功能就是提供无线覆盖,即实现有线通信网络与无线终端之间的无线信号传输。 什么是通信? 简单来说,通信就是传递信息。我把我的信息发给你,你把你的信息发给我,这就是通信。 拓扑 按照...
  • 什么是网络通信协议?

    千次阅读 2020-08-11 15:53:51
    网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的...
  • 网络通信,UDP.TCP协议

    千次阅读 多人点赞 2020-11-17 20:15:07
    网络通信,UDP.TCP协议 网络通信 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息...
  • 基于LABVIEW的TCP/IP网络通信程序

    热门讨论 2014-05-17 15:00:13
    基于LABVIEW的TCP/IP网络通信程序,包括简单的点对点通信,交互式通信,和点对多通信实例
  • 谈谈对网络通信的理解

    千次阅读 2018-04-09 11:16:29
    网络通信三要素: A:IP地址 计算机在网络中的唯一标识。 现在使用的是:"点分十进制" B:端口 应用程序的的标记。 C:协议 通信的规则。网络通信其实就是Socket间的通信,Socket(套接字)就是为网络服务...
  • Docker容器间的网络通信

    千次阅读 2017-10-15 17:35:09
    Docker Network简单记录下容器间的网络通信。Docker Network 网络驱动 BRIDGE 容器与外部的网络通信前提 宿主机与容器的端口映射 容器间的网络通信 使用自己创建的NETWORK 不同NETWORK间的容器通信 容器DNS 默认...
  • libevent、curl进行网络通信的时候函数 int result = client.Get(url, res)返回值为18,网络通信不成功。 经查询:CURLE_PARTIAL_FILE Transferred a partial file 18 文件传输不完整。抓包看请求的回复包内容少于...
  •   Android完全支持JDK本身的TCP、UDP网络通信API,也可使用ServerSocket、Socket来建立基于TCP/IP协议的网络通信,还可使用DatagramSocket、Datagrampacket、MulticastSocket来建立基于UDP协议的网络通信。...
  •  本文是一篇科普文章,主要是帮助大家理解清楚网络通信底层的根本原因。 一、网络通信模型   为了更好地促进互联网的研究和发展,国际标准化组织ISO在1985 年指定了网络互联模型。OSI 参考模型(Open System ...
  • Docker多主机网络通信详解

    千次阅读 2016-02-12 15:54:56
    Docker多主机网络通信详解作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszsDocker支持多主机网络通信功能,可以通过命令行建立多主机通信网络。本文使用Docker ...
  • 【Unity3D入门教程】网络通信

    万次阅读 2017-01-10 18:32:54
    Unity之前都是使用RPC来进行网络通信的,后来在Unity5中有了UNET,使得开发多人在线网络游戏变得非常简单。本文将会介绍使用新网络模块UNET开发游戏的简单方法。
  • 17.Swift 原生网络通信

    千次阅读 2015-10-11 23:18:13
    17.Swift 原生网络通信Swift 原生网络通信 sendSynchronousRequest sendAsynchronousRequest NSURLSession IOS9.0后,就打算废弃NSURLConnection,主推NSURLSessionsendSynchronousRequest同步Request ...
  • docker容器网络通信原理分析

    万次阅读 2016-04-25 20:35:22
    自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信。而本文将分别针对这两方面,对容器...
  • 串口通信+TCP网络通信简单综合实例

    万次阅读 2017-07-21 18:43:35
    串口通信+TCP网络通信简单综合实例 串口通信加上TCP网络通信之后就可以简单实现本地设备的联网功能了,哈哈,话不多说,直接上代码。 总体上还是C/S模式,但是这个客户端加上了对串口的操作而已,思路很简单,只...
  • 网络通信基础知识简介

    万次阅读 2018-05-15 13:19:27
    一、网络通信的传输媒介(1)无线通信:WIFI、蓝牙、zigbee、4G/5G/GPRS等;(2)有线通信:双绞线、同轴电缆、光纤等。 二、路由器(1)路由器是局域网和外部网络的通信的出入口;(2)路由器将整个internet划分成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,089,735
精华内容 435,894
关键字:

网络通信