博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PYTHON-网络通信 TCP
阅读量:7014 次
发布时间:2019-06-28

本文共 4683 字,大约阅读时间需要 15 分钟。

网络编程:     学习网络编程     为什么?目的:     服务端特点: 网络通讯(通信) 什么是网络通讯? 为什么?目的:网络建立的目的是为数据交互(通信) 如何实现通讯(通信)? 互联网协议 互联网=物理连接介质+互联网协议 互联网协议:(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大量涌现(公司有预谋的发起)  解决方案:增加带宽

转载于:https://www.cnblogs.com/du-jun/p/9898406.html

你可能感兴趣的文章
CentOS 6.8 防火墙配置
查看>>
Java 知识点
查看>>
Nginx+Tomcat高性能负载均衡集群搭建
查看>>
BZOJ3573: [Hnoi2014]米特运输(树上乱搞)
查看>>
Dubbo的一些编码约定和设计原则
查看>>
JavaServer Faces (JSF) with Spring
查看>>
处理:“ORA-00257: archiver error. Connect internal only, until freed”的错误问题
查看>>
java 取汉字首字母
查看>>
苹果版小黄车(ofo)app主页菜单效果
查看>>
使用Genymotion模拟器或者手机运行ionic4程序
查看>>
tensorflow 在加载大型的embedding模型参数时,会遇到cannot be larger than 2GB
查看>>
SpringBoot(十八)@value、@Import、@ImportResource、@PropertySource
查看>>
SQL Server 字符串处理函数
查看>>
恢复系统管理员密码的五大奇招
查看>>
GridView 获取当前行的索引值
查看>>
PHPCMS V9二次开发:内容模块PC标签调用详解
查看>>
Linux系统排查1——内存篇
查看>>
Java实现注册邮箱激活验证
查看>>
mvc 数据验证金钱格式decimal格式验证
查看>>
UPW学习资料整理 .NET C# 转
查看>>