首页 > 其他分享 >OSI七层协议补充与socket套节字

OSI七层协议补充与socket套节字

时间:2022-11-16 18:44:16浏览次数:50  
标签:协议 套节 TCP server OSI client 服务端 socket

OSI七层协议补充与socket套节字

一、传输层之TCP与UDP协议

TCP与UDP协议都是用来规定通信方式的,数据传输过程中能够遵循的协议有很多其中TCP协议和UDP协议是较为常见的两个。

1.TCP协议

可靠传输,只要得不到认可,就重新发送数据报,直到得到对方的确认为止
1.三次握手建连接:
    建立双向通道
  问题:洪水攻击
  解决的办法:同时让大量的客户端朝服务端发送建立TCP连接的请求

image

2.四次挥手
  断开双向通道(中间的两步不能合并,需要有检查的时间)
注意:基于TCP协议传输的数据非常安全,因为有双向通道,基于TCP传输数据,数据不容易丢失,原因在于二次确认机制,每次发送数据都需要返回确认消息,否则在一定时间会反复发送。达到一定次数的发送,若得不到确认则删除数据。

image

三次握手和四次挥手也可以看成是小情侣谈恋爱的过程	
    三次握手:表白在一起
    四次挥手:决裂要分手
# 基于TCP传输数据因为有双向通道所以很安全
TCP传数据不容易丢失因为有二次确认机制,每次发送数据都需要返回确认消息,否则在一定时间会反复发送

2.UDP协议

UDP协议发送数据没有任何的通道也没有任何的限制,但是没有TCP协议传输数据来的安全(没有二次确认机制)
eg:发了消息,重要的是发了,不管别人看了没有,回没有回复

二、应用层

 应用层提供各种各样的应用层协议,这些协议嵌入我们使用的各种应用程序中,主要是程序员自己采用什么样的策略和协议
常见的协议有:HTTP,HTTPS,FTP....

三、socket套节字编程

1.套节字的作用

可以看成两个网络应用程序进行通信时,各自通信连接中的端点

2.套节字家族

基于文件类型的套节字家族
    套节字家族的名字:AF_UNIX
基于网络类型的套节字家族
    套节字家族的名字:AF_INET

3.socket代码简介

'''客户端'''
import socket

# 1.生成socket对象指定类型和协议
client = socket.socket()
# 2.通过地址链接服务端
client.connect(('127.0.0.1',8080))
# 3.直接给服务端发送消息
client.send('你好,我是客户端,你是谁'.encode('utf8'))
# 4.接收服务端发送过来的消息 1024是字节数
data = client.recv(1024)
print(data.decode('utf8'))
# 5.断开与服务端的链接
client.close()
'''服务端'''
import socket

# 1.产生一个socket对象并指定采用的通信版本和协议(TCP)
server = socket.socket()
# 2.绑定一个固定的地址(服务端必备的条件)
server.bind(('127.0.0.1',8080))
# 3.设立半连接池
server.listen(5)
# 4.等待连接
sock,addr = server.accept()
print(sock,addr)
# 5.服务
data = sock.recv(1024)
print(data.decode('utf8'))
sock.send('我是服务端,专门为您服务的'.encode('utf8'))
# 6.关闭双向通道
sock.close()
# 7.关闭服务端
server.close()

image

4.代码优化

'''优化客户端'''
import socket

# 1.生成socket对象指定类型和协议
client = socket.socket()
# 2.通过地址链接服务端
client.connect(('127.0.0.1',8081))
while True:
    msg = input('请输入您想要发给服务端的消息>>>').strip()
    if len(msg) == 0:
        print('不能发送空消息哦')
        continue
    # 3.直接给服务端发送消息
    client.send(msg.encode('utf8'))
    # 4.接收服务端发送过来的消息 1024是字节数
    data = client.recv(1024)
    print('来自服务端的消息>>>>',data.decode('utf8'))
    # # 5.断开与服务端的链接
    # client.close()
'''优化服务端'''
import socket

# 1.产生一个socket对象并指定采用的通信版本和协议(TCP)
server = socket.socket()
# 2.绑定一个固定的地址(服务端必备的条件)
server.bind(('127.0.0.1',8081))
# 3.设立半连接池
server.listen(5)
while True:
    # 4.等待连接
    sock,addr = server.accept()
    while True:
        try:
            # 5.服务
            data = sock.recv(1024)
            if len(data) == 0:
                break
            print(f'来自于客户端{addr}的消息>>>>',data.decode('utf8'))
            msg = input('请输入发送给客户端的消息(不能发空消息)>>>:').strip()
            sock.send(msg.encode('utf8'))
        except BaseException:
            break

四、半连接池

    当服务器在响应了客户端的第一次请求后会进入多待状态,半连接池其实就是一个容器,系统会自动将半连接放入这个容器中,可以避免连接过多
eg:server.listen(5)

标签:协议,套节,TCP,server,OSI,client,服务端,socket
From: https://www.cnblogs.com/zx0524/p/16897116.html

相关文章

  • 构造Socket
    1:Socket的构造函数​​Socket​​()​​Socket​​(​​InetAddress​​ address,int port)​​Socket​​(​​InetAddress​​ address,int port,​​InetAddress......
  • 11月16日内容总结——OSI传输层之TCP与UDP协议、应用层简介、socket模块介绍及代码优
    目录一、传输层之TCP与UDP协议1.TCP协议(重要)三次握手建链接四次挥手断连接2.UDP协议3.tcp和udp的对比二、应用层简介三、socket模块1、简介2、基于文件类型的套接字家族3......
  • socket模块
    目录一、socket模块(套接字)1.socket简介2.代码实现3.代码优化一、socket模块(套接字)​socket上应用层与TCP/IP协议通信中间的软件抽象层,帮助我们编写基于网络进......
  • OSI七层协议之传输层,应用层,socket模块简介,socket模块基本使用,黏包问题
    目录OSI七层协议之传输层,应用层,socket模块简介,socket模块基本使用,黏包问题今日内容概要今日内容详细传输层之TCP与UDP协议应用层socket模块socket代码简介代码优化半连接池......
  • 网络编程2 TCP、UDP协议 与socket模块
    TCP与UDP协议1.TCP协议(重点)"""凡事必须有回复才能继续"""三次握手连接-1.TCP协议也称为可靠协议,数据不容易丢失数据不容易丢失的原因......
  • TCP\UDP协议 socket模块
    目录传输层主要协议TCP协议三次握手TCP协议反馈机制四次挥手洪水攻击UDP协议socket模块socket代码简介socket.socket()server.bind()server.accept()sock.recv()sock.send......
  • socket 模块
    socket模块我们知道基于网络编写程序时,需要使用OSI七层协议里的七层,每一层都要写。很复杂很繁琐。socket模块相当于集成了这一块,封装了复杂的接口提空了简单快捷的接......
  • 传输层之TCP与UDP协议、socket
    目录传输层之TCP与UDP协议应用层socket模块Socket通信socket代码简介代码优化半连接池的概念传输层之TCP与UDP协议TCP与UDP都是用来规定通信方式的ps:不遵循上述协议也......
  • 关于 WebSocket 和 HTTP 区别的思考以及一个最简单的 WebSocket 的客户端和服务器实现
    笔者之前与一位同事研究了Cypress的visit方法,其源码实现最终是调用了WebSocket向visit参数里指定的website通行并获取数据,见下图变量ev.data的值。我这位同......
  • socket模块简介
    今日内容概要传输层只TCP与UDP协议应用层socket模块简介socket模块基本使用代码优化处理半连接池的概念今日内容详细传输层只TCP与UDP协议TCP与UDP都是用来......