zoukankan      html  css  js  c++  java
  • socket底层工作原理解释,tcp三次握手与四次挥手

    import socket # 错误1:自建模块名称尽量不要和导入的库名称相同
    
    phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 以下的收发包都是基于tcp方式
    # 实例化一个对象
    
    phone.bind(('127.0.0.1', 8000)) # IP地址信息和端口号需以元组的形式作为参数
    # 绑定IP和端口信息
    
    phone.listen(10) # 指定backlog半链接池多大(最大可以挂起10个链接);在服务器上这个值是还需要调整的(测试的时候小一点可以);如果这个数值过小,很容易被占满,黑客攻击请求过多那么正常请求就无法响应;防止SYN洪水攻击的手段之一就是增大半链接池,另一点则是缩小返回次数
    # 监听数量
    
    conn, addr = phone.accept() # 相当于拿到一个tcp链接
    
    msg = conn.recv(1024) # 数据传输
    print(msg)
    # 收到客户端发送到的信息
    
    conn.send(msg.upper())
    # 发信息给客户端
    
    conn.close() # 断链接四次挥手(关闭三次握手)
    # 断开链接
    
    phone.close() # 关闭socket,把程序给关了
    
    # 错误2:OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。当day70_s这个代表服务端文件正在运行时,再启动
    # day71_s这个代表服务端的文件,那么就会报这个异常;异常信息代表这个端口被占用,目前不能使用(mac笔记本经常会出现这个问题)
    # 另一个模块代码
    import socket
    
    c1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 实例化一个对象
    
    c1.connect(('127.0.0.1', 8000)) # # IP地址信息和端口号需以元组的形式作为参数
    # 连接服务端
    
    c1.send('kobe'.encode('utf-8')) # 必须以二进制的形式进行发送消息
    # 发送信息给服务端
    
    data = c1.recv(1024)
    print(data)
    # 收到服务端发送的信息

     建链接三次握手:

    SYN洪水攻击,利用tcp协议设计的漏洞进行攻击,第①步的操作是C端发送给S端的SYN连接请求,而S端也会进行一 一回应请求,当C端不予回应S端仍会再尝试回应连接请求,当这样的假SYN连接请求非常多时,会消耗服务器资源。

    backlog:半链接池(没有把这一链接建立成功)--->>>讲SYN连接请求放置在一块,服务端响应SYN连接请求从半链接池中拿。

    完整的链接,从客户端开始发送链接,到服务端状态为ESTABLISHED为止;半连接,服务端状态一直为SYN_RCVD。

    数据传输:

    断开链接四次挥手:

     

    主动断开链接状态一定是客户端发起的吗?不一定,从为什么要断开链接上分析?数据传完断链接,谁传完谁断,一定是客户端先把链接断开吗?不一定。

    为什么建链接要3次握手,而断链接却要4次挥手?因为建立链接是在发送数据之前,而断开链接是在发送数据之后,C端数据发送完毕不代表S端数据也发送完毕,所以断开链接要4次挥手。

    大并发情况下,服务端会有大量TIME_WAIT状态,因为服务端根本不会保存客户端链接,服务端把数据发完后,立马主动断开链接,为了节省自己的资源,(基本上是服务端先断开链接)。

    while True: print('studying...')
  • 相关阅读:
    Light OJ 1067 Combinations (乘法逆元)
    hdu1172猜数字(暴力枚举)
    hdu 2266 How Many Equations Can You Find(DFS)
    项目之问卷调查问题
    Django之Modelform组件
    GIT
    form组件的总结
    总结django知识点
    djang-分页
    Django-Ajax
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14782122.html
Copyright © 2011-2022 走看看