主要内容:

  一.  C/S架构

  二. 网络通信的相关名词

  三. socket编程

 

一. C/S架构和B\S架构概述

1. C/S架构: Client/Server(客户端/服务端)架构
描述: C/S架构--需要服务端部署;用户单独安装客户端,客户端软件升级,服务端要为每个用户服务.可以不联网使用.
  客户端(client): 享受服务端提供的服务
  服务端(server): 给客户端提供服务
    硬件C/S架构: 打印机
    软件C/S架构: 聊天软件(如:QQ,微信),视频软件(如:优酷视频,暴风影音)

2. B\S架构: Browser/Server(浏览器/服务器)架构
描述: 需要服务端部署;浏览器访问;服务端负责全部逻辑;升级方便;必须联网使用.

CS/BS本质相同,都是客户端与服务端通信,只是表现为不同的形式,BS架构的软件客户端固定是浏览器.



二. 网络通信的相关名词

1. 集线器(HUB): HUB是一个多端口的转发器.主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上.将咱们所有的插上集线器的电脑连通起来.

2. 交换机(Switch): 升级版集线器.它可以为接入交换机的任意两个网络节点提供独享的电信号通路.

3. 网卡: 作用是接收电信号,有网络接口(用于插网线)
     网卡是局域网中连接计算机和传输介质的接口,能实现与局域网传输介质之间的物理连接和电信号匹配.

4. MAC地址(物理地址): MAC地址又称为物理地址,硬件地址,用来定义网络设备的位置.
          MAC地址是网卡决定的,固定的,全球唯一的,相当于每台电脑的上网身份证.
            物理地址: ‎20-47-47-68-EE-DF --> 16进制的6个数表示,前三位厂商编号,后三位生产流水号

5. 多播\单播: 多播指一点对多点的通信,在IPv6中把广播看作是多播的一个特殊例子. 单播指客户端与服务器之间的点到点连接.

6. 广播风暴: 缺点是 -->不安全,容易拥堵网络.

7. IP地址: 英文是Internet Protocol Address, 指互联网协议地址. IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异.
       作用: 划分广播域
       分类:
      IPv4: 4个点份十进制 (目前使用较多)
      IPv6: 6个冒号分十六进制

8. DHCP协议: 两个作用
     (1)给内部网络或网络服务供应商自动分配IP地址.
     (2)给用户或者内部网络管理员作为对所有计算机作中央管理的手段.

9. 子网掩码: 计算是否属于同一网段,属于同一网段的,我们称为属于同一子网.
      子网掩码不能单独存在,它必须结合IP地址一起使用.子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分.

10. DNS服务器: 具有域名解析的作用,即把域名解析为IP地址. 默认跟着网关走. 记录着所有的域名和它网站对应的那台服务器的IP地址的对应关系,理解为一个字典.


11. 路由器: 是连接因特网中各局域网,广域网的设备,它会根据信道的情况自动选择和设定路由,以最优路径,按前后顺序发送信号.

12. 路由协议: 用于确定到达路径,计算最优路径.

13. 网关: 是一个网络连接到另一个网络的"关口",也就是网络关卡. 它是公网IP,也可以说是路由器的IP地址.

14. NAT技术: 网络地址转换,将局域网的IP地址转换为公网(网关)的IP地址

15. 局域网: 也称内网

16. 端口:标识电脑上某个应用程序. 通过IP地址+端口-->我们就能唯一确定一台电脑上的某个应用程序.

如果把IP地址比作一间房子,端口就是出入这间房子的门.真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:2^16)个之多!

端口是通过端口号来标记的,端口号只有整数,范围是从 0 到 65535(2^16-1). 其中0-1024是电脑内部服务使用的,不要去占用. 一般来说,自己编程时不去占用8000以内的数值.

17. 端口映射: 访问网站时自动携带一个端口号,用于直接访问服务端.

 

三. socket(这里是参考文档)

1. 概述:
socket通常也承做"套接字", 用于描述IP地址和端口, 是一个通信链的句柄, 应用程序通常通过"套接字"向网络发出请求或者应答网络请求.
socket起源于Unix, 而Unix/Linux基本哲学之一就是"一切皆文件", 对于文件用[打开][读写][关闭]模式来操作. socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO,打开,关闭)

2. socket和file的区别:
  file模块是针对某个指定文件进行[打开][读写][关闭]
  socket模块是针对 服务器端 和 客户端Socket进行[打开][读写][关闭]

3. 套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的:
(1)基于文件类型的套接字家族
  套接字家族的名字: AF_UNIX
  unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

(2)基于网络类型的套接字家族
  套接字家族的名字: AF_INET
  (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我们只使用AF_INET)

4. TCP与UDP区别(很重要!!)
tcp协议:面向连接,消息可靠,相对udp来讲,传输速度慢,消息是面向流的,无消息保护边界(0).
udp协议:面向无连接,消息不可靠,传输速度快,消息是面向包的,有消息保护边界.

 

5. TCP协议下端口重用问题
当socket绑定IP地址和端口时可能出现以下异常:
OSError: [Errno 48] Address already in use

我们可以采用端口重用的方法解决这个问题:

# 加入一条socket配置,重用ip和端口,代码如下:
import socket
from socket import SOL_SOCKET,SO_REUSEADDR
sk = socket.socket()
sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)  # 在bind前加上这一行代码,表示允许地址重用
sk.bind(('127.0.0.1',8898))  # 把地址绑定到套接字
sk.listen()                  # 监听链接
conn,addr = sk.accept()      # 接受客户端链接
ret = conn.recv(1024)        # 接收客户端信息
print(ret)                   # 打印客户端信息
conn.send(b'hi')             # 向客户端发送信息
conn.close()                 # 关闭客户端套接字
sk.close()                   # 关闭服务器套接字(可选)
端口重用

相关文章:

  • 2021-06-26
  • 2022-12-23
  • 2021-11-03
  • 2021-05-16
  • 2022-12-23
  • 2020-10-16
  • 2021-12-10
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-14
  • 2022-12-23
  • 2021-11-27
  • 2021-04-11
  • 2021-05-17
相关资源
相似解决方案