python2 网络编程

一、udp网络通信过程:(类似于发快递)
1,应用层编写数据(你好),然后向下层传递2,传输层在数据前面加上端口号(包括发送端口和目的端口)
3,网络层继续在前面加上IP地址(包括原IP和目的IP)
4,链路层再在前面加上mac地址(mac:硬件地址,用来定义网络设备的位置)
此时数据变成了:mac地址 IP地址 端口号 数据内容

在这里插入图片描述
应用层:应用程序间沟通的层,不同的文件系统有不同的文件命名原则和不同的文本行表示方法等,不同的系统之间传输文件还有各种不兼容问题,这些都将由应用层来处理
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,这一层负责传送数据,并且确定数据已被送达并接收
网络层:负责提供基本的数据包传送功能,让每一块数据包都能够到达目的主机。网络层接收由更低层发来的数据包,并把该数据包发送到更高层,相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层
网络接口层:对实际的网络媒体的管理,定义如何使用实际网络来传送数据(处理机械的、电气的和过程的接口)
了解即可,面试经常会问网络协议分几层

TFTP 基于UDP实现的
TFTP(Trivial File Transfer Protocol,简单⽂件传输协议)是TCP/IP协议簇中的⼀个⽤来在客户端与服务器之间进⾏简单⽂件传输的协议

实现TFTP下载器:
下载:从服务器上将一个文件复制到本机上
下载的过程:
在本地创建一个空文件(与要下载的文件同名)
向里面写数据(接收到一点就向空文件里写一点)
关闭(接受完所有数据关闭文件)
在这里插入图片描述
在这里插入图片描述

import struct
from socket import *
filename = 'test1.jpg'
server_ip = '192.168.1.3'
send_data = struct.pack('!H%dsb5sb' % len(filename), 1, filename.encode(), 0, 'octet'.encode(), 0)
s = socket(AF_INET, SOCK_DGRAM)
s.sendto(send_data, (server_ip, 69))  # 第一次发送, 连接服务器69端口
f = open(filename, 'ab')  #a:以追加模式打开(必要时可以创建)append;b:表示二进制
while True:
    recv_data = s.recvfrom(1024)  # 接收数据
    caozuoma, ack_num = struct.unpack('!HH', recv_data[0][:4])  # 获取数据块编号
    rand_port = recv_data[1][1]  # 获取服务器的随机端口

    if int(caozuoma) == 5:
        print('文件不存在...')
        break
    print("操作码:%d,ACK:%d,服务器随机端口:%d,数据长度:%d"%(caozuoma, ack_num, rand_port, len(recv_data[0])))
    f.write(recv_data[0][4:])#将数据写入
    if len(recv_data[0]) < 516:
        break
    ack_data = struct.pack("!HH", 4, ack_num)
    s.sendto(ack_data, (server_ip, rand_port))  # 回复ACK确认包

打开TFTP服务器,定位好文件所在的位置,server_ip地址对应好, Software L模式。最后生成test1.jpg

二、TCP 在收发数据前,必须和对方建立可靠的连接
2.1 三次握手
一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:
主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话
主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话
主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话
三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据

2.2 四次挥手
第一次挥手:我要关了,
第二次挥手:好的
第三次挥手:我不传了
第四次挥手:好的

第一次挥手:主动关闭方调用close,会发送一个长度为0的数据包以及FIN(结束标志)
用来关闭主动方到被动关闭方的数据传送,
告诉被动关闭方:我已经不会再给你发数据了,但是,此时主动关闭方还可以接受数据
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,
我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手

三、UDP TCP 区别
1.基于连接与无连接
2.对系统资源的要求(TCP较多,UDP少)
3.UDP程序结构较简单
4.流模式与数据报模式
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证

四、网络通信的流程
1,应用层编写数据(你好),然后向下层传递
2,传输层在数据前面加上端口号(包括发送端口和目的端口)
3,网络层继续在前面加上IP地址(包括原IP和目的IP)
4,链路层再在前面加上mac地址(mac:硬件地址,用来定义网络设备的位置)
此时数据变成了:mac地址 IP地址 端口号 数据内容
5.传给交换机 (连接局域网中的电脑,端与端连接,并生成对应表,避免广播风暴。假设端口1和端口8从没有通信过,那么开始的时候,他们的工作和hub一样,端口1要在交换机上找端口8,一旦端口8返回确认信息,那再端口1上就会生成1个和端口8的地址对应表)
6.传给路由器 (用来链接网络号不同的、不同的网络)
7.找到目标服务器的路由器
8.找到目标服务器的交换机
9.找到目标服务器

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值