day35网络通信

今日内容:
传输层 tcp\udp
应用层:
可以自定义协议=》头部+数据部分
http https ftp


五层协议
计算机1: 计算机2:

应用层 应用层

socket socket

传输层 段 传输层
网络层 包 网络层
数据链路层 帧 数据链路层
物理层 <===========交互机===========> 物理层


客户端软件send 服务端软件recv
操作系统 操作系统
计算机硬件<====物理介质=====>计算机硬件

ethernet头+ip头+tcp头+应用层的头+应用层数据

#一:传输层 tcp\udp=》基于端口
端口范围0-65535,0-1023为系统占用端口
ip+port=》标识全世界范围内独一无二的一个基于网络通信的应用程序


基于tcp协议通信之前:必须建立一个双向通信的链接
C-------------------->S
C<--------------------S

三次握手建立链接:
建立链接是为了传数据做准备的,三次握手即可

四次挥手断开链接
断开链接时,由于链接内有数据传输,所以必须分四次断开

tcp是可靠传输的
发送数据必须等到对方确认后才算完成,才会将自己内存中的数据清理掉,否则重传

ps:当服务端大量处于TIME_WAIT状态时意味着服务端正在经历高并发


tcp协议的半连接池:
backlog
[链接请求1,链接请求2,链接请求3,链接请求5]

#二:应用层:
可以自定义协议=》头部+数据部分
自定义协议需要注意的问题:
1、两大组成部分=头部+数据部分
头部:放对数据的描述信息
比如:数据要发给谁,数据的类型,数据的长度
数据部分:想要发的数据

2、头部的长度必须固定
因为接收端要通过头部获取所接接收数据的详细信息
http https ftp


网络通信——传输层
传输层功能:建立端口到端口的通信
补充:端口范围0-65535,其中0-1023为系统占用端口,自定义时不推荐去使用0-1023这个范围内的端口
tcp协议
可靠传输(开辟双向通道传输),TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
udp协议
不可靠传输(只负责传,不管对方受否能接收到),”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
tcp报文

tcp三次握手和四次挥手(SYN=1 ACK=1)
三次握手
'''
建立客户端与服务器端之间的双向通路需要进行三次握手。
1、客户端向服务器端发送SYN报文,请求建立连接,此时客户端就处于 SYN_SENT 状态
2、服务器监测并接收客户端的SYN报文后返回一个ACK给客户端表示确认并且也向客户端
发起建立连接请求的SYN报文,此时服务器端就会处于 SYN_RCVD 状态
3、客户端接收到服务器返回来的响应之后就会变成 ESTABLASHED 状态表示客户端到服
务器端的通道建立成功,之后接收到服务器端传过来的请求报文后同样也返回一个ACK
给服务器表示确认,服务器端接收到客户端传回的ACK后就会变成 ESTABLASHED 状态
最终服务器端到客户端的传输通道建立完毕,至此客户端与服务器之间的双向通道建立完
成,这就是三次握手。
'''

# 为什么不能是二次握手?(简言之,二次握手会产生资源浪费)
'''
如果是两次握手的情景:
客户端在发送一个连接建立请求之后进入等待状态,等到服务端确认之后就进入established状态。
服务端在发送一个确认连接建立请求报文之后(不管客户端是否有回应)也进入established状态。
这就好比, A给B打电话, A:你听得到我说话吗? B:我听得到啊 A和B就都以为对方都能听得到自己了。
但有一种情况是,B的麦是坏的,A根本就听不到B说话,结果A没收到B的回应,但B却以为A能听得到他,
B就一直等着A说点什么...这样让B身心俱疲。

而三次握手:
客户端在发送一个连接建立请求报文之后进入等待状态,等到服务端返回确认建立连接的通知
服务端发送确认建立连接请求报文,同时向客户端发送连接建立请求报文,进入等待状态
客户端接受到服务端发送的确认请求报文以及来自服务端的连接建立请求报文。进入established状态
并发送确认连接建立请 求报文给服务端。服务端接受到来自客户端的确认建立连接报文,进入established
A:你能听得到我说话吗? B:我听得到啊,你能不能听得到我说话?
A:我也听得到你啊。( established) B:(established) A和B都能明确知道对方肯定能听得到自己说话

当然4次握手或者n次握手也可以但是没有必要,因为如果建立连接的时间过长的话那么效果也就会大打折扣
'''


SYN洪水攻击
'''
SYN洪水攻击:tcp是好人协议,不管是什么客户端,只要向服务器发送了请求服务器就会接收并尝试向客户端建立连
接。SYN洪水攻击,就是利用建立大量的虚拟ip去向服务器发送请求,发完之后就消失,此时服务器就会被大量的
虚拟ip所占满了一直处于`SYN_RCVD`状态,导致真正的客户端再想访问服务器就没法访问
(类似于让一群乞丐去堵一家公司的大门,导致公司员工无法进入公司)
'''

四次挥手
# 断开链接时,由于链接内有数据传输,所以必须分四次断开


网络通信——应用层
自定义协议
在应用层如果觉得别人的协议过于的复杂,我们可以自定义协议=》头部+数据部分
# 自定义协议需要注意的问题:
'''
1、两大组成部分=头部+数据部分
头部:放对数据的描述信息
比如:数据要发给谁,数据的类型,数据的长度
数据部分:想要发的数据

2、头部的长度必须固定
因为接收端要通过头部获取所接接收数据的详细信息
'''

# 应用层的协议:http https ftp

猜你喜欢

转载自www.cnblogs.com/python--wang/p/12722750.html