欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python day28 TCP协议与UDP协议

程序员文章站 2022-04-14 18:25:27
2019.5.7 S21 day28笔记总结 1. TCP协议 / UDP协议 1.1 TCP协议 1.可靠、慢、全双工通信 2.建立连接的时候 : 三次握手 3.断开连接的时候 : 四次挥手 4.在建立起连接之后 发送的每一条信息都有回执 为了保证数据的完整性,还有重传机制 5.长连接 :会一直占 ......

2019.5.7 s21 day28笔记总结

1. tcp协议 / udp协议

1.1 tcp协议

  • 1.可靠、慢、全双工通信

  • 2.建立连接的时候 : 三次握手

  • 3.断开连接的时候 : 四次挥手

  • 4.在建立起连接之后

    • 发送的每一条信息都有回执

    • 为了保证数据的完整性,还有重传机制

  • 5.长连接 :会一直占用双方的端口

  • 6.io(input,output)操作,输入和输出是相对内存来说的

    • write / send -----> 输出 output

    • read / recv ------> 输入 input

  • 7.能够传递的数据长度几乎没有限制

1.2 udp协议

  • 1.无连接的 速度快
  • 2.可能会丢消息
  • 3.能够传递的数据的长度是有限的,是根据数据传递设备的设置有关系

1.3 应用场景

  • tcp 文件的上传下载(发送邮件、网盘、缓存电影)
  • udp 即时通信类的(qq、微信、飞秋)

2. osi七层模型 /osi五层协议

osi七层模型 osi五层协议 协议 物理设备
应用层
表示层
会话层
(三层总结成一层)
五层 应用层 http / https / ftp / smtp 协议
python代码:hello
传输层 四层 传输层 tcp协议 / udp协议 端口 四层路由器、四层交换机
网络层 三层 网络层 ipv4 / ipv6 协议 (三层)路由器、三层交换机
数据链路层 二层 数据链路层 mac地址 arp协议 网卡、(二层)交换机
物理层 一层 物理层

3. socket(套接字)

socket 是一个工作在应用层和传输层之间的抽象层。

  • 帮助我们完成了所有信息的组织和拼接
  • sokcet对于程序员来说 已经是网络操作的底层了

socket历史:

  • (初期)基于文件通信 -------- 完成同一台机器上的两个服务之间的通信的
  • (现在)基于网路通信 -------- 完成了多台机器之间的多个服务通信

3.1 socket用于tcp协议

# server.py 服务端
import socket

sk = socket.socket()  
# socket()参数中:family(基于……通信)=af_inet(网络通信), type(协议)=sock_stream(tcp协议),tcp协议默认不用写,如果想要写协议必须是:type=socket.sock_stream
sk.bind(('192.168.12.25',9000))
sk.listen()
while true:
    conn,addr = sk.accept()
    while true:
        msg = conn.recv(1024)
        if msg.decode('utf-8').upper() == 'q':
            break
        print(msg.decode('utf-8'))
        cont = input('内容(输入q断开):')
        conn.send(cont.encode('utf-8'))
        if cont.upper() == 'q':
            break
    conn.close()
sk.close()

# client.py 客户端
import socket

sk = socket.socket()
sk.connect(('127.0.0.1',9000))
while true:
    msg = sk.recv(1024)
    if msg.decode('utf-8').upper() == 'q':
        break
    print(msg.decode('utf-8'))
    cont = input('内容(输入q断开):')
    sk.send(cont.encode('utf-8'))
    if cont.upper() == 'q':
        break
sk.close()

sk.accept() 与 sk.connect() 是建立三次握手的过程

3.2 socket用于udp协议

# server.py 服务端
import socket

sk = socket.socket(type = socket.sock_dgram) # udp协议必须加上 type=socket.sock_dgram
sk.bind(('127.0.0.1',9000))
while true:
    msg,client_addr = sk.recvfrom(1024) # recvfrom用于不知道对方ip时,获取到ip给client_addr
    msg = msg.decode('utf-8')
    print(msg)
    msg1 = input('>>>').encode('utf-8')
    sk.sendto(msg1,client_addr)
sk.close()

# client.py 客户端
import socket

sk = socket.socket(type = socket.sock_dgram)
while true:
    inp = input('>>>').encode('utf-8')
    sk.sendto(inp,('127.0.0.1',9000))
    msg = sk.recv(1024).decode('utf-8') # 这里不需要使用recvfrom,因为知道对方ip地址
    print(msg)

sk.close()