TCP三次握手和四次挥手;OSI七层协议有哪七层,每层有哪些;TCP和UDP的区别?UDP用在哪里了?

发布时间 2023-08-08 15:55:28作者: 雀雀飞了

TCP三次握手和四次挥手;OSI七层协议有哪七层,每层有哪些;TCP和UDP的区别?UDP用在哪里了?

TCP三次握手和四次挥手

# tcp协议---》处于osi7层协议的传输层,可靠连接,使用三次握手,四次挥手保证了可靠连接,数据不会丢失

三次握手(Three-Way Handshake):

-SYN:SYN=1 表示要建立连接
-ACK:ACK=1 表示我确认收到
-seq:随机数,建立连接无论客户端还是服务端要建立连接就要要携带
-ack:回应请求就要加1返回
-FIN:FIN=1 表示断开连接

# 建立连接过程中服务端和客户端的状态
LISTEN:等待从任何远端TCP 和端口的连接请求
SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。
SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。
ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。

-第一次:你好(SYN=1),我是queque(seq=随机数) 
    客户端:'SYN_SENT'状态
    服务端:没收到'LISTEN'状态,收到了是'SYN_RCVD'状态
-第二次:收到(ACK=1),是queque啊(ack=随机数+1),你好(SYN=1),我是彭于晏(seq=随机数1)
    服务端:'SYN_RCVD'状态
    客户端:没收到服务端返回的第二次:'SYN_SENT'状态,一旦收到就是'ESTABLISHED'
-第三次:收到(ACK=1),彭于晏你好呀(ack=随机数1+1)
    客户端:连接建好的状态 'ESTABLISHED'
    服务端:收到后,处于'ESTABLISHED'

-大白话:三次握手
    第一次:客户端向服务端发送建立连接请求,【携带一个随机数】(SYN=1,seq=随机数)
    第二次:服务端回应客户端的建立连接请求(ACK=1,ack=随机数+1),服务端发送建立连接请求(SYN=1,seq=另一个随机数)
    第三次:客户端回应服务端的建立连接请求(ACK=1,ack=另一个随机数+1)

TCP 四次挥手(Four-Way Handshake):
# 断开连接过程中服务端和客户端的状态
FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。
FIN_WAIT_2:等待远端TCP 的连接终止请求。
CLOSE_WAIT:等待本地用户的连接终止请求。
CLOSING:等待远端TCP 的连接终止请求确认。
LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)
TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。

-第一次:客户端向服务端发起断开连接的请求(FIN=1,seq=随机数)
	  客户端:'FIN_WAIT_1'状态
    服务端:没收到'ESTABLISHED'状态,收到了是'CLOSE_WAIT'状态
-第二次:服务端收到后,回复这个请求(ACK=1,ack=随机数+1)
    服务端:'CLOSE_WAIT'状态
    客户端:没收到服务端返回的第二次:'FIN_WAIT_1'状态,一旦收到就是'FIN_WAIT_2'
-第三次:服务端向客户端发起断开连接的请求(FIN=1,seq=另一个随机数,ACK=1,ack=随机数+1)
		服务端:'LAST_ACK'状态
    客户端:没收到服务端返回的第三次:'FIN_WAIT_2'状态,一旦收到就是'TIME_WAIT'
第四次:客户端收到后,回复这个请求(ACK=1,ack=另一个随机数+1,seq=随机数+1)


# 洪水攻击 ddos:
同一时间有大量的客户端请求建立连接 会导致服务端一直处于SYN_RCVD状态。攻击者会向目标系统发送大量的请求或数据,使其资源(如带宽、计算能力、存储等)耗尽,导致系统无法正常响应合法用户的请求。



# 为什么客户端最后还要等待2MSL?
MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。

保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。

# 为什么建立连接是三次握手,关闭连接确是四次挥手呢?
建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

# 如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

https://www.cnblogs.com/liuqingzheng/p/16124319.html

OSI七层协议,哪七层,每层有哪些

七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
五层划(TCP/IP五层协议)分为:应用层、传输层、网络层、数据链路层、物理层。
四层划分为:应用层、传输层、网络层、网络接口层。
OSI(Open Systems Interconnection)是一种用于计算机网络通信的通信协议体系结构,它将网络通信划分为七个不同的层次。每个层次都负责特定的功能,并且相互之间有明确定义的接口。下面是 OSI 七层协议及其功能:

1. 物理层(Physical Layer):
   - 硬件层面,处理物理连接和传输媒介。
   - 主要任务是发送高低电压(电信号),高电压对应数字1,低电压对应数字0
   - 常见的物理层标准包括以太网、Wi-Fi、USB、蓝牙、光纤等。

2. 数据链路层(Data Link Layer):
   - 主要功能是对电信号做分组
   - 常见的数据链路层协议包括以太网、PPP(点对点协议)等。
   - PPP:点对点协议(Point to Point Protocol,PPP)为在点对点连接上传输多协议数据包提供了一个标准方法
   - ARP:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议
   - ethernet规定一组电信号构成一个数据报,叫做'帧',每一数据帧分成:报头head和数据data两部分 
   - ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即Mac地址。每块网卡出厂时都被烧制上一个世界唯一的Mac地址

3. 网络层(Network Layer):
   - 处理数据包在网络中的路由和转发。它负责为数据包选择合适的路径,并提供 网络地址和路由协议,例如IP(Internet Protocol)。
   - icmp协议:ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用
   - 固定每一个接入互联网的计算机都必须要有一个IP地址,IPv4地址之外,还有IPv6地址
   - 一个IP地址可以定位一个局域网,一个mac地址定位局域网中得一台计算机, ip+mac地址可以定位一个局域网中得唯一一台计算机。是因为有一个ARP协议,专门负责把IP地址解析成mac地址,也就说有了IP地址,就有了mac地址
        '''一个IP可以定位到世界范围内独一无二的一台计算机'''

4. 传输层(Transport Layer):
   - 提供端到端的可靠数据传输和错误恢复。
   - 负责在通信的两个设备之间建立、维护和终止数据传输的连接。
   - 常见的传输层协议包括 TCP(传输控制协议)、UDP(用户数据报协议)、端口协议
   - 端口范围0-65535,0-1023为系统占用端口,1024-8000之间的端口,一般是常用软件的端口,我们自己开发的软件,端口最后使用8000之后的
   - ip+port:定位世界范围内独一无二的一台计算机正在运行的一个应用程序(在一台计算机中,同一时刻,端口不能重复,因为一个端口就代码这台计算机上的一个应用程序')
   - Django 8000 flask 5000 mysql 3306 redis 6379

5. 会话层(Session Layer):
   - 管理应用之间的会话连接。
   - 提供会话控制和同步功能,确保数据的正确传输和数据的同步。
   - 通常在操作系统中由应用程序来实现,不像其他层有明确的协议。

6. 表示层(Presentation Layer):
   - 处理数据的表示和转换,以确保数据的可读性。
   - 负责数据的加密、压缩、解压缩等功能,使得应用层可以直接处理数据。
   - HTTPS中的加密是在表示层实现的,确保数据在网络中的传输是安全的
   - 通常在操作系统中由应用程序来实现,不像其他层有明确的协议。

7. 应用层(Application Layer):
   - 提供直接给用户使用的应用服务,是用户直接接触的最高层。我们程序员其实就在应用层
   - 包括各种应用程序,如电子邮件、文件传输、远程登录等。
   - 如果是客户端程序,协议想用什么就用什么,因为客户端是我们自己写的;如果是浏览器,协议就不能随意用了,就要按照浏览器规定的协议.
   - 常见的应用层协议包括 HTTP(超文本传输协议)、SMTP(简单邮件传输协议)、FTP(文件传输协议)、DNS等。

TCP和UDP的区别?UDP用在哪里了?

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种不同的传输层协议,它们在数据传输和连接建立方面有以下主要区别:
-tcp是面向连接的可靠协议
-udp无连接的不可靠协议
-都是处于传输层
-运用场景
	udp:一些聊天,dns协议用的udp协议
	tcp:http  mysql,redis客户端服务端通信