设为首页 加入收藏

TOP

网络理论基础
2019-05-24 18:07:47 】 浏览:43
Tags:网络 理论 基础

什么是网络

网络就是一种辅助双方或者多方能够连接在一起的工具

使用网络的目的

  1. 就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方
  2. 为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能
    例如:QQ之间发送消息

IP地址

IP地址用来 标记网络上的一台电脑 比如 192.168.1.1 ;在本地局域网上是唯一的

  • 测试网络是否正常 => ping
  • 查看ip地址(ubuntu) => ifconfig
IP分类

IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基础
的协议。
IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。IPv6是IETF(互联网工程任
务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议,号称可以为
全世界的每一粒沙子编上一个网址 。
由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络
地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。

每一个 IP 地址包括两部分:网络地址和主机地址
跟多分类请大家查资料

端口号

  • 端口
    如果一个程序需要收发网络数据,那么就需要有这样的端口。端口就好一个房子(进程)的门,是出入这间房子的必经之路。在linux系统中,端口可以有65536(2的16次方)个之多。 既然有这么多,操作系统为了统一管理,所以进行了编号,这就是端口号

端口是通过端口号来标记的,端口号只有整数,范围是从0到65535
端口号不是随意使用的,而是按照一定的规定进行分配。这里只介绍一下知名端口和动态端口

  • 知名端口号
    知名端口是众所周知的端口号,范围从0到1023

    80端口分配给HTTP服务 443 端口分配给HTTPS服务 ...

    可以理解为,一些常用的功能使用的号码是估计的,好比 电话号码110、10086、10010一样。一般情况下,如果一个程序需要使用知名端口的需要有root权限
  • 动态端口
    动态端口的范围是从1024到65535。动态分配是指当一个系统程序或应用程序程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号
    中分配一个供它使用。

IP地址标识网络中的一台主机,端口号标识这台主机上的一个服务 ( 应用程序 )

不同电脑上的进程之间如何通信

网络链接通讯的本质其实就是不同电脑上的进程之间的通讯

先来理解几个名词

通讯: 运行的程序之间的数据共享
进程: 每个正在运行的程序和占用的资源被称为进程

其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用进程(进程)。

这样利用“ip地址,协议,端口”就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互

Socket

  • socket(简称 套接字) 是进程间通信的一种方式
    • 它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、收发 email 等等
    • socket本质是编程接口(API),对TCP/IP的封装 ((TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口))

自己手鲁发起一个网络通信

import socket

def main():
    
    # 创建套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 绑定ip+port
    # 获取本地主机名
    host = socket.gethostname()
    port = 60000
    # 绑定端口号
    udp_socket.bind((host, port))
    
    # 发数据 接收数据的ip地址 端口号
    dest_addr = ('192.168.43.156',8080)
    # 从键盘获取数据
    strInput = input('请输入发送的数据')
    while :
        if strInput == 'q':
            break
    # 发送数据到指定的程序里面
    # 第一个参数是发送的数据 第二个参数是ip+port
    # sendto 是udp 的发送方法
    udp_socket.sendto(strInput.encode('utf-8'),dest_addr)
    
    #关闭套接字
    udp_socket.close()

if __name__ == "__main__":
    main()

还需一个网络调试工具
windows 请自己百度
ubuntu下载地址

如果有什么问题请大家在下方评论,我会改正的!—_—!

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python * args和** kwargs的用法 下一篇Map/Reduce

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目