浅谈Python中TCP和UDP等网络编程协议

发表于:2018-4-09 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:python_LiuYi    来源:51testing软件测试网采编

#
Python
分享:
  最近在学习python编程,自己稍微整理了一下这两天的学习心得
  一、什么是网络编程协议
  首先网络编程协议的目的是为了方便使用与管理,避免出现网络拥堵。倘若没有固定协议,就有可能会出现,如下图的情况,完全无法进行沟通,放在网络上就会出现网络堵塞,所以我们必须制定一些方案和协议来统一。
  沟通不便
  二、分层模型
  1) 网络分层架构
  为了减少协议设计的复杂性,大多数网络模型均采用分层的方式来组织。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。每一层利用下一层提供的服务来为上一层提供服务,本层服务的实现细节对上层屏蔽。
  分层模式
  越下面的层,越靠近硬件,越上面的层,越接近用户。主要四层模式为:应用层,运输层,网络层,链路层。
  2)链路层
  链路层指定的就是mac地址,每台电脑出厂时配置的网卡对应地址都会不同,这个是一开始就决定好的,无法改变。
  3)网络层
  网络层主要指的就是ip地址,通过用户指的ip地址进行相对应的访问操作(ip由来等细节不做细讲,自行百度
  4)运输层
  通过每个应用不同的端口号进行传输,端口号范围是从0到65535,每个端口都对应电脑上不同的进程,windows用户可以在命令提示符中输入netstat -ano看到,在本地地址冒号后面,即可看见,Linux中输入ps -auo即可,一个端口号只能服务一个进程。其中80端口分配给HTTP服务,21端口分配给FTP服务。就类似固定电话,10010,10086等。
  windows查看进程端口
  5) 应用层
  经过链路层,网络层,传输层,最后就是通过前面是三个来确认到最后需要传输到的应用中去
  传输示意图
  三、UDP
  1)udp简介
  UDP是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
  2)udp通信模型
  主要客户端通过sendto(msg, (ip,port))访问,并发送消息,但不会确认是否到达,recvfrom()用来接收消息,并且会堵塞,如果一直没有消息送来,则会一直堵塞下去。服务器通过bind((ip,port))绑定ip地址和端口,注意是元组,.close用来关闭连接。(注意,网路传输中都是通过字节的方式进行传输,所以再接收和发送时都要主要转码和解码)
  udp通信模型
  四、TCP
  1)tcp简介
  TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中打电话。
  2)tcp通信模型
  tcp客服端:通过connect((ip, port))来请求连接,send()进行发送消息,recv()进行接受消息
  tcp服务器: 通过bind((ip, port))绑定ip和端口,ip不写则代表默认本机所有地址,listen()控制客服端的连接数量,accept()等待阻塞,一直到客户端的到来,recv()接受消息,send()发送消息。在做多用户聊天时一定要注意accept()的位置,因为单线程每次有客户端连接都会把上次的连接断开,这里涉及到了多线程,目前正在学习中。
  tcp传输模型
  五、TCP和UDP的优缺点
  1)tcp的优点
  1.1TCP采用发送应答机制
  TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功。
  1.2超时重传
  发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。
  1.3错误校验
  TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
  1.4流量控制和阻塞管理
  流量控制用来避免主机发送得过快而使接收方来不及完全收下。
  2)udp的优点
  传输速度快,传输稳定,避免丢包,相对而言,udp会更加的安全一些
  3)tcp不同与udp
  面向连接(确认有创建三方交握,连接已创建才作传输。)
  有序数据传输
  重发丢失的数据包
  舍弃重复的数据包
  无差错的数据传输
  阻塞/流量控制
  4) 优劣
  udp在传输方面比tcp更胜一筹,但是不能保证稳定到达用户,tcp传输慢,但是能保证消息传输到用户,但是容易丢包,导致数据被抓包
  以上就是个人这两天学习udp和tcp的一些看法,还有很多不足的的地方,希望谅解,如有不足,欢迎留言。我也是学习python没多久,来和大家一起分享一下,希望和大家一起进步。还有tcp的三次握手,四次挥手,就没在此处提了,有需求的朋友可以去百度一下或者谷歌一下。



上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号