网络编程
1、CS架构与BS架构
cs架构是客户端与服务端的结构
bs架构是浏览器与服务端的结构, 浏览器也属于一种客户端,所以bs是cs的一种结构
Client<===========>Server
客户端软件send 服务端软件recv
操作系统 操作系统
计算机硬件<====物理介质=====>计算机硬件
Browser<===========>Server
2 网络通信
网络存在的意义就是 跨地域数据传输=======>即通信
网络=物理链接介质+互联网通信协议
3 OSI七层协议
应用层-表达层-对话层-传输层-网络层-数据链路层-物理层
协议: 规定数据的组织格式
格式:头部+数据部分
封包裹的过程:数据外加头
拆包裹的过程:拆掉头获取数据
4 五层协议
我们也可以将OSI七层协议中的应用层,表达层,对话层统称为应用层
即得到五层协议
应用层
传输层
网络层
数据链路层
物理层
计算机1: 计算机2:
应用层 应用层
传输层 传输层
网络层 网络层
数据链路层 数据链路层
物理层 <===========交互机===========> 物理层
0101010101010
(源mac地址,目标mac地址)(源ip地址,目标ip地址)数据
4.1 物理层
物理层负责传输电信号
一组物理层的数据称为: 位
单纯的电信号是没有任何意义的,必须对其进行分组才能达到传输数据的目的
4.2 数据链路层
数据链路层得到网络层传来的数据,将其作为自己的数据部分,加上数据链路层的报头
数据链路层的协议是ethernet协议(以太网协议)
计算机通信基本靠吼,即以太网协议的工作方式是广播
规定1:一组数据链路层的数据称为: 帧
规定2:数据帧分成两部分=>头部+数据部分
头包含: 源地址与目标地址,数据类型,该地址是mac地址
数据包含:包含的是网络层发过来的整体的内容
规定3:规定但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的地址,该地址称之为mac地址
`
广播 : 将数据拷贝发送给所有局域网内的计算机
`
通过mac地址,我们理论上能通过广播的形式找到世界上唯一的一台计算机,
但是仅仅是理论上,因为这需要世界上所有的计算机都能听到广播,即将所有计算机都置于同一个局域网内
这是不可能实现的,因为每次某一台计算机发送数据就要对其余所有的计算机进行广播,发送无数份数据出去,
这一次发送数据就要发送无数份数据,要是多台电脑同时发送数据,这将会是一场灾难
`
所以我们需要网络层,进行局域网的划分
4.3 网络层
4.3.1 网络层的作用
网络层可以通过IP地址将计算机分为不同的局域网
每一个广播域(局域网)但凡要接通外部,一定要有一个网关帮内部的计算机转发包到公网
网关与外界通信使用的是路由协议
4.3.2 网络层的协议
网络层得到传输层传来的数据,将其作为自己的数据部分,加上网络层的报头
网络层的协议是IP协议
规定1:一组网络层的数据称为: 包
规定2:数据包分成两部分=>头部+数据部分
头包含: 源地址与目标地址,数据类型,该地址是IP地址
数据包含:包含的是传输层发过来的整体的内容
`
4.3.3 IP地址与子网掩码
我们现在使用的一般是ipv4地址,由ip地址与子网掩码地址组成
`
ip地址是由32位二进制组成的:0.0.0.0 - 255.255.255.255
8bit.8bit.8bit.8bit
子网掩码同样是32位二进制组成,不同在于它分为两部分,左边是网络部分,必须全为1,右边是主机部分,继续全为0
子网掩码:
8bit.8bit.8bit.8bit
255.255.255.0对应的二进制表达
11111111.11111111.11111111.00000000
`
`
`
一个合法的ipv4地址组成部分=ip地址/子网掩码地址
例如: 172.16.10.1/255.255.255.0
或172.16.10.1/24 (24代表网络部分是24位1,即255.255.255.0)
或172.16.10.1 (不写默认为24)
`
我们可以通过IP地址+子网掩码判断该IPV4地址所在的局域网
判断的方式是对他们的每一位进行与运算,得到一个新的32位地址,
如果两台计算机的新地址相同,那么就代表他们就处于同一个局域网
计算机1:
172.16.10.1: 10101100.00010000.00001010.000000001
255255.255.255.0: 11111111.11111111.11111111.000000000
172.16.10.0: 10101100.00010000.00001010.000000000
计算机2:
172.16.10.2: 10101100.00010000.00001010.000000010
255.255.255.255.0: 11111111.11111111.11111111.000000000
172.16.10.0: 10101100.00010000.00001010.000000000
4.3.4 ARP协议
通信时会事先知道对方的ip地址,但是计算机的底层通信是基于ethernet以太网协议的mac地址通信
我们需要一种方法通过IP地址得到mac地址
4.3.4.1 ARP协议的作用
ARP协议能够将ip地址解析成mac地址
4.3.4.2 ARP协议的运作
计算机1的数据到数据链路层时,会通过ARP协议,分析计算机1,2的IP地址与子网掩码,得到二者的网络地址
二者网络地址一样,即二者在同一局域网
1、计算二者网络地址,如果一样,拿到计算机2的mac地址就可以了
2、发送广播包
(发送端mac FF:FF:FF:FF:FF:FF)
(172.16.10.10/24计算机1的IP与子网掩码 172.16.10.11/24 计算机2的IP与子网掩码)
(数据)
3、收到计算机2的响应,得到计算机2的mac地址
4、得到包:
(发送端mac 计算机2的mac)
(172.16.10.10/24计算机1的IP与子网掩码 172.16.10.11/24 计算机2的IP与子网掩码)
(数据)
`
二者网络地址不一样,即二者不在同一局域网
1、计算机二者网络地址,如果不一样,应该拿到网关的mac地址
2、发送广播包
(发送端mac FF:FF:FF:FF:FF:FF)
(172.16.10.10/24计算机1的IP与子网掩码 101.100.200.11/10 计算机2的IP与子网掩码)
(数据)
3、收到网关的响应,得到网关的mac地址
4、得到包:
(发送端mac 网关的mac)
(172.16.10.10/24计算机1的IP与子网掩码 101.100.200.11/10 计算机2的IP与子网掩码)
(数据)
计算机1: 计算机2:
应用层 应用层
传输层 传输层
网络层 网络层
数据链路层 数据链路层
物理层 <=========二层交换机========> 物理层
0101010101010
(源mac地址,网关或目标mac地址)(源ip地址,目标ip地址)数据
| |
数据链路层加的报头 网络层加的报头
4.3.5 总结
ip地址+mac地址======>可以标识全世界范围内独一无二的一台计算机
或者说:(因为ARP协议)
ip地址=============>可以标识全世界范围内独一无二的一台计算机
4.4 传输层
传输层使用的协议为tcp协议或udp协议
传输层的报头包含两端的端口号
端口范围0-65535,0-1023为系统占用端口
ip+port=====>标识全世界范围内独一无二的一个基于网络通信的应用程序
`
tcp为可靠传输--->确认对方收到才会删除内存中的数据,否则会重传
udp为不可靠传输,不需要建立双向链接,也不确认对方是否收到
`
基于tcp协议通信之前:必须建立一个双向通信的链接
C-------------------->S
C<--------------------S
三次握手建立链接:
建立链接是为了传数据做准备的,三次握手即可
四次挥手断开链接
断开链接时,由于链接内有数据传输,所以必须分四次断开
tcp是可靠传输的
发送数据必须等到对方确认后才算完成,才会将自己内存中的数据清理掉,否则重传
ps:当服务端大量处于TIME_WAIT状态时意味着服务端正在经历高并发
tcp协议的半连接池:
backlog
[链接请求1,链接请求2,链接请求3,链接请求5]
4.5 应用层
可以自定义协议或使用http https ftp====>都分为头部+数据部分
自定义协议需要注意的问题:
1、两大组成部分=头部+数据部分
头部:放对数据的描述信息,如数据发送目标,数据的类型,数据的长度等
数据部分:想要发的数据
2、头部的长度必须固定
因为接收端要通过头部获取所接接收数据的详细信息
否则解包时不知该拆多少数据
5 socket简介
socket是一个抽象层,并不属于七层或五层协议的任何一层
它只是一种对应用层以下的层做的封装
虽然我们是用socket操作数据的封包解包,但是本质上还是操作系统在执行封包解包
五层协议
计算机1: 计算机2:
应用层 应用层
socket socket
传输层 段 传输层
网络层 包 网络层
数据链路层 帧 数据链路层
物理层 <===========交互机===========> 物理层
客户端软件send 服务端软件recv
操作系统 操作系统
计算机硬件<====物理介质=====>计算机硬件
ethernet头+ip头+tcp头+应用层的头+应用层数据
6 网络通信
想实现网络通信,每台主机需具备四要素
- 本机的IP地址
- 子网掩码
- 网关的IP地址
- DNS的IP地址
获取这四要素分两种方式
1.静态获取
即手动配置
2.动态获取
通过dhcp获取
以太网头 | ip头 | udp头 | dhcp数据包 |
---|---|---|---|
(1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
(2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。
(3)最后的”UDP标头”,设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。
这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。
接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数
6.1 网络通信流程
6.1.1.本机获取(dhcp自动获取或手动设置)
- 本机的IP地址:192.168.1.100
- 子网掩码:255.255.255.0
- 网关的IP地址:192.168.1.1
- DNS的IP地址:8.8.8.8
6.1.2.打开浏览器
想要访问Google,在地址栏输入了网址:www.google.com,这个网址就叫域名。
自动设置对方端口为80,即www.google.com:80 (web服务器端口一般都设置为80)
https:// www.baidu.com:80 /index.php?tn=request_10_pg
可以分为三部分,最左边为应用层协议,中间是域名+端口,最右边是虚拟路径
6.1.3.dns协议(基于udp协议)
dns协议可以通过域名获取对应的IP地址
`
`
顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是 以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。
二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级