第22天 套接字介绍 互联网通信协议 tcp协议

套接字
学习套接字编程的目的是为了开发一个c/s或者b/s架构的软件

client------网络-------server
cs架构需要写两个软件,客户端,服务端都需要开发去写
优点:开发可以按照自己的想法写软件
缺点:服务端,客户端都需要开发去编写,开发工作量增大
browser------网络------server
bs架构的客户端是浏览器,开发只需要写服务端的软件
优点:开发的工作量减少,只需要写服务端软件
缺点:写软件需要按照浏览器的标准去写

互联网=物理连接介质+通信协议
互联通信协议就相当于一种互联网通信的标准

套接字把传输层,网络层,数据链路层,物理层进行了封装。应用层的数据需要向外面发送,
可以直接使用套接字接口,调用套接字的功能

osi七层协议
应用层-表示层-会话层-传输层-网络层-数据链路层-物理层
在这里插入图片描述
物理层:负责发送电信号(1,0来表示高低电频)
数据链路层:etherent协议规定,一组电信号构成一个数据帧,叫做”帧“
每一个数据帧分成:报头head和数据data两部分
head包含:发送者(源地址),接收者(目标地址),数据类型
data:数据包的具体内容
mac地址:etherent规定接入internet的设备都必须具备网卡,
发送端和接收端的地址便是指网卡的地址,即mac地址,mac地址
只能在局域网里面使用
网络层:ip地址加上子网掩码可以找到计算机在哪一个局域网里面,称为数据包
传输层:tcp/udp协议,端口
应用层:http,ftp,mail协议

发送数据
假设客户端需要向服务端发送一条数据,应用层发出数据(可封装也可不封装),
传送给传输层,传输层在源数据上封装了源端口,目标端口;传给网络层,网络层
会封装源ip,目标ip;传给数据链路层,数据链路层会封装源mac地址,目标mac地址,
传给物理层,物理层会把数据转成二进制发送给中转设备,中转设备会发送给服务端。

接收数据
服务端接收到数据后,物理层会先把二进制转换成数据帧,依次拆开,数据链路层确认mac地址,
网络层确认ip地址,传输层确认端口号,应用层接收客户端数据。

arp协议:ip地址解析成mac地址
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

ip+mac+port=》标识了全世界独一无二的计算机软件端口

套接字原理图
在这里插入图片描述

套接字把传输层,网络层,数据链路层,物理层进行了封装。应用层的数据需要向外面发送,
可以直接使用套接字接口,调用套接字的功能

传输层的两种协议
tcp协议(传数据慢)
tcp协议是可靠传输:程序产生数据先在在内存里面,数据在发送端发送给客户端后,不会立刻删除数据,会等客户返回确认信息后,
再删除数据。如果发送端没有收到客户端返回的ack确认信息,过一段时间会再发送一次。

在这里插入图片描述
tcp协议的状态:
SYN_SENT:客户端刚发完数据请求
LISTEN:服务端等待客户端的请求连接
SYN_RCVD:收到了SYN请求
ESTABLISHED:连接建立成功(注意,客户端的建立成功,不一定是建立连接成功,服务端的establisged显示才表示建立连接成功)

syn=1(标志位)代表请求建立连接,
建立连接需要三次交互,假设客户端先向服务端发送连接请求,服务端返回接收到请求后会同时向客户端发送连接请求,
客户端接收到服务端的请求后,向服务端发送确认连接请求。
建立连接的时候客户端会向服务端发送序列号(seq=一串数字)
客户端返回(ack=1+一串数字),以此来判断服务端与客户端的连接是否是自己要寻找的对方

fin代表请求断开连接,
断开连接需要四次交互,假设客户端需要向服务端发送的数据已经传输完成了,会向服务端发送断开连接的请求,
服务端收到请求后,会向客户端返回确认断开请求。等到服务端的数据也传输完成了,同样也会向客户端发送断
开连接的请求,客户端接收到服务端的请求后,向服务端发送确认断开请求。

ack=1代表确认连接/断开连接,在传输过程中代表确认序列号是否正确

洪水攻击
backloa(半连接池):客户端向服务端发送的请求会先放在半连接池里面,如果处理
请求的速度赶不上访问请求的速度,那么会导致半连接池被占满空间,俗称洪水攻击
半连接池占用的是内存空间,半连接池一旦满了,其他用户访问的时候直接就失败了

udp协议(传数据快)
udp协议是不可靠数据:传数据不需要建立连接,不需要等ack。发完数据就把数据删除了。

猜你喜欢

转载自blog.csdn.net/Yosigo_/article/details/112627233