关于Python网络编程中端口号为什么不会重复问题释义

Python014

关于Python网络编程中端口号为什么不会重复问题释义,第1张

总所周知,TCP协议端口号只有65536个,其中0 ~ 1023是知名端口,1024 ~ 65535是动态端口。网上应用软件有那么多,那为什么这些端口号都不会重复呢?

1、TCP服务端端口一般程序员 开发应用程序 时就是设置了的,根据程序功能设置相应的协议端口(如果开发应用时没有设置的话,操作系统会自动在动态端口号这个范围内随机生成一个给开发的应用程序使用,这样TCP客户端访问TCP服务端的时候就会因为无法确认TCP服务端端口号而出现访问不了的问题)

2、TCP客户端端口号是程序访问TCP服务端请求连接时,从用户电脑里面正在运行的程序中随机匹配一个还没有用到的动态端口号,如此就不会存在打开程序和已经在电脑上运行的程序端口号之间出现重复的问题了。

注:如果以上描述还是有些看不懂的话请看下图,下图是同一台TCP客户端在一段时间内相继几次访问同一台TCP服务端时留下的痕迹截图。总之一句号, 服务端端口号和客户端端口号是不一致的 ,程序员在开发应用程序时,服务端一般都会绑定端口号,但是客户端是没有绑定的。客户端端口号是在客户端向服务端发送请求连接时,操作系统从用户电脑里面正在运行的程序中选择没有用到的端口号里面随机匹配的,随机分配的端口号会同客户端发送请求连接的数据包一起发送给服务端,服务端再通过客户端给的ip地址及动态端口号找到相对应的客户端,并给与响应。

socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。

有效的端口号: 0~ 65535

但是小于1024的端口号基本上都预留给了操作系统

POSIX兼容系统(如Linux、Mac OS X等),在/etc/services文件中找到这些预留端口与的列表

面向连接的通信提供序列化、可靠的和不重复的数据交付,而没有记录边界。意味着每条消息都可以拆分多个片段,并且每个消息片段都能到达目的地,然后将它们按顺序组合在一起,最后将完整的信息传递给等待的应用程序。

实现方式(TCP):

传输控制协议(TCP), 创建TCP必须使用SOCK_STREAM作为套接字类型

因为这些套接字(AF_INET)的网络版本使用因特网协议(IP)来搜寻网络中的IP,

所以整个系统通常结合这两种协议(TCP/IP)来进行网络间数据通信。

数据报类型的套接字, 即在通信开始之前并不需要建议连接,当然也无法保证它的顺序性、可靠性或重复性

实现方式(UDP)

用户数据包协议(UDP), 创建UDP必须使用SOCK_DGRAM (datagram)作为套接字类型

它也使用因特网来寻找网络中主机,所以是UDP和IP的组合名字UDP/IP

注意点:

1)TCP发送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。

2)服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data)。

TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

什么时候应该使用TCP : 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输.

UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……

UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……