zoukankan      html  css  js  c++  java
  • SOCKET的简单介绍

    客户端/服务器架构

    1.硬件C/S架构(打印机)

    2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器

    C/S架构与socket的关系:我们用socket就是为了完成C/S架构的开发

    OSI七层协议(*******)

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

     每层运行常见物理设备

     引子:

    须知一个完整的计算机系统是由硬件,操作系统,应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己完了(比如玩个扫雷).如果你要跟别人一起玩,那就需要上网了,什么是互联网?

    互联网的核心就是一对协议的组成,协议就是标准,比如全世界人通信的标准是英语

    如果把计算机比作人的话,互联网协议就是计算机界的英语,所有的计算机都学会了互联网协议,那所有的计算机就可以按照统一的规则标准去收发消息进行通信了,人们按照分工不同把互联网协议从逻辑上划分成了层级。

    详见网络通信原理!

    为何学习socket一定要先学习互联网协议呢?

      首先C/S架构是基于网络通信的

      然后网络的核心就是一堆网络协议,也就是协议标准。如果你想开发一款基于网络通信的软件,就必须遵循这些标准。

     socket层

     socket是什么?

    socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。所以,我么们无需深入的去理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然遵循tcp/udp标准的。

    基于TCP协议的Socket

    套接字的分类:

      基于文件类型的套接字家族:AF_UNIX(在Unix系统上,一切接文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程同时运行在同一机器上,可以通过访问同一文件系统间完成通信)

      基于网络类型的套接字家族:AF_INET(在Python中支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我们只用AF_INET)

    套接字工作流程:

    下面我们举个打电话的例子来说明一下:

    如果你要给一个朋友打电话,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了链接,就可以讲话了。等交流结束,挂电话结束此次交谈。生活中的场景就解释了这工作原理。(如果你去一家餐馆吃饭,假设那里的老板就是服务端,而你就是客户端,当你去吃饭的时候,你肯定的知道那个餐馆的地址,对于你自己来说,老板不需要你的地址。)

     注意:

    如果你在重启服务端的时候可能会遇到这样的问题:

     这个是由于你的服务端仍然存在四次挥手的time_wait状态在占用地址(如果不懂,请深入研究1.tcp三次握手,四次挥手2.syn洪水攻击3.服务器高并发情况下会有大量的time_wait状态的优化方法)

    解决上述方法:

    1 #加入一条socket配置,重用ip和端口
    2 
    3 phone=socket(AF_INET,SOCK_STREAM)
    4 phone.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加
    5 phone.bind(('127.0.0.1',8080))
    万般皆下品,唯有读书高!
  • 相关阅读:
    Python-属性描叙符协议ORM实现原理依据- __set__ __get__ __delete__
    Python-类属性查询协议-__getattr__ __getattribute__
    Python-__init__ 和 __new__区别和原理
    Python-在不在判断 in 和 in判断协议- in __contains__
    Python-求序列长度和序列长度协议-len() __len__
    Python-序列反转和序列反转协议-reversed __reversed__
    Python-序列切片原理和切片协议-[start:end:step] __getitem__
    Python-序列常用方法 + * += extend append方法区别
    Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
    Python-函数式编程-map reduce filter lambda 三元表达式 闭包
  • 原文地址:https://www.cnblogs.com/s686zhou/p/11519570.html
Copyright © 2011-2022 走看看