网络编程(包含TCP/IP协议/套接字)

01、网络通信概述
1、什么是网络?
简单意义上来说,网络就是⼀种辅助双⽅或者多⽅能够连接在⼀起的⼯具。

官方对于网络的定义为:

网络是由若干节点和连接这些节点的链路构成,表示诸多对象及其相互联系。

在1999年之前,人们一般认为网络的结构都是随机的。但随着Barabasi和Watts在1999年分别发现了网络的无标度和小世界特性并分别在世界著名的《科学》和《自然》杂志上发表了他们的发现之后,人们才认识到网络的复杂性。 [1]

网络会借助文字阅读、图片查看、影音播放、下载传输、游戏、聊天等软件工具从文字、图片、声音、视频等方面给人们带来极其丰富的生活和美好的享受。

2、我们使用网络的目的
联通多⽅然后进⾏通信⽤的,即把数据从⼀⽅传递给另外⼀⽅。

⽤⽹络能够把多⽅链接在⼀起,然后可以进⾏数据传递

⽹络编程就是,让在不同的电脑上的软件能够进⾏数据传递,即进程之间的通信,如下图:
在这里插入图片描述
02、TCP/IP协议
1、什么是网络通信协议
网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。
比如我们日常生活中,有的人说英语,有的人说中⽂,有的人说德语,说同⼀种语⾔的⼈可以交流,不同的语⾔之间就不⾏了 为了解决不同种族⼈之间的语⾔沟通障碍,现规定国际通⽤语⾔是英语,这就是⼀个规定,这就是协议。
再比如,网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。因此,网络通信协议也可以理解为网络上各台计算机之间进行交流的一种语言。
常见的网络通信协议有:TCP/IP协议(最常用)、IPX/SPX协议、NetBEUI协议等。
2、什么是TCP/IP协议
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议) 协议具有很强的灵活性,支持任意规模的网络,几乎可连接所有服务器和工作站。在使用TCP/IP协议时需要进行复杂的设置,每个结点至少需要一个“IP地址”、一个“子网掩码”、一个“默认网关”、一个“主机名”,对于一些初学者来说使用不太方便。
就像说不同语⾔的⼈沟通⼀样,只要有⼀种⼤家都认可都遵守的协议即可, 那么这个计算机都遵守的⽹络通信协议叫做 TCP/IP协议。
互联⽹协议包含了上百种协议标准,但是最重要的两个协议是TCP和IP 协议,所以,⼤家把互联⽹的协议简称TCP/IP协议
3、TCP/IP分层协议
TCP/IP参考模型是首先由ARPANET所使用的网络体系结构,共分为四层(个别参考把其分为5层):网络接口层(又称链路层)、网络层(又称互联层)、传输层和应用层,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

每一层对应的协议有:

网络接口层协议:Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。
网络层协议:IP(Internet Protocol,英特网协议)、ICMP(Internet Control Message Protocol,控制报文协议)、ARP(Address Resolution Protocol,地址转换协议)、RARP(Reverse ARP,反向地址转换协议)。
传输层协议: TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram protocol,用户数据报协议)。
应用层协议:FTP(File Transfer Protocol,文件传输协议)、TELNET(用户远程登录服务协议)、DNS(Domain Name Service,是域名解析服务)、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)、NFS(Network File System,网络文件系统)、HTTP(Hypertext Transfer Protocol,超文本传输协议)。
在这里插入图片描述

1)IP地址

1、定义:IP地址是一种在Internet上的给主机编址的方式,也称为网际协议地址。

2、作用:⽤来在⽹络中标记⼀台电脑的⼀串数字,⽐如192.168.1.1;在本地局域⽹上是惟⼀的。
在这里插入图片描述

3、分类:每⼀个IP地址包括两部分:⽹络地址和主机地址 ,有如下几种类型:
在这里插入图片描述
4、私有IP:⽹络IP中,国际规定有⼀部分IP地址是⽤于局域⽹使⽤,也 就是属于私⽹IP,不在公⽹中使⽤的,它们的范围是:

  10.0.0.010.255.255.255    
 
  172.16.0.0172.31.255.255     
 
  192.168.0.0192.168.255.255

5、回环地址IP:

IP地址127.0.0.1 代表本机IP地址,等价于localhost, ⽤ http://127.0.0.1 就可以测试本机中配置的Web服务器。
127.0.0.1,通常被称为本地回环地址(Loop back address),不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在windows操作系统中也有相似的定义,所以通常在不安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。
6、子网掩码:⼦⽹掩码不能单独存在,它必须结合IP地址⼀起使⽤。

⼦⽹掩码的作⽤: 将某个IP地址划分成⽹络地址和主机地址两部分. ⼦⽹掩码的设定

必须遵循⼀定的规则, 用来判断两个IP是否在同一个网络。

                     A: 172.25.254.18/24

                     B: 172.25.0.10/24

7、端口:端⼝就好⼀个房⼦的⻔,是出⼊这间房⼦的必经之路。

端⼝号只有整数,范围是从0到65535;

8、linux中如何查看端口呢?

在命令行输入:cat /etc/services | less 即可查看所需要的查看的服务的端口。

(当然,前提是你的主机安装了你所要查询的服务才能够查询到)

比如:查看http服务的端口:命令行输入:cat /etc/services | less (可以查看规定好的服务对应的端口号)

03、socket编程
1、为什么需要socket?
通过之前的学习, 我们知道本地间通信(IPC)有队列、同步(互斥锁、条件变量等)、以及管道等方法。

但是不同主机之间如果需要通信,则就需要用到socakt.

问题: 本地通过进程PID来唯⼀标识⼀个进程,在⽹络中如何唯⼀标识⼀个进程?

⽹络层的“IP地址”可以唯⼀标识⽹络中的主机,⽽传输层的“协议+端⼝”可以唯⼀标识主机中的应⽤程序(进程)。因此利用IP地址,协议,端⼝就可以标识⽹络的进程。

2、什么是socket?
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

简单来说:socket(简称套接字) 是进程间通信的⼀种⽅式, 能实现不同主机间的进程间通信,我们⽹络上各种各样的服务⼤多都是基于 Socket 来完成通信的。比如以下服务等都是基于socket 来完成通信的。

在这里插入图片描述
3、创建socket
在 Python 中 使⽤socket 模块的函数 socket 就可以完成:

socket.socket(AddressFamily, Type)

1). Address Family:

AF_INET: IPV4⽤于 Internet 进程间通信 AF_INET6: IPV6⽤于 Internet 进程间通信

2). Type:套接字类型

SOCK_STREAM: 流式套接字,主要⽤于 TCP 协议 SOCK_DGRAM: 数据报套接字,主要⽤于 UDP 协 议

import socket
 
# 1. 创建socket对象
#       family: AF_INET(IPv4)   AF_INET6(IPv6)      ========= 网络层协议
#       type: # SOCK_STREAM(TCP)   SOCK_DGRAM(UDP) ========== 传输层协议
#       Linux: 可以认为是一个文件;
socketObj = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
print(socketObj.getsockname())
 
#2.  关闭socket对象
socketObj.close()
 
# 2. socket基本使用
import os
os.system('hostname')
 
hostname = socket.gethostname()
print("主机名:", hostname)
 
print(socket.gethostbyname('localhost'))

04、socket中的UDP与TCP
1、UDP
1)什么是UDP

UDP ⽤户数据报文协议,是⼀个⽆连接的简单的⾯向数据报文的运输层(传输层)协议。UDP不提供可靠性,它只是把应⽤程序传给IP层的数据报发送出去,但 是并不能保证它们能到达⽬的地。
由于UDP在传输数据报前不⽤在客户和服 务器之间建⽴⼀个连接,且没有超时重发等机制,故⽽传输速度很快。
UDP是⼀种⾯向⽆连接的协议,每个数据报都是⼀个独⽴的信息,包括完整 的源地址或⽬的地址,它在⽹络上以任何可能的路径传往⽬的地,因此能否到达⽬的地,到达⽬的地的时间以及内容的正确性都是不能被保证的。
2)UDP的特点

UDP是⾯向⽆连接的通讯协议,UDP数据包括⽬的端⼝号和源端⼝号信息, 由于通讯不需要连接,所以可以实现⼴播发送。
UDP传输数据时有⼤⼩限 制,每个被传输的数据报必须限定在64KB之内。
UDP是⼀个不可靠的协议,发送⽅所发送的数据报并不⼀定以相同的次序到达接收⽅。
在这里插入图片描述

3)UDP应用场景

UDP是⾯向消息的协议,通信时不需要建⽴连接,数据的传输⾃然是不可靠 的,UDP⼀般⽤于多点通信和实时的数据业务,⽐如:

语⾳⼴播
视频
QQ
TFTP(简单⽂件传送)
SNMP(简单⽹络管理协议)
DNS(域名解释(域名服务器))等等
4)UDP⽹络程序

通过UDP通信服务的过程: 无论是服务端还是客户端,都需要首先建立一个socket()对象将来进行通信,服务端需要绑定一个IP或一个端口。客户端想要给客户端发消息,由于UDP是无连接的,所以客户端不需要通知服务端,直接发送就好了,消息发送之后,服务端优势会做出一个响应回复给客户端,然年后客户端会进行接收,这样一次通信就结束了。当客户端决定 不发消息了,此时就可以结束掉socket()对象了。(当然,如果服务端也不想让别人给发送消息的时候,也可以吧自己的socket()对象结束掉。)图解如下:

在这里插入图片描述

在这里插入图片描述

实验:

服务端(UDP Server):提供服务
创建socket对象 ---- 绑定IP和端口 ---- 接收信息 ---- 发送消息(一个响应) ---- 关闭

客户端(UDP Client):访问提供的服务
创建socket对象 ---- 发送消息 ---- 接收消息 ---- 关闭

发布了22 篇原创文章 · 获赞 0 · 访问量 181

猜你喜欢

转载自blog.csdn.net/weixin_45734982/article/details/104219134