网络编程

网络编程

TCP/IP协议

应用层

传输层 TCP UDP

网络层 IP

接口层 MAC

ISO理论模型

应用层 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet

表示层

会话层

传输层 TCP,UDP

网络层 IP,ICMP,RIP,OSPF,BGP,IGMP

数据链路层 SLIP,CSLIP,PPP,ARP,RARP,MTU

物理层

IP地址

由32位二进制组成,8位一组

私有ip地址

10.0.0.0 - 10.255.255.255 A类地址

172.16.0.0 - 172.31.0.0 B类地址

192.168.0.0 - 192.168.255.255 C类地址

特殊IP地址

192.168.1.0 主机号最小的就是网段 就是网络号

192.168.1.255 主机号最大的就是广播地址

127.0.0.1 回路测试 仅仅检测你的电脑支不支持TCP/IP

MAC地址

物理地址 身份证号

由12位16进制组成,分成两部分,前半部分是厂商标识,后半部分是厂商自己定义 MAC地址全球独一无二,修改MAC地址,只是伪造。

子网掩码

确定一个IP地址在哪一个网段,也是一个IP地址

192.168.1.101 1100 0000 1010 1000 0000 0001 0110 0101

255.255.255.0 1111 1111 1111 1111 1111 1111 0000 0000

位运算与 1100 0000 1010 1000 0000 0001 0000 0000

​ 192.168.1.0 网段 网络号

192.168.2.12

255.255.255.0

192.168.2.0

网关

如果通信目标不在同一网段,这个包先交给网关处理

端口

标识哪个进程,好比你家的窗口

设备

HUB集线器

只是把电脑连接在一起,发送数据会发给整个网段,可能会发生网络风暴

交换机

自带学习功能,会记住整个网段的IP和MAC对应关系 把数据发给指定的电脑,相对HUB集体器来说,很少会发生网络风暴

路由器

联通不同网段,相当于古代的驿站

UDP

是传输层的一个协议,相当写信,是一种无连接,不安全,通常用于局域网内通信

检测网络是否畅通
  1. ping 对方IP地址

  2. 查看服务端的端口在服务器上通过netstat -natu 查看你要连接的端口号是否在监听状态

  3. telnet去尝试连接端口,如果发现端口连接不上,那一般是防火墙,如果是云服务器,一般在你的阿里云或者腾讯云还有一个防火墙

    在局域网测试,一定要保证你的目录IP地址和你的IP地址在同一个网段

UDP客户端
from socket import *

# 生成一个对象
udp_socket = socket(AF_INET, SOCK_DGRAM)

while True:
    # 地址
    address = ("192.168.1.115", 2425)
    # 发送信息 
    udp_socket.sendto("1:525:嘿嘿嘿:嘿嘿嘿:32:红红火火恍恍惚惚".encode('gb2312'), address)
UDP服务端
from socket import *


# 创建对象
udp_server = socket(AF_INET, SOCK_DGRAM)
# 绑定端口
udp_server.bind(("", 51748))
# 接收消息
while True:
    data, address = udp_server.recvfrom(1024)
    print(data.decode("gb2312"))
UDP聊天室
from threading import Thread
from socket import *


def read():
    while True:
        data, address = udp_socket.recvfrom(1024)
        print(f"\r<<来自{address}的消息 {data.decode('gb2312')}", end="\n<<")


def write():
    while True:
        send_data = input(">>")
        udp_socket.sendto(send_data.encode("gb2312"), (ip, port))


ip = "172.16.17.15"
port = 8080

udp_socket = socket(AF_INET, SOCK_DGRAM)
udp_socket.bind(('', 8082))

r = Thread(target=read)
w = Thread(target=write)
r.start()
w.start()
r.join()
w.join()
echo客户端
from socket import *

# 创建一个对象
udp_client = socket(AF_INET, SOCK_DGRAM)

address = ("172.16.17.15", 8088)

data_send = input("请输入:")
# 发送消息到服务端
udp_client.sendto(data_send.encode("utf-8"), address)
# 接收消息
data, address = udp_client.recvfrom(1024)
print(data.decode("utf-8"))
echo服务端
from socket import *

# 创建对象
udp_server = socket(AF_INET, SOCK_DGRAM)
# 绑定地址和端口
udp_server.bind(("", 8088))
while True:
    # 接收消息
    raw_data, address = udp_server.recvfrom(1024)
    # 发送消息会客户端
    udp_server.sendto(raw_data, address)
    print(raw_data.decode("utf-8"))

转载于:https://my.oschina.net/u/4161332/blog/3072247

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值