传输模型与套接字
一、传输模型
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
标识IPV4
,AF_INET6
表示IPV6
#SOCK_STRAM
表示TCP
,DGRAM
是UDP
#protocol
协议,通常是0
,tcp/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