小白学python------------网络编程之网络协议

一.C/S B/S

client:客户端软件

server:服务端软件

client<--------------基于网络通信-------------->server

brower(浏览器)<--------------基于网络通信-------------->server

上网流程:

应用软件把请求发送给操作系统,操作系统调用硬件网卡通过网线把请求发送给服务端硬件,服务端硬件网卡把请求发送给操作系统,操作系统把请求发送给服务端软件,收到请求后向自己的操作系统发送请求调用硬件上的文件内容,处理好后再发送给操作系统,操作系统通过硬件网卡返回给客户端

server端必须满足的条件:

       1.稳定运行(网络,硬件,操作系统,应用软件),对外一直提供服务

       2.服务端必须绑定一个固定的地址

二.什么是互联网

两大要素:

1.底层的物理连接介质,是为通信铺好道路的

扫描二维码关注公众号,回复: 3016656 查看本文章

2.有一套统一的通信标准----->互联网协议

三.协议

任何一种通信协议包含两个部分:

1.报头(head):必须固定长度

2.数据(data)

四.标识地址的方式

1.ip+mac可以标识世界上任意一台独一无二的的计算机


2.ip+mac+port(端口)可以标识世界上任意一个基于网络通信的应用软件


3.url地址:标识世界上独一无二的一个资源

协议部分:https://

域名部分:mp.csdn.net

资源部分:类似文件夹的形式

五.OSI五层协议

物理层

主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0


数据链路层

1.定义电信号的分组方式(统一的标准以太网协议(ethernet))

2.规定:一组电信号构成一个数据报,叫做桢

3.数据报由报头和数据组成

报头(head) 数据(data)

3.1.报头包含:固定为18个字节

                     发送者/源地址:6字节

                     接收者/目标地址/6字节

                     数据描述信息:6字节

3.2.数据包含:数据报的具体内容,最短46字节,最长1500字节

3.3mac地址

head中包含的源和目标地址的由来:ethernet规定接入internet的设备必须具备网卡,发送端与接收端的地址便是由网卡的地址,即mac地址.

mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

广播

有了mac地址,同一个网络内的两台主机可以通信了(一台主机通过arp协议获取另一台主机的mac地址)

ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼


网络层

1.网络层由来:有了以太网协议,mac地址,广播的方式,世界上的计算机可以彼此通信了,但是世界范围内的互联网是由一个个彼此隔离的小局域网组成的,如果用广播的方式进行通信,那么一台机器发送的包全世界都会收到,那这将是一个灾难.为了解决这一问题,就采用了路由的方式(向不同广播域/子网分发数据包),如果是在同一广播域就采用广播的方式.

2.网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

3.IP协议

规定网络地址的协议叫ip协议,它定义的地址称为ip地址,广泛采用的是ipv4协议,它规定网络地址由32位2进制表示

范围:0.0.0.0-255.255.255.255

一个ip地址通常写成4段十进制数

4.ip地址分成两部分

网络部分:标识子网

主机部分:标识主机

单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

5.子网掩码

子网掩码:就是表示子网络特征的一个参数.

它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。

知道了子网掩码,我们就可以判断任意两个ip地址是否处在同一个子网络.

方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),得到的结果就是网络地址的二进制数,可将其转换为4段点分十进制数,然后比较结果是否相同,相同就表明在同一个自网络中.

6.IP协议的作用:

6.1.为每一台计算机分配IP地址

6.2.确认哪些地址在同一个子网络

7.ip数据包

ip数据包也分为head及data部分,直接将ip数据包放入以太网包的data部分

以太网头 IP头 IP数据

8.ARP协议

1.arp协议的由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送.由于通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议.

2.arp协议功能:广播的方式发送数据包,获取主机的mac地址.

3.协议工作方式

3.1.首先通过ip地址和子网掩码区分自己所处的子网

3.2.分析两台主机的ip是否处于同一网络,如果不是同一网络,那么通过arp获取的是网关的mac

3.3.这个包会以广播的方式在发送端所处的自网内传输,所有主机接受后拆开包,发现目标ip为自己的,就响应,返回自己的mac


传输层

1.由来:ip帮我们区分自网,以太网的mac帮我们找到主机,那么通过端口就可以帮我们找到这台主机上的任意独一无二的应用程序.端口即应用程序与网卡关联的编号

2.功能:建立端口到端口的通信

端口号:0-65535(标识基于网络通信的应用软件),0-1023给操作系统预留的

3.tcp协议(可靠协议)与udp(不可靠协议)

tcp:

以太网头 ip头 tcp头 数据

udp:

以太网头 ip头 udp头 数据

客户端的ip与port可以变

服务端的ip与port必须固定不变


应用层(应用层,表示层,会话层)

应用程序协议

HTTP协议,FTP协议等

六.tcp协议与udp协议

tcp报文

三次握手建立连接

建立连接好比在客户端与服务端之间挖两条隧道,一条负责从客户端发送数据到服务端,一条负责服务端发送数据到客户端,要挖好两条隧道要通过三次请求才可以建议连接.可以互相发数据.传送真正的数据才派上用场.

第一次:客户端先发送请求给服务端. 发送syn请求,序列号seq

syn=1(变量)代表这是一个请求包,seq=x代表序列号,一串数字

第二次:服务端响应这条信息(ack=1+x,代表确认,回应seq=x+1)并发送请求(syn=1,seq=y),请求建立连接.这意味着客户端到服务端的隧道建立成功

ack=1+x,禹涵两次意思:一层代表ack=1,另一层代表seq=x+1,基于上一次请求而来的,syn=1代表这一次是确认包也是一个请求包,还要来个序列号seq=y

第三次:客户端回应信息,同意服务端请求(ack=1+y).这意味着服务端到客户端的隧道建议成功

ack=1+y,禹涵两次意思:一层代表ack=1,另一层代表seq=y+1

这跟谈恋爱的过程很像,男生向女生表白,女生同意并向男生表白,男生同意.通过三次沟通就可以了.

客户端再发送完syn请求后进入syn_sent状态,服务端最开始处于listen(监听)状态,有一个syn过来后进入syn_rcvd(received)状态,回给客户端以后客户端立马进入established状态,以为着客户端到服务端之间建立成功了.客户端回复服务端,服务端接受到信息进入到established状态

四次挥手断开连接

断开连接就是要通过四次请求才可以断开连接,数据发完了隧道就没有存在的意义了(请求断开连接没有一定谁先请求,有可能是客户端先请求,也有可能是服务端先请求,大多数情况都是服务端,服务端会有很多客户端的请求.)

假如是客户端先请求:

第一次:客户端发送断开连接的请求给服务端.fin=1,代表断开连接.

第二次:服务端同意客户端的请求(ack=1,确认信息),那么客户端与服务端的的连接已断开,代表客户端的数据已经发完了

第三次:服务端不一定立马发送断开连接的请求,因为服务端有可能数据还没发完,所以要等是数据发完再发送断开连接的请求(fin=1)

第四次:客户端同意请求(ack=1),服务端与客户端的连接也就断开了

这跟分手的过程很像,男生向女生提出分手,女生接受信息了(只是说明男生确认分手了),但不立马表示,过段时间女生也向男生提出分手,男生同意.通过四次沟通就可以了

fin_wait_1:代表主动断开连接的一方,通常是服务端发送请求.客户端收到请求后进入close_wait,客户端回复信息,服务端进入fin_wait_2状态,代表被动断开连接了.意味着服务端与客户端的连接断开了.客户端与服务端的连接可能还存在.

过了一段时间客户端确认数据发送完了,然后向服务端发送请求,进入last_ack状态,服务端进入time_wait状态,再ack回到客户端,断开连接.

在大并发的情况(服务端一个,客户端一堆)

服务端保证要高效响应客户端,尽可能快释放资源,主动的断链接,fin_wait_1,fin_wait_2状态会很快过去,但time_wait会非常慢,所以会瞬间进入time_wait状态.在大并发情况下,time_wait状态比较多时,说明有一堆客户端访问你的服务端.


补充:

tcp协议又称好人协议,只要有发送请求都会同意.这也是它最大的漏洞,根据这个漏洞就有一个洪水攻击(dos攻击,拒绝服务攻击).模拟大量的假的syn请求,服务端都会响应,但是模拟的客户端不会给服务端回应信息.服务端在一段时间内等待客户端的回应,这段时间占用了服务端的资源.

当服务端出现大量的syn_rcvd状态说明遭受到了洪水攻击(windows上通过cmd输入netstat -an查看)


tcp:可靠协议,并不是因为有连接才是可靠,而是因为发数据的时候必须等到对方反馈确认信息,因为要发送数据是通过操作系统发送的,所以操作系统会保存下来,直到接受到确认信息后,操作系统才会清除内存的数据.


udp协议:不可靠协议.

没有连接.指定对方的ip,端口,直接发送数据.发送完了就会直接清除自己端的数据,不管对方有没有收到.

优点:效率高

缺点;数据不安全

七.半连接池(backlog)

就是一个队列,每来一个syn请求,都放进半连接池中,服务端再取走.

半连接池限制的是同一时刻的请求数,不是链接数

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/81841725