网络编程

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的二级

 posted on 2020-04-16 22:10  wwwpy  阅读(183)  评论(0编辑  收藏  举报