网络编程基础知识总结——IP,端口,协议

目录

1. 什么是网络编程?

2. 网络编程的三要素

3. IP

3.1 IP地址的概念

3.2 IP地址的分类

3.3 IPv4解析

3.4 Ipv6解析

4. IPv4 的使用细节

5. 特殊IP地址

4. 端口号

5. 协议

5.1 UDP协议

5.2 TCP协议


1. 什么是网络编程?

总的来说就是一句话,在网络通信协议下,不同计算机上运行的程序,进行数据传输。

之前我们编写代码,都是编写单体项目,在自己的电脑上运行,数据在本机前后端互相传输,不需要通过网络传输给别人。而在实际业务开发时,我们都是网络编程,微服务架构下会有多台服务器,服务器与服务器之间要进行数据通信,都是通过网络传输。

再者,我们网上与亲朋好友聊天,打游戏,向别人发送邮件,都是自己的计算机与别人的计算机之间的数据传输,都需要用到我们的网络编程。

2. 网络编程的三要素

大家思考一下,一台电脑像另一台电脑传输数据,需要知道那些参数呢?

OK,我直接来说吧。

(1)IP地址:一个设备向另一个设备发送信息,(因为数据传输不只有电脑,平板,手表,手机也可以进行数据传输,说以这里不说是电脑而说设备)。首先,肯定是要知道另一台设备的IP地址,每台设备的 IP 地址都是独一无二的,世界上有那么多的设备,我们就是通过设备的 IP 地址来确定你要向哪台设备发送数据的;

(2)端口号:既然知道了要发送的电脑是哪一台,我们还需要知道端口号,因为发送数据通常都是一个软件中的数据,每个软件APP在一台电脑上都绑定这一个端口,一个软件只能绑定一个端口,通过电脑的端口我们就可以确定要把数据传输给电脑上的哪个软件;

(3)协议(传输规则):再进行数据传输的时候,为了确保安全,通常会基于某种规则对数据进行加密,另一台电脑接收到数据之后,要对数据进行解密,这种传输规则称之为协议。常见的协议有UDP,TCP,HTTP,HTTPS,FTP等等;

3. IP

3.1 IP地址的概念

IP 全程 Internet Protocor,也可以说是互联网协议地址,会给每一个可以上网的设备分配一个唯一的地址;

3.2 IP地址的分类

现在常用的 IP 主要分为 IPv4 和 IPv6,Internet Protocor version 4(互联网通信协议第四版) 和 Internet Protocor version 6(互联网通信协议第四版);

3.3 IPv4解析

IPv4 采用了 32 位地址长度,计算机中每个字节有八个比特位,分为四组,正好四个字节,如下图就是一个随机的值,就可以表示一个 IP 地址。

但是,我们通常不会采用上面的那种方式来表示,因为可读性太差,所以我们采用点分十进制表示法,什么意思呢?

很简单,就是将上面的四组看作是四个二进制的数,然后转化成是十进制,另外有一点需要注意,在转化过程中,不存在负数这一说法,都是正数,转化之后的四个数之间采用 "." 来分开,就形成了我们常见的 "xxx.xxx.xxx.xxx"。如下图

这里我们可以算一下,每个八位二进制数转化为十进制,一共有 2^8 = 256 个十进制数,四组则一共有 256*256*256*256 = 42,9496,7296 就是42亿,也就是说 IPv4 一共最多有42亿多个 IP 地址,在2019年的时候,这42亿个 IP 地址就已经分配完了,不够使用了。

3.4 Ipv6解析

为了解决 IPv4 分配地址不够用的这一情况,后续又推出了 IPv6,它则是采用了 128 位地址长度,分为了8组,如下图

128 位2进制数,那么它可以分配的 IP 地址数量为 2^128,这个数量非常庞大,可以给地球上的每粒沙子都分配一个 IP 地址,完全够用,但是 IPv6 还没有大面积推广开,但在未来一定会被广泛使用。

IPv6 采用的是冒分十六进制表示法,每16个二进制数为一组,一共分为8组,将二进制转化为16进制,转化完毕后每组之间采用 ":" 分开,就形成了下面这个样子

16进制数如果计算出来的结果如果某一组都是0,可以省略三个只写一个0,如果只有两头有数值中间都是零,则可以省略中间的六组,用两个连续的 "::" 来代替,计算机在读取的时候会自动补零。

4. IPv4 的使用细节

上面我们了解到了,IPv4 的地址已经分配完毕了,而 IPv6 还没有大面积普及,那么如果新的设备需要 IP 地址,是如何解决的呢?

这就要说到 IPv4 的地址分类形式了,实际上 IPv4 还可以分为公网IP和局域网IP,192.168.开头的IP都是局域网IP,范围是 192.168.0.0--192.168.255.255,是专门为组织机构内部使用,节省IP地址数量。

我们大家举个例子就很好理解了。假如你现在有手机,平板,手表,电脑四个上网设备,原本来说你这四个设备需要分别占用那42亿个IP地址中的四个,但是现在你的这四个设备共同占用 42 亿个公网IP地址中的一个,然后你的这四个设备再分别占用局域网IP 192.168.0.0--192.168.255.255 中的四个,这样说应该好理解一些。就是不管你有几个设备,你只占用世界上的一个公网IP,然后你的个人设备再去分配局域网的 IP,节省了42亿个公网IP的利用率。

实际生活中可能一栋大楼,一家小型公司,一个商场,或者一家茶馆餐馆都会分别占用一个公网IP,然后顾客在这个范围内的IP实际上是这个公网IP下的局域网IP。举个最简单的例子,你在公司上班,连着公司的WIFI上网,公司的WIFI会给你分配一个局域网IP,下班了去餐馆吃饭,连接餐馆的的WIFI上网,参观的WIFI又会给你分配一个局域网IP,吃过饭回到家连接家里的WIFI上网,家里的WIFI还会给你分配一个局域网IP,你在不同的地方上网,给你分配的局域网IP都是可能不一样的,每个局域网的这样做极大地提高了公网IP的使用率,所以至今IPv6只是小面积普及,还没有大面积应用开来。

5. 特殊IP地址

在上面说到的众多IP地址中,我们需要记一个特殊的,就是 127.0.0.1,这个地址永远都是代表你的本机地址,只会寻找你的本机。

4. 端口号

(1)端口号是应用程序在设备中的唯一标识,它是由两个字节表示的整数,范围是 0~65535 之间的任意一个数;

(2)并不是这个范围之内的端口都可以使用,其中 0~1023 之间的端口都是被一些固定的网络应用或者网络服务占用的,我们是用不了,只能使用 1024之后的端口。

(3)一个端口号只能被一个程序绑定使用;

5. 协议

计算机网络中,连接和通信的规则被称为网络通信协议。而现在最为广泛使用的就是TCP协议以及UDP协议,

5.1 UDP协议

UPD 全称 User Datagram Protocol(用户数据报协议),UDP是面向无连接的通信协议,他的速度快,但有大小限制,每次只能发送64K大小的数据,数据不安全,有可能产生数据丢失。

5.2 TCP协议

TCP 协议全称 Transmission Control Protocol(传输控制协议),TCP协议是面向有连接的通信协议,速度慢但没有大小限制,数据安全。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 的 socket 库来检测 IP 端口是否开放。下面是一个简单的代码示例: ``` import socket ip = '127.0.0.1' port = 80 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(5) def is_open(ip, port): try: s.connect((ip, port)) s.shutdown(2) return True except: return False if is_open(ip, port): print(f"{ip}:{port} is open") else: print(f"{ip}:{port} is closed") ``` 在上面的代码中,我们定义了一个 `is_open` 函数,它使用 socket 连接到目标 IP端口,如果连接成功,则说明该端口是开放的;如果连接失败,则说明该端口是关闭的。 ### 回答2: Python可以通过socket库来检测IP端口。 首先,需要引入socket库: ``` import socket ``` 然后,可以使用socket库中的函数来检测IP端口。比如,可以使用socket库中的`socket.connect_ex()`函数来尝试连接指定的IP端口: ``` def check_ip_port(ip, port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex((ip, port)) if result == 0: print(f"IP地址 {ip} 的端口 {port} 是开放的") else: print(f"IP地址 {ip} 的端口 {port} 是关闭的") sock.close() except socket.error as e: print(f"检测IP端口出错: {str(e)}") ``` 在上述代码中,我们创建了一个socket对象,并使用`socket.AF_INET`和`socket.SOCK_STREAM`来指定使用IPV4协议TCP连接。然后通过`socket.connect_ex()`函数来进行连接,并根据返回值判断该端口是否开放。 可以调用上述函数来检测特定的IP端口: ``` check_ip_port("192.168.0.1", 80) ``` 这样,就可以检测指定IP端口是否处于开放状态。当端口开放时,程序会打印出端口是开放的消息,否则打印出端口是关闭的消息。 ### 回答3: Python可以使用socket模块来检测IP端口。 首先,我们需要导入socket模块。 然后,创建一个Socket对象。 接下来,可以使用connect()方法连接到指定的IP端口。 如果连接成功,说明该IP端口是可访问的;如果连接失败,说明该IP端口不可访问。 下面是一个简单的示例代码: ```python import socket def check_ip_port(ip, port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(2) # 设置超时时间为2秒 result = sock.connect_ex((ip, port)) if result == 0: print(f"IP地址 {ip} 的 {port} 端口可访问") else: print(f"IP地址 {ip} 的 {port} 端口不可访问") sock.close() except socket.error: print("发生错误,请检查输入的IP端口") # 调用函数进行IP端口检测 check_ip_port("192.168.0.1", 80) ``` 在示例代码中,我们使用socket.AF_INET参数指定使用IPv4地址,使用socket.SOCK_STREAM参数指定使用TCP协议。 通过connect_ex()方法连接到指定的IP端口,返回值0表示连接成功,非零值表示连接失败。 最后,根据连接的结果打印相应的信息。 请注意,运行此代码需要保证网络连接正常,并且输入的IP地址和端口号正确。 如果连接时间过长,可以适当调整超时时间。 这只是一个简单的示例,实际的情况可能更加复杂,需要额外的处理和错误判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值