TCP/IP协议栈基础知识
设计思想
把一个复杂的事物进行分层划分,使得每个部分变得相对简单
分层模型
OSI分为7层模型 tcp/ip分为四层模型
应用层(Application)
传输层(Transport)
网络层(Internet)
网络访问层(Network Access)
TCP特性
1.工作在传输层
2.面向连接协议
在通讯的过程中有一个协商的过程,需要确保两者之间有一个稳定的,可靠的连接状态.
3.全双工的协议
可以同时双向发送数据
4.半关闭
关闭是单方向的 一方关闭连接只表示关闭方不再发送数据,但不代表不接收对方的数据包.
5.错误检查
6.将数据打包成段,排序
7.确认机制
8.数据恢复,重传
9.流量控制,滑动窗口
10.拥塞控制,慢启动和拥塞避免算法
TCP包头
0-15 16个位 2个字节 表示源端口 2^16 = 65536个端口号
16-31 16个位 2个字节 表示目标端口
32位 4个字节 表示当前本机发送数据包的编号
32位 4个字节 表示确认号 标识对方主机发送的数据包的编号 告诉对方主机下次需要发送数据包的编号
4位 数据偏移 表示tcp包的头部有多长
前面固定有20个字节的长度 + 不固定长度的选项长度
三个重点标记位: 实现TCP可靠传输的关键
ACK 确认接收标志
SYN 同步请求标志
客户端向服务端发送第一个连接TCP数据包的时候会把SYN变成1
服务端响应客户端发送的连接第一个TCP包头中的SYN也等于1
FIN 结束连接标志
使用tcp发送数据之前,必须先通过三次握手 然后才能进行数据的发送和接收
TCP三次握手
第一次握手: 客户端给服务端发送第一个同步消息把SYN设为1
第二次握手: 服务端给客户端发送回应的消息把SYN设为1 ACK设为1 表示服务端能正常接收客户端的数据包
第三次握手: 客户端回应服务端消息把ACK设为1 表示客户端能正常接收服务端的数据包
1.客户端 SYN 2.服务端 SYN ACK 3.客户端 ACK
TCP四次挥手
1.建立连接一般是由客户端首先向服务器端发起请求的,服务器端只进行监听.
2.但是断开连接的分手请求可以是任意方(可以是客户端也可以是服务端)来首先发起的,谁先把数据传输完成,谁就可以发送断开连接请求的数据包
3.首先发送FIN=1的一方 表示自己不再会向对方发送任何数据,但是还会接收对方发送过来的数据 (半关闭的特性)
4. 2MSL时间表示是消息的最大生存期 1个MSL表示两个数据包正常发送的时间
5.首先提出断开连接方最后需要等待2MSL的时间是因为理论上对方会先把还没发完的数据先发给自己最后才会发送FIN=1的数据包,但是
每个数据包在传递的过程中选择的路径是不一样的,可能会出现数据包先发后到的情况.
这段时间是用来接收可能在FIN=1包到达后其它还没有到达本机的数据包.
6.A FIN B ACK B FIN A ACK
TCP的SYN(同步攻击)
当客户端向服务端首先发起一个SYN的同步消息后,服务器会立刻向客户端返回ACK消息同时等待客户端返回ACK消息.
在服务器等待客户端ACK消息的这段时间,服务器需要消耗一定的内存空间来存储当前的连接信息.此时如果客户端是一些
大量不存在的主机,那么服务器迟迟得不到客户端ACK响应导致内存无法释放这些资源最终把服务器的内存空间消耗干净.
TCP确认
Winodow Size 的值 表示TCP每次可以发送的数据包的个数,而不是一个包一个包的发送,提高数据包的发送效率
UDP传输协议
UDP包头
16bit 2个字节 源端口
16bit 2个字节 目标端口
16bit 2个字节 内容长度
16bit 2个字节 checksum
data 发送内容
UDP特性
1.工作在传输层
2.提供不可靠的网络访问
3.非面向连接的协议
4.有限的错误检查
5.传输性能高 没有tcp协议的握手机制
6.无数据恢复的特性
IP网络层协议
切片发送大数据包
DOS拒绝服务攻击
通过ping命令不断的向服务器发送大量的大数据包,由于客户端每次向服务器发送一个包服务器就必须要响应一个包.造成占用服务器大量的cpu和网卡资源.
本文来自博客园,作者:不懂123,转载请注明原文链接:https://www.cnblogs.com/yxh168/p/8971329.html