浅谈Python中TCP和UDP等网络编程协议
最近在学习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.1 TCP采用发送应答机制
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的三次握手,四次挥手,就没在此处提了,有需求的朋友可以去百度一下或者谷歌一下。