Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

基础网络知识

2019/09/15 计算机网络知识
Word count: 798 | Reading time: 3min

什么是客户端、服务器端?

客户端 :

​ 发送数据、接收返回数据端

服务器:

​ 处理数据端


TCP :

面向连接—> 打电话(相互回复,一来一回)

客户端向服务器端 拨号 , 三次握手 ,

UDP :

面向无连接 --> 寄快递(寄出去就不管了). 比如 : 直播

UDP四层结构

  • 网络访问层(链路层): 物理连接设备(网线)、MAC地址(物理地址)

  • 互联网层: IP地址(定位设备)

  • 传输层: port (端口号) : 表示通信进程,将数据交给哪个应用处理

  • 应用层: 自己定义的协议(处理字符串消息的方法)

port :

知名端口 : 0 - 1023,有指定的应用程序

可自由使用的端口 : 1024 - 65535

▲广播只能使用UDP,TCP没有广播功能。一般广播只用在局域网内(路由器不转发广播)。


套接字(socket) :

特殊的设备文件 , 写网络应用程序的接口,写入后就是发送,接收就是读取。 应该类似于 esp8266吧…

Python演示程序

服务器端程序

1
2
3
4
5
6
7
8
9
10
11
12
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
'''
参数说明:
AF_INET IPv4
STREAM TCP
SOCK_DGRAM UDP
'''
server_addr = ('127.0.0.1',8888) # 本地回环地址 , 端口
s.bind(server_addr) # 绑定、传入信息
data,cilent_addr = s.recvfrom(1024) # BUF_SIZE指定接收数据长度 , (数据内容,客户端地址)
s.sendto(data,cilent_addr) # 给客户端发送数据

客户端程序

1
2
3
4
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server_addr = ('192.168.43.3',8888)
s.sendto(b'hello',server_addr)

广播程序

255.255.255.255为广播地址

广播端接收程序

1
2
3
4
5
6
7
8
9
10
11
12
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

PORT = 9999
s.bind( ('', PORT) )
# 这边必须是'',不能为自己的IP(否则只接受自己IP的,不接受255.255.255.2555的广播)
print('Listening for broadcast at ', s.getsockname())

while True:
data, address = s.recvfrom(65535)
print('Server received from {}:{}'.format(address, data.decode('utf-8')))

广播发送程序

1
2
3
4
5
6
7
8
import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
# 创建套接字,UDP默认没有广播权限
PORT = 9999
network = '<broadcast>'
# <==> network = '255.255.255.255'
s.sendto(b'hel',(network,PORT))

拓展 :

大端和小端模式的概念

网络通信时 通常使用大端


Linxu下ifconfig命令:

  • eth0 网卡

  • wlan0 无线网卡


偶然发现安卓开热点的局域网地址是192.18.x.x,而苹果的热点局域网IP地址是172.20.x.x,于是搜了了解下

  1. 192.168网段是一种私有IP地址网段,任何人在私有网络中都可以任意使用这些IP地址,但是如果要连接外网就要使用网络地址转换NAT技术进行转换后才能连接外网
  2. 在宽带路由器上一般默认的内网IP地址为192.168.0或192.168.1网段,它是经过路由器的NAT技术转换为WAN接口的公用IP地址而连接外网的;
  3. 这样的私有IP地址除了这个网段外,还有B类网络的172.16-172.31及A类网络的10网段都是私有IP地址。

Author: Mrli

Link: https://nymrli.top/2019/01/22/基础网络知识/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
Python中对时间戳、时间的处理
NextPost >
Jupyter使用
CATALOG
  1. 1. 什么是客户端、服务器端?
    1. 1.1. 客户端 :
    2. 1.2. 服务器:
  2. 2. TCP :
  3. 3. UDP :
    1. 3.1. UDP四层结构
      1. 3.1.1. port :
  4. 4. 套接字(socket) :
  5. 5. Python演示程序
    1. 5.1. 服务器端程序
    2. 5.2. 客户端程序
    3. 5.3. 广播程序
  6. 6. 拓展 :