IP地址和端口号

IP地址是一个规定,现在使用的是IPv4,既由4个0-255之间的数字组成,在计算机内部存储时只需要4个字节即可。在计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP地址,在同一个网络内部,IP地址不能相同。IP地址的概念类似于电话号码、身份证这样的概念。

由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。        

其实在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成。 所以在网络编程中,可以使用IP或域名来标识网络上的一台设备。

 为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。规定一个设备有216个,也就是65536个端口,每个端口对应一个唯一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于0-1024之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号。 下面是一些常见的服务对应的端口:

ftp:23,telnet:23,smtp:25,dns:53,http:80,https:443

使用端口号,可以找到一台设备上唯一的一个程序。  所以如果需要和某台计算机建立连接的话,只需要知道IP地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。


数据传输方式在网络上,不管是有线传输还是无线传输,数据传输的方式有两种:

TCP(Transfer Control Protocol) 传输控制协议方式,该传输方式是一种稳定可靠的传送方式,类似于现实中的打电话。只需要建立一次连接,就可以多次传输数据。就像电话只需要拨一次号,就可以实现一直通话一样,如果你说的话不清楚,对方会要求你重复,保证传输的数据可靠。 使用该种方式的优点是稳定可靠,缺点是建立连接和维持连接的代价高,传输速度不快。

UDP(User Datagram Protocol) 用户数据报协议方式,该传输方式不建立稳定的连接,类似于发短信息。每次发送数据都直接发送。发送多条短信,就需要多次输入对方的号码。该传输方式不可靠,数据有可能收不到,系统只保证尽力发送。 使用该种方式的优点是开销小,传输速度快,缺点是数据有可能会丢失。         

在实际的网络编程中,大家可以根据需要选择任何一种传输方式,或组合使用这两种方式实现数据的传递。

拥有IP地址端口号可以进行多种网络操作。通过IP地址能够连接到指定的计算机,而结合端口号则可以访问该计算机上的特定应用程序。 在网络通信方面,能够与目标计算机上的指定应用程序建立连接。例如,当知道某服务器的IP地址运行的FTP服务的端口号(通常为2021)时,就可以与之建立文件传输连接,实现文件的上传下载操作。因为不同的应用程序使用不同的端口号,像邮件客户端程序会使用特定的端口号(如SMTP服务一般用25端口,POP3服务常用110端口),利用对应的IP地址端口号,就能与邮件服务器进行通信,收发邮件 [^1][^3]。 在网络开发测试中,若拥有目标服务器的IP地址端口号,可以对该服务器上的应用程序进行测试。开发人员可以编写程序向指定的IP地址端口发送请求,检查服务器的响应是否符合预期,以此来验证应用程序的功能性能。 同时,在网络管理安全方面,通过IP地址端口号可以监控网络流量。网络管理员可以查看哪些IP地址端口之间有数据传输,判断是否存在异常的网络活动,如端口扫描、恶意攻击等。例如,如果发现某个IP地址频繁向多个端口发送请求,可能存在端口扫描的风险,管理员可以及时采取相应的安全措施 [^4]。 ```python import socket # 创建一个TCP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 目标服务器的IP地址端口号 ip_address = '192.168.1.100' port = 80 try: # 尝试连接到目标服务器 sock.connect((ip_address, port)) print(f"成功连接到 {ip_address}:{port}") # 这里可以进行后续的数据发送接收操作 # 例如发送HTTP请求 request = "GET / HTTP/1.1\r\nHost: " + ip_address + "\r\n\r\n" sock.sendall(request.encode()) response = sock.recv(4096) print(response.decode()) except Exception as e: print(f"连接失败: {e}") finally: # 关闭套接字 sock.close() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值