网络 ---》

OSI 七层模型
 应用层 : 提供用户服务,具体内容由特定程序规定
 表示层 : 提供数据的压缩解压和加密等
 会话层 : 建立程序级的链接,决定使用什么样的传输服务
 传输层 : 提供合适的通信服务,流量控制
 网络层 : 路由选择,网络互联,分组传输
 链路层 : 提供链路交换,具体消息发送
 物理层 : 物理硬件,接口
OSI 模型的优点 : 将功能分开,降低网络传输中的耦合度,
               每一部分完成自己的功能,开发更加清晰
高内聚 : 使模块功能单一,不混杂
低耦合 : 模块之间尽量减少相互之间的影响 
四层,五层模型
四层:
应用层 : 应用层 表示层 会话层 
传输层 : 传输层
网络层 : 网络层
物理链路层 : 链路层 物理层
五层模型(TCP/IP模型):
应用层 : 应用层 表示层 会话层 
传输层 : 传输层
网络层 : 网络层
链路层 : 链路层 
物理层 : 物理层
-  
要求: 能够顺序说出七层模型,知道如何对应四层五层模型,
      简单理解每一层的功能,能理解数据传输过程
什么是协议
网络协议: 网络通信中,各方必须遵守的规定,包括建立什么链接,
         如何识别,消息结构等
应用层相关协议:TFTP HTTP SMTP DNS
传输层相关协议: TCP UDP
网络层相关协议: IP

网络概念
主机 :计算机的名称 localhost(本机)
获取主机名
In [2]: socket.gethostname()
Out[2]: 'tedu'
通过主机名解析IP
In [3]: socket.gethostbyname('tedu')
Out[3]: '127.0.1.1'
In [4]: socket.gethostbyname('localhost')
Out[4]: '127.0.0.1'
IP:
    IPv4 : 192.168.1.2 
    点分十进制: 三个点分为4个部分 : 0--255
    IPv6 : ip地址更多
    127.0.0.1 : 本机测试ip
    0.0.0.0 : 局域网可用ip
    192.168.1.0 : 表示网段
    192.168.1.1 : 网关
    192.168.1.255: 广播地址
ifconfig   ping
socket.gethostbyaddr('www.baidu.com')
('127.0.0.1',[],['119.75.216.20'])
     主机名   别名    IP
将IP地址转换为二进制
In [3]: socket.inet_aton('192.168.1.2')
Out[3]: b'\xc0\xa8\x01\x02'
将二进制转换为点分十进制
In [4]: socket.inet_ntoa(b'\xc0\xa8\x01\x02')
Out[4]: '192.168.1.2'
inet_pton     inet_ntop  功能同上,只是第一个参数用
socket.AF_IENT表示IPv4  socket.AF_INET6--->IPv6
端口号:
端口号是地址的组成部分,在一个系统中区分应用层程序
1--65535 : 1--255 众所周知的端口 256--1023 系统端口
推荐使用 >10000
获取一个应用的端口
In [16]: socket.getservbyname('mysql')
Out[16]: 3306

子网掩码(和IP配合过滤网段) dns
dns: 域名解析
字节序:
   大端序 : 高字节存在低地址位
        小端序 : 低字节存在低地址位
网络字节序  : 将字节序发送方式统一
传输层服务:
    tcp协议:
        面向连接 ---> 可靠的数据传输
        三次握手 
            1,客户端向服务器发起连接请求(问是否可以连接)
            2,服务器接收到请求后进行确认 (允许连接) 返回报文
            3,客户端收到许可,建立连接
        四次挥手
            1,主动方发送报文告知被动方要断开连接
            2,被动方返回报文,告知受到请求,准备断开
            3,被动方发送报文给主动方告知准备就绪可以断开
            4,主动方发送数据报确定断开
            可靠的传输 : 无失序 无差错 无丢失 无重复
            应用情况: 适用于传输内容较大,网络情况好,需要提供准确传输的情况
                比如: 聊天信息,文件传输,邮件
    udp协议
        面向无连接的服务 ---> 不可靠
        发送时由发送端自主设计,不考虑接收端
        适用情况 : 网络较差,对传输准确性要求低,广播组播
            比如: 视频会议 广播数据 
套接字编程:
    套接字:进行网络通信的一种手段 socket
    流式套接字(SOCK_STREAM) : 传输层基于tcp协议进行通信
    数据报套接字(SOCK_DGRAM) : 传输层基于udp协议进行通信
    原始套接字(SOCK_RAW) : 访问底层协议的套接字
TCP服务端
from socket import *
1,创建套接字
    socket(socket_family=AF_INET,
        socket_type=SOCK_STREAM,
        proto = 0)
    功能: 创建套接字
    参数: socket_family: 选择地址族种类 AF_INET (UNIX)
         socket_type : 套接字类型 SOCK_STREAM 流式
                                 SOCK_DGRAM 数据报
         proto : 自协议类型默认为0
    返回值: 返回创建的套接字
2,绑定 IP 和端口号
    sockfd.bind()
        功能:绑定IP和端口
        参数:是一个元组,第一项是字符串形式的IP
                        第二项是端口
            ('192.168.1.2',8888)
3,让套接字具有监听功能
    scokfd.listen(n)
        功能:使套接字变为监听套接字,同时创建监听队列
        参数:n 监听队列大小
4,等待客户端连接
    sockfd.accept()
    功能:阻塞等待客户端连接
    返回值:第一个:返回一个新的套接字用来和客户端通信
               第二个:返回连接的客户端的地址
5,消息的收发
    sockfd.recv (buffersize)
        功能:接收消息
        参数:一次接收消息的大小 单位(字节)
        返回值:接收到的内容
    sockfd.send (data)
        功能:发送消息
        参数:发送的内容   (byte)
        返回值:发送了多少个字节
        * 当没有接收端的时候send
6,关闭套接字
    close()
    功能:关闭套接字
tcp客户端流程
1,创建套接字
2,发起连接请求
connect()
    功能:发起连接
    参数:一个元组 第一个元素 :服务器的IP
                第二个元素 :服务器的port
connect()
    功能:发起连接
    参数:一个元组 第一个元素 :服务器的IP
                第二个元素 :服务器的port
3,收发消息
4,关闭套接字
**** 如何让一个服务器处理多个客户端任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值