Tcp/ip协议
Tcp:
1.传输控制协议
2.可靠的,面向连接的协议
3.传输效率低
because每次发送的请求报文都需要回应,So 安全且低效
TCP 支持的应用协议主要有:Telnet,FTP,SMTP等
UDP:
1.用户数据报协议
2.不可靠,无连接的服务
3.传输效率高
because每次发送的请求报文都不需要回应,So 不安全但高效
UDP 支持的应用协议主要有:NFS(网络文件系统),SNMP(简单网络管理协议)
DNS(主域名称系统),TFTP(通用文件传输协议)等
TCP是 面向连接的协议,也就是说在收发数据之前,必须先和对方建立连接
认识主要指针:
a.同步指针SYN:建立连接时用来同步序号
SYN=1 ACK=0 表示一个请求报文段
SYN=1 ACK=1 表示同意建立连接
b.确认指针ACK:ACK=1时表示这是一个确认的Tcp包,0则不是,
只有在第一个建立的报文中不会出现ACK
c.终止指针FIN:FIN=1时,表示此报文段的发送端数据已经发送完毕,并要求释放传输连接
*****三次握手四次挥手:
三次握手建立连接:
1.第一次对话:“我想给你发送数据可以吗?”
a. A向B发出连接请求数据包
SYN=1 ACK=0 seq=x
2.第二次对话:“可以,你什么时候发?”
b. B向A发送同意连接和要求同步
SYN=1 ACK=1 seq=y ack=x+1
3.第三册对话:“我现在发,你接着吧!”
c. A再发出一个数据包向B确认同意的要求同步
ACK=1 seq=x+1 ack=y+1
———— 三次对话的目的是使数据发送和接受同步,三次握手后,
A才向B正式发送数据
四次挥手释放连接:
当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),
其中 FIN 设置为1, 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,
即A不再发送信息(但仍可接收信息)。 A收到B的确认后进入等待状态,等待B请求释放连接,
B数据发送完成后就向A请求连接释放,也是用FIN=1 表示, 并且用 ack = u+1(如图),
A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等待 2MSL 时间。
为什么使用三次握手?
1. 一次握手,不够安全,服务端不知道是否收到
2. 两次握手,服务端发出消息后,如果客户端没有收到,就会产生资源浪费
3. 三次握手,服务端和客户端都进行了确认,可以直接开始连接
为什么使用四次挥手?
1. 一次挥手直接断开,可能会导致数据丢失
2. 两次挥手,可能会面对数据传输未完成
3. 三次挥手如果还有要传输的会有缓冲时间,但服务端不知道对方是否收到消息
4. 四次挥手,双方都确认过,可以断开连接