PYTHON-网络通信 TCP
网络编程:
学习网络编程
为什么?目的:
服务端特点: 网络通讯(通信) 什么是网络通讯? 为什么?目的:网络建立的目的是为数据交互(通信) 如何实现通讯(通信)? 互联网协议 互联网=物理连接介质+互联网协议 互联网协议:(open system interconnection)
什么是互联网协议? OSI七层协议/tcp/ip五层
应表会 传 网 数 物 MAC地址
ip
port
ip+mac
ip+port 网页地址解析 什么是网络编程?
socket套接字
什么是socket: socket中用户最关心的是 TCP和UDP
TCP:
协议:
传输方式:
优点:
缺点:
使用场景:
套接字type参数:
同时连接客户端数量: UDP :
协议:
传输方式:
缺点:
优点:
使用场景:
套接字type参数:
同时连接客户端数量: TCP VS UDP 可靠性: TCP:
TCP三次握手建连接,四次挥手断连接
TCP目的
洪水攻击 TCP template
半连接池,工作原理
服务端需要遵循的原则 粘包问题
引起粘包的TCP特点
自定义报头
TCP 远程执行CMD(粘包的解决方法) UDP:
UDP template ============================================================ 网络编程:
1 学习网络编程 其实就是在学socket套接字 *****
为什么?目的:编写一个C/S架构的软件,
两者基于网络通信 为了使程序能够分布在不同的计算上
C/S: Client--------基于网络----------Server
B/S: Browser-------基于网络----------Server
服务端特点:
1、不间断地提供服务
2、服务端要支持并发+高性能 2 网络通讯(通信)
什么是网络通讯?*****
在不同的计算机上 一个安装客户端 另一安装服务端 通过网络来通讯 为什么?目的:网络建立的目的是为数据交互(通信) 如何实现通讯(通信)?
1.建立好底层的物理连接介质 (网线,WIFI,光纤)---网络工程师关注
2.通讯协议(必须遵循相同的标准)---应用软件开发者 关注
(比作在中国就像是讲普通话,全世界就像是讲英语) 3 互联网协议
互联网=物理连接介质+互联网协议 互联网协议:(open system interconnection)
什么是互联网协议?
比作 是计算机界的英语 OSI七层协议 ** tcp/ip五层
应 (表 会) 传 网 数 物
应用 应用软件,自定义协议,需要双方程序员商量(报头) 应用层(表示层和会员层都属于应用层)
浏览器协议(HTTP FTP..)
表示
会话
传输 -TCP/UDP-基础port端口工作的协议 传输层
网络 -ip协议 (IP(DHCP分配),子网掩码) 网络层
1.用来定义数据传输格式 2.定位一个局域网 3.定位一台主机
数据链路层-以太网协议Ethernet(基于mac地址)-报头(信封)和真实数据 数据链路层
物理层-发送电信号(二进制数10101 ) 物理层 传输层
TCP/UDP
TCP 传输是可靠的 传输前需要三次握手确认 传输过程中需要返回确认
效率较低 UDP 不可靠传输 没有三次握手 也没有确认信息 仅仅传输数据 不关心接收方是否收到 使用socket接口完成TCP 和UDP 以太网协议 规定 一个计算比需要一个网卡,一个网卡对应1个MAC地址,MAC可以标识 唯一一台计算机
古老的广播式的通信 ip 可以标识 在局域网内找到一台计算机
ip+mac可以标识 全世界范围内独一无二的 一台计算机的位置
(通信的时候,一定要获取对方的IP地址,拿到ip后,ARP协议自动将IP解析成MAC
port可以标识 一台计算机之上唯一的 一个基于网络通信的 应用软件 4 *****如何标识全世界范围内独一无二的一个socket程序(基于网络通信的 一个应用软件)
ip+(mac)+port 网页地址解析
就是域名 ,将域名给到 DNS服务器(域名服务器) (基于UPD协议)解析成IP,(DNS默认端口53)
对应有ip 和端口port,到这台机器上拿到路径里的文件 DNS 全球共13台根服务器,最大有效传输512字节 网页:
https:// www.cnblogs.com:80 /linhaifeng/p/7278389.html
应用层协议 域名+端口 (先把域名交给dns解析成IP地址) 路径
逻辑层面建好双向通路(TCP三次握手)
==>给应用层按http协议传输数据,封包后交给传输层,给对方,再按这条线返回
(物理层 实际上在传输层后还有网络层,数据链路层,物理层) 5 socket套接字(*****)
什么是socket: 学习网络编程 其实就是在学socket
socket套接字是位于应用层与传输层之间的一个抽象接口层
是一个在传输层上封装好的模块!(是对底层的 TCP UDP IP ethernet协议进行封装) 要完成网络通讯,只需要调用socket的接口或者说按照socket的标准编写程序,写出的程序自然是遵循tcp/ip协议
(比作 打电话时电话机的接口 服务端:买电话 插电话卡 等电话连接 收发消息 挂电话 关机
客户端:买电话 拨电话 收发消息 挂电话) python中使用socket的时候用户需要关心的是
ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data TCP和UDP是传输层最常见的协议(*****)
主要控制传输数据的方式
TCP
传输方式:要建立连接(流式协议:像水流一样源源不断的发过去)
(数据量比较小,时间间隔较短的不会发过去,等下一次一起)
优点:
可靠协议,可以保证数据的完整性 通过三次握手来与服务器建立连接
(比如 a机器给b机器发送数据包 要求b机器必须立即返回一个确认包
在对方确认后才会中自己的操作系统缓存清除这个数据包
a机器会等待一段时间,如果超时还没有收到确认,则重发数据)
缺点:
传输效率比UDP低
使用场景:
文字聊天,支付宝转账等
套接字type参数:SOCK_STREAM
同时连接客户端数量:1个
UDP :
传输方式:
不需要建立连接,直接发送, 数据报协议
优点:
发送效率高,但有效传输的数据量最多为500bytes
缺点:
不可靠:发送数据,无需对确认,容易丢包
发一条数据无需收到对方的确认消息,会立刻从自己的操作系统缓存中清除该条消息
使用场景:
视频通话,语音通话等
套接字type参数:SOCK_DGRAM
同时连接客户端数量:
可以同时处理多个客户端 是因为CPU处理速度快 给人感觉像是同时处理 TCP VS UDP 可靠性:
TCP可靠 是因为发送数据后必须收到确认包 TCP 三次握手建连接,四次挥手断连接
两条双向管道: C===>S 发消息管道 S===>C 收消息管道
(比作 双11购物 一管道传商品金额 另一管道传购物状态信息) 三次握手: (syn,seq,ack,fin都是标志位,代表不同含义)
c(客户端)----syn=1(请求链接) seq=x(序列号)--->s(服务端)
s----ack=1+x syn=1(请求链接) seq=y(序列号)--->c
(确认请求,并在原来序列号基础上+1)
c----ack=1+y------->s tcp建立的是一个双向连接
c------------------>s
c<-----------------s 四次挥手:通常是服务端先有断链接请求,节约资源
s------fin=1(断链接请求)seq=x+2---------->c
c------>ack=3+x(确认请求)--------->s
c------>fin=1,seq=y+2--------->s 不能和上一条合并是因为S-C数据可能还没传完
s------>ack=3+y--------->c 1、TCP 目的是建立双向通路 传输数据可靠
((好人协议)客户端发包(发请求)后,服务端一定会响应 发出确认信息) 洪水攻击 黑客模拟大量的客户端发请求,让服务端响应,虚拟的客户端 服务端无法识别 造成大量资源占用
syn_send大量涌现(公司有预谋的发起) 解决方案:增加带宽
PYTHON-网络通信 TCP的更多相关文章
- 计算机网络通信TCP/IP协议浅析 网络发展简介(二)
本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket 分层的 ...
- python之tcp自动重连
操作系统: CentOS 6.9_x64 python语言版本: 2.7.13 问题描述 现有一个tcp客户端程序,需定期从服务器取数据,但由于种种原因(网络不稳定等)需要自动重连. 测试服务器示例代 ...
- Python 基于 TCP 传输协议的网络通信实现
1.基础概念 什么是网络编程? 指在网络环境中,如何实现不在同一物理位置中的计算机之间进行数据通信 如果要保证数据通信顺利完成,则需要先了解如下几个概念: 1.1 协议 不同计算机内的进程之间进行数据 ...
- Python—网络通信编程之tcp非阻塞通信(socketserver)
服务端代码 import socketserver # 定义一个类 class MyServer(socketserver.BaseRequestHandler): # 如果handle方法出现报错, ...
- Python—网络通信编程之tcp通信编程
服务端代码 import socket # 1.创建流式套接字实例 # server = socket.socket() server = socket.socket(socket.AF_INET, ...
- python实现TCP/UDP通信
一.说明 对于TCP/udp的说明已经很多了,我在这里只是简单的说明一下 二.套接字scoket 套接字是一种具有之前所说的"通信端点"概念的计算网络数据结构.相当于电话插口,没它 ...
- python socket+tcp三次握手四次撒手学习+wireshark抓包
Python代码: server: #!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:server.py import socket # 导入 socke ...
- Python 绝技 —— TCP服务器与客户端
i春秋作家:wasrehpic 0×00 前言 「网络」一直以来都是黑客最热衷的竞技场.数据在网络中肆意传播:主机扫描.代码注入.网络嗅探.数据篡改重放.拒绝服务攻击……黑客的功底越深厚,能做的就越多 ...
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
- UC编程之网络通信(TCP/UDP)
网络常识 OSI 7层模型(人机交互) 物理层.数据链路层.网络层.传输层.会话层.表现层.应用层 常见协议: tcp/udp/ip/ftp/http... IP地址--就是计算机在网络中的地址,是一 ...
随机推荐
- 试着用c写了一个多线程的同步
在Java中写多线程相关的程序简单很多,在多线程中需要同步的时候,使用synchronized就行了. 最近学习c的多线程与同步,感觉实现起来,要写的代码比较多一些,这也许是因为java封装的比较好吧 ...
- “由于下列错误,Parallel port driver 服务启动失败”,注意了
最近在“事件查看器”中发现这么一个错误:“由于下列错误,Parallel port driver 服务启动失败”, 我到网上搜索了一下,发现很多网页上都说解决办法: 把HKEY_LOCAL_MACHI ...
- configParse模块(二十七)
configparser用于处理特定格式的文件,其本质上是利用open来操作文件. # 注释1 ; 注释2 [section1] # 节点 k1 = v1 # 值 k2:v2 # 值 [section ...
- eclipse如何以指定JDK启动
eclipse如何以指定JDK启动 2018年01月11日 14:30:23 buerc 阅读数:11179 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...
- Leetcode 496. 下一个更大元素 I
1.题目描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 ...
- Linux中如何安装RAR
在Windows下的winrar几乎一统压缩软件的市场占有率,winrar只是RAR在Windows环境下的图形界面而已,核心功能还是RAR,那么如何在Linux中安装RAR呢? 1.下载RAR下载地 ...
- Linux命令之pwd
从今天开始,我会慢慢的把学习Linux过程中的一些命令简单的介绍一下,只是简单的介绍. 我的系统是Ubantu pwd命令 用处:查看当前所在的目录 用法:直接在终端里面输入pwd就好了 示例:
- 学习windows编程 day3 之窗口绘画一:点线绘制
#include <windows.h> #include <math.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, ...
- vue基础篇---路由的实现
路由可以有两种实现方式,一种是标签形式的,一种是js实现. 标签: <router-link to='/city'> 北京 </router-link> 标签还有另外一种实现方 ...
- JAVA记录-异常基本概念
1.异常分类 2.错误和异常的区别 3.try-catch-xxx处理方式 Java Exception:1.Error 2.Runtime Exception 运行时异常3.Exception 4. ...