python网络编程学习笔记(1)--网络编程背景

一、客户端/服务器架构

什么是客户端/服务器架构?它既是一个软件还是硬件系统。服务器就是一系列硬件或者软件,为一个或者多个客户端提供服务。客户端因特定的请求而联系服务器,并发送必要的数据,然后等待服务器的回应,最后完成或者故障的原因。服务器无限地运行下去,并不断处理请求。

客户端/服务器架构包括硬件客户端/服务器软件客户端/服务器打印(打印机)服务器就是硬件服务器的一个例子。硬件服务器的另一个例子就是文件服务器。而对于软件客户端/服务器我们最熟知的就是Web服务器,其实就是数据库服务器。这些都是java web开发中感触最深的。还有一类是窗体服务器。

二、套接字:通信端点

2.1套接字

套接字式计算机网络数据结构。在任何类型的通信开始之前,网络应用程序必须创建套接字。套接字是加利福利亚大学的伯克利版本UNIX的一部分,所以UNIX套接字是套接字的第一个家族,AF_UNIX。套接字最初是为了同一主机上的应用程序所创建,使得主机上运行的两个程序可以进行通信,我们把这种通信成为进程间通信。有两种类型的套接字:基于文件的和面向网络的。

因为两个进程运行在同一台计算机上,所以这些套接字都是基于文件的,这就意味着文件系统支持它们的底层基础结构。因为文件系统是一个运行在同一主机上的多个进程之间的共享常量。

第二类型的套接字是基于网络的,它的家族名字叫AF_INET,目前应用最广。

套接字的AF_NETLINK家族允许使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC。

TIPC允许计算机集群之中的机器相互通信,而无需使用基于IP的寻址方式。Python对TIPC的支持就是AF_TIPC家族。

总的来说,python只支持AF_UNIX、AF_NETLINK、AF_TIPC和AF_INET家族。

2.2套接字地址:主机-端口号

如果一个套接字像一个电话插孔--允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码的组合。

有效的端口号范围0~65535,其中小于1024的端口号预留给了系统。

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

1.面向连接的套接字

面向连接的套接字,通信之前必须先建立一个连接。面向连接的通信提供序列化的、可靠的和不重复数据支付,而没有记录边界。这基本上意味着每条消息可以拆分成很多个片段,并且每一个消息片段都确保能够到达目的地,然后将他们按顺序组合起来,最后将完整消息传递给正在等待的应用程序。

实现这种连接类型的主要协议时传输控制协议(TCP)。一般使用SOCK_STREAM来创建TCP套接字。因为这些套接字(AF_INET)的网络版本使用因特网(IP)来搜索网络中的主机,所以整个系统通常结合这两种协议(TCP和IP)来进行。

2.无连接的套接字

与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。这意味着,在通信开始前并不需要建立连接。此时,在数据传输过程中并无法保持它的顺序性、可靠性或者重复性。然而,数据报确实保存了记录边界,这就意味着消息是以整体发送的,而不是首先分成多个片段。

虽然数据报不能以发送顺序到达,可能存在重复的消息,但是数据报不需要开销,成本较之TCP低廉

实现这种连接类型的主要协议时UDP。为了创建UDP套接字,必须使用SOCK_DGRAM作为套接字类型。因为使用UDP协议也要使用因特网协议来寻找主机,所以这个系统也有一个更加普通的名字UDP/IP。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值