Python全栈最全学习之路-网络编程(一)

传输模型与套接字

一、传输模型

1、传输模型

在这里插入图片描述
从图我们可以详细的看到,一般我们只能看到应用A到应用B的,其实网络通信它的过程很复杂,通过各种协议、封装、物理层然后到达另外一个网络设备解封、还原后得到刚开始发送得可视的数据呈现出来的。套接字(socket)

2、层次模型

各层说明OSI七层网络模型TCP/IP四层模型对应协议
供操作系统或应用进行网络通信的标准接口应用层
将不同的编码方式转化成网络通信中采用的标准表现形式(如:UTF-8)表示层应用层Telnet、FTP、SMTP、DNS、HTTP
不同pc不同进程间建立或解除连接,插入同步点会话层
两个主机间端对端的数据连接与传输传输层传输层TCP、UDP
选择路由并正确的找到目标主机网络层网络层IP、ARP、RARP、ICMP
两个相邻节点间准确的数据传输数据链路层
原始比特数据在物理介质上的传输物理层数据链路层网络通信硬件与接口

上面的表格为网络基础里的七层模型和四层模型,
七层模型的话是国际的标准形式,而四层模型是实际中使用的情况,当然七层模型划分的更细、更清楚。七层的后三层代表四层的最后一层七层的后两层代表着四层的第一层层数是从下到上.

3、应用层

名称解释
http超文本传输协议,使用浏览器查询web服务器之间传输的协议
ftp文本传输协议,实现网上与主机之间文件交换的协议
smtp简单邮件传输协议,定义了邮件如何在邮件服务器之间传输的协议
pop邮件协议,定义了将用户从邮件服务器下载到本地服务器的协议
telnet远程登录协议,远程使用网上其他计算机使用的协议,以获取其他计算机上运行或存储的信息
dns域名系统,实现域名到ip地址之间的转换

以上都是一些简单的基本协议,而且他们还对应着各自的端口。

4、传输层

网络协议是指通信双方就通信如何进行所必须共同遵守的约定和通信规则的集合,在网络上通信的双方只有遵守相同的协议,才能正确地交流信息

4-1、TCP

1、通过三次握手协议建立稳定链接
2、应用数据分隔成最合适的数据块发送
3、链接可靠,不易出现乱序,丢失等现象
4、连接和校验等都需要花不少时间,效率因此会降低。

4-2、UDP

1、一次性发送所有数据,无需建立连接
2、服务器可以同时发送多个客户机
3、没有校验,容易出现信息丢失
4、消耗资源小,处理速度快

5、网路层

名称解释
IP因特网上的每台计算机和其他设备都规定了一种地址,叫做“IP地址”
ARP地址转换协议,完成IP地址到物理地址的转化
RARP反向地址转换协议,完成物理地址到IP地址的转换
ICMP控制报文协议,发送信息,并且报告数据包的传送错误

6、IPV4和IPV6

在这里插入图片描述
ipv4是第一个被广泛应用到的ip,IP是TCP/IP协议簇中网络层的协议,是TCP/IP协议簇的核心协议。
ipv4的地址长度规定为32位,分为四段,每段8位且以点隔开,并以十进制的形式表示,故每段的数值范围为0-255,即最小的为0.0.0.0,最大为255.255.255.255
由于ipv4位数使得其地址资源已被分配完,故产生了ipv6
ipv6的长度是ipv4的四倍,以十六进制形式表示,其被分为8段,每段以冒号隔开。
其中地址快127.0.0.1,被保留作为环回通信用,0.0.0.0位任意使用。

7、端口(port)

在这里插入图片描述
当同时多个程序使用网络时,为了保证信息发送到正确的地方,增加了端口,不同的软件使用不同的端口,虽然使用同一个网络,但是因为端口不一样,也能保证信息发送给正确的人。
端口号的范围从0到65535(2^16-1),比如用于浏览网页服务的80端口,用于FTP服务的21端口等。
IP地址用于区分不同的主机,而端口号是用于区分一个主机下不同的网络服务

二、TCP协议

1、建立连接

在这里插入图片描述
三次握手
第一步:客户端发送SYN报文给服务端,进入SYN_SEND状态。
第二步:服务端收到SYN报文,回应一个SYN_ACK报文,进入SYN_RECV状态。
第三部:客户端收到服务器的SYN报文,回应一个ACK报文,进入Established状态。
三次握手完成,TCP客户端和服务端成功地建立连接,可以开始传输数据了。

2、长连接与短连接

2-1、短连接

建立连接–数据传输–关闭连接……建立连接–数据传输–关闭连接

2-2、长连接

建立连接–数据传输……(保持连接)……数据传输–关闭连接

3、断开连接

在这里插入图片描述
四次挥手
第一步:先由客户端向服务器发送一个FIN,请求关闭数据传输。
第二步:当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ACK的值等于FIN+SEQ
第三步:然后服务器向客户端发送一个FIN,告诉客户端应用程序关闭。
第四步:当客户端接收到服务端的FIN时,恢复一个ACK给服务端。其中ACK的值等于FIN+SEQ

三、创建套接字

1、服务端

在这里插入图片描述
#fd 文件描述符(唯一标识一个socket)
#AF_INET标识IPV4AF_INET6表示IPV6
#SOCK_STRAM表示TCPDGRAMUDP
#protocol协议,通常是0tcp/ip协议簇
#laddr中还没绑定,所以都是0

2、客户端

import socket
client = socket.socket()
client.connect(('127.0.0.1',8989)) #连接到服务器

客户端连接
客户端主要做连接和发送消息,测试用,主要学习重点还是在服务器
在这里插入图片描述

3、对等连接套接字

在这里插入图片描述
对等连接套接字
要想发送数据,还需要使用对等连接套接字

四、发送数据

1、发送与接收数据

在这里插入图片描述
数据必须是字节类型
recv指定接收的最大长度

2、关闭

在这里插入图片描述
在这里插入图片描述
套接字和文件类似,也是需要关闭
先关闭对等连接套接字,再关闭服务端

3、阻塞

挡客户端没有连接,或者发送数据的时候,服务端执行accept和recv都会产生阻塞
单工:广播,只收对方的信息,只发不收
半双工:同一时刻只能一个人讲
全双工:可以同时讲和收
在这里插入图片描述
客户端还没发数据时候,等发了以后
在这里插入图片描述

4、总结

4-1、服务端连接

bind、listen

4-2、客户端连接

connect

4-3、发送与接收

send、recv

4-4、关闭

close

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值