一、IP和ARP协议(了解)
以太网协议:
(1)一组电信号称为一组数据报或一组数据帧
(2)但凡接入互联网的煮鸡,必须有一块独一无二的网卡
(3)所有的数据报都必须分为报头和数据两部分。报头固定18个字符
IP协议:
- 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
- 范围0.0.0.0-255.255.255.255
- 一个ip地址通常写成四段十进制数,例:172.16.10.1
ip地址分成两部分
- 网络部分:标识子网
- 主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网
例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
2、ARP协议
作用:以广播的方式发送数据包,获取目标主机的mac地址
二、套接字socket
1、socket是什么?
翻译过来称为套接字,是对底层的 TCP IP UDP 等网络协议进行封装,使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议 在程序员的言论,他就是一个封装好的模块!要完成网络通讯,只需要使用系统提供的socket模块就行2、TCP和UDP是传输层最常见的协议,主要控制传输数据的方式。(传输层)
TCP:
传输方式:通过三次握手来与服务器建立连接,优点:可以保证数据的完整性
比如:a机器给b机器发送数据包 要求b机器必须立即返回一个确认包,a机器会等待一段时间,如果超时还没有收到确认,则重发数据
缺点:传输效率低 使用场景: 文字聊天,支付宝转账等,UDP:
传输方式:不需要建立连接,直接发送 缺点: 不能保证数据的完整性 优点:传输效率比TCP高 使用场景:视频通话,语音通话,UDPpython中的socket
在使用socket的时候用户需要关心的是 ip地址,port端口, 传输协议TCP/UDP,你要发送的数据data
在写网络编程的时候,必然是有两台代码,对应着客户端和服务器
使用socket来完成TCP通讯
应该先完成服务器的代码编写3、TCP的服务端:
import socket#1.买手机phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议,print(phone) #是用来接收链接请求,从而建立链接的#2.插手机卡phone.bind(('127.0.0.1',8080)) #0-65535#3.开机phone.listen(5) # 同一时刻最大请求数为5个print('start....')#4.等待电话请求conn,client_addr=phone.accept() #(双向链接的套接字对象,存放客户端ip和端口的小元组)# print(conn) # conn代表双向链接,用来收发消息# print(client_addr)#5.收\发消息data=conn.recv(1024) #1024接收的最大字节数bytesprint('收到客户的数据',data)conn.send(data.upper())#6.挂电话链接conn.close()#7.关机phone.close()
4、TCP的客户端
import socket#1.买手机phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议,#2.拨号phone.connect(('127.0.0.1',8080))#3.发\收消息phone.send('hello'.encode('utf-8')) # 只能发bytes类型data=phone.recv(1024)print('收到服务端的消息: ',data)#4.挂电话链接phone.close()
5、UDP的服务器
import socket# 1.创建socket对象s = socket.socket(type=socket.SOCK_DGRAM)# 2.绑定端口和ips.bind(("127.0.0.1",10000))while True: # 3.接受数据 res = s.recv(1024) print(res)while True: msg = input(">>>:") # 需要获取对方的ip和端口 #s.sendto(msg.encode("utf-8"), ("127.0.0.1", 10000))# 关闭资源s.close()
6、UDP的客户端
import socket# 1.创建socket对象c = socket.socket(type=socket.SOCK_DGRAM)while True: msg = input(">>>:") c.sendto(msg.encode("utf-8"),("127.0.0.1",10000))c.close()
7、TCP的通信循环和链接循环的客户端
from socket import *server = socket(AF_INET, SOCK_STREAM)server.bind(('127.0.0.1', 7500))server.listen(5)while True: while True: conn, client = server.accept() data = conn.recv(1024) conn.send(data) conn.close()server.close()