网络通信
主旨
使用网络能够把多方链接在一起,然后可以进行数据传递。
所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信
命令
ping : 通常用来测试网络是否正常
ifconfig : 在Linux操作系统下 ,会显示所有网卡的信息
ipconfig : 在windows操作系统下,会显示所有网卡的信息
netstat -an :查看端口状态
端口
在网络技术中,端口有好几种意思。集线器、交换机、路由器的端口指的是连接其他网络设备的接口。
这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。
因为IP地址与网络服务的关系是一对多的关系,实际上是通过“IP地址+端口号”来区分不同的服务的。
端口是通过端口号来标记的
知名端口是众所周知的端口号,范围从0到1023
动态端口的范围是从1024到65535
端口就好比是敲门砖。
访问谷歌的过程 (只是例子)
需要一个交换机,然后联通路由器,会发现我一开始的MAC地址 是通过路由器的信息 要找dns服务器需要中转dns服务器,
最后返回的ip地址是谷歌的IP地址 dns存放的域名和相应的IP地址 发送arp广播 获得默认网关的MAC地址,
然后向dns 服务器 发送查询 www.google.com 对应的IP请求 如果dns 找到了www.google 对应的IP 会将这个IP地址返回请求方,
也就是我本机,接下来会通过三次握手 链接 http服务器 链接成功会发送真正 的 http请求 ,得到www.google的主页内容
http服务器接收到请求后,组织主页的内容数据,将内容返回到请求方的电脑。
socket
程序如果想通过网络进行收发数据,需要使用socket进行编程来实现
socket(简称套接字)是进程 (正在运行的程序) 之间通信的一种方式,它与其他进程间通信的一个主要不同是:
它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于socket 来完成通信的
例如: 发送邮件、QQ聊天等
创建 socket
在 Python 中 使用socket 模块的socket 函数就可以完成:
import socket
socket.socket(AddressFamily, Type)
流程:
- 创建套接字
- 使用套接字收/发数据
- 关闭套接字
TCP/IP协议 (两套标准)
MAC地址:在设备与设备之间数据通信时用来标记收发双方(网卡的序列号)
IP地址:在逻辑上标记一台电脑,用来指引数据包的收发方向(相当于电脑的序列号)
网络掩码:用来区分ip地址的网络号和主机号
默认网关:当需要发送的数据包的目的ip不在本网段内时,就会发送给默认的一台电脑,成为网关
集线器:已过时,用来连接多态电脑,缺点:每次收发数据都进行广播,网络会变的拥堵
交换机:集线器的升级版,有学习功能知道需要发送给哪台设备,根据需要进行单播、广播
路由器:连接多个不同的网段,让他们之间可以进行收发数据,每次收到数据后,ip不变,但是MAC地址会变化
DNS:用来解析出IP(类似电话簿)
http服务器:提供浏览器能够访问到的数据