Python学习之路_day_31(tcp协议/socket)

  1. tcp协议:

可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

以太网头 ip 头               tcp头               数据                                                    

udp协议:

不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

以太网头 ip头                      udp头                            数据                                           

tcp报文

tcp三次握手和四次挥手

  1. 互联网协议

    一台硬设有了操作系统,然后装上软件你就可以正常使用了,然而你也只能自己使用

    像这样,每个人都拥有一台自己的机器,然而彼此孤立

    如何能大家一起玩耍

    然而internet为何物?

    其实两台计算机之间通信与两个人打电话之间通信的原理是一样的(中国有很多地区,不同的地区有不同的方言,为了全中国人都可以听懂,大家统一讲普通话)

    普通话属于中国国内人与人之间通信的标准,那如果是两个国家的人交流呢?

    问题是,你不可能要求一个人/计算机掌握全世界的语言/标准,于是有了世界统一的通信标准:英语

    结论:英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是

    一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

    互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

    2.2 osi七层协议

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

    每层运行常见物理设备

  2. socket

    ocket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

    所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

  3. 基于socket来编写C/S架构软件
    #_*_coding:utf-8_*_
    __author__ = 'Linhaifeng'
    import socket
    ip_port=('127.0.0.1',9000)  #电话卡
    BUFSIZE=1024                #收发消息的尺寸
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
    s.bind(ip_port) #手机插卡
    s.listen(5)     #手机待机
    
    
    conn,addr=s.accept()            #手机接电话
    # print(conn)
    # print(addr)
    print('接到来自%s的电话' %addr[0])
    
    msg=conn.recv(BUFSIZE)             #听消息,听话
    print(msg,type(msg))
    
    conn.send(msg.upper())          #发消息,说话
    
    conn.close()                    #挂电话
    
    s.close()                       #手机关机
    
    服务端
    #_*_coding:utf-8_*_
    __author__ = 'Linhaifeng'
    import socket
    ip_port=('127.0.0.1',9000)
    BUFSIZE=1024
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    s.connect_ex(ip_port)           #拨电话
    
    s.send('linhaifeng nb'.encode('utf-8'))         #发消息,说话(只能发送字节类型)
    
    feedback=s.recv(BUFSIZE)                           #收消息,听话
    print(feedback.decode('utf-8'))
    
    s.close()                                       #挂电话
    
    客户端
原文地址:https://www.cnblogs.com/zjh009/p/9556297.html