文章目录
- TCP协议中常见的问题
- 谈一谈对OSI七层模型和TCP/IP四层模型的理解?
- 谈谈TCP协议的3次握手过程?
- TCP协议为什么要3次握手?2次,4次不行吗?
- 谈谈TCP协议的四次挥手过程?
- 什么是流量控制?
- 什么是滑动窗口?
- TCP和UDP有什么区别?
TCP协议中常见的问题
谈一谈对OSI七层模型和TCP/IP四层模型的理解?
- 将计算机网络分为七层,是为了增强他的通用性和兼容性,每一层都会遵守响应的规则
- 计算机网络被分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
- 而TCP/IP 四层模型则是OSI七层模型的简化
- 将OSI中的应用层、表示层、会话层整体归结为应用层
- 将OSI中数据链路层和物理层整体归结为数据链路层
- 所以TCP/IP四层模型包括 应用层、传输层、网络层、数据链路层四层
总结下来,物理层就是将电脑通过物理手段连接起来,数据链路层就是将比特流所表示的数据进行分组、网络层就是建立主机和主机之间的连接、传输层就是端口到端口的连接、应用层最终负责建立连接,将一些数据呈现给用户
谈谈TCP协议的3次握手过程?
- 3次握手的过程也就是客户和服务器建立连接的过程
- 第一次握手
- 客户端向服务器发送一个数据包
- 数据包的首部包含 同步SYN=1,确认ACK=0,序号seq=x
- SYN=1,ACK=0,表示这是一个请求报文段,seq表示所传送数据的第一个字节的序号
- 第二次握手
- 服务器接收到客户端发来的数据包,根据这个数据包的首部**SYN=1,ACK=0,**判断出这是一个请求连接的数据包
- 如果服务器同意连接,则会返回一个数据包,这个数据包的首部就是SYN=1,ACK=1,seq=y,ack=x+1
- SYN=1,ACK=1,表示服务器同意此次连接,ack=x+1表示服务器已经收到发来的x个数据,并告诉客户端下次从第x+1个字节开始传输
- 第三次握手
- 客户端收到服务的确认连接之后,会再次向服务器发送一个数据包
- 数据包中包含 同步SYN=0,确认ACK=1,序号seq=x+1,ack=y+1
- 同步SYN=0表示服务器和客户端都同意连接,确认ACK=1表示收到服务发来的数据包,序号seq=x+1表示发来的数据就是第x+1个,ack=y+1告诉服务器下次从y+1个字节开始发送
三次握手结束
TCP协议为什么要3次握手?2次,4次不行吗?
- 因为三次握手的前两次都是确认连接,第三次才是真正的连接,如果是两次,则不能正常连接,四次则会浪费资源
谈谈TCP协议的四次挥手过程?
四次挥手其实就是释放连接的过程
- 第一次挥手
- 客户端向服务器发送一个请求释放连接的数据包,数据包的首部包含 终止FIN=1(表示客户端要主动释放连接),ACk=0
- 第二次挥手
- 服务器收到请求释放连接的数据包,会给客户端发送确认数据包,此时客户端到服务器的连接就释放了,但是服务器依然可以给客户端发送未发送完的数据,但客户端无法再向服务器发送数据
- 第二次挥手服务器给客户端发送的数据包的首部包含 终止FIN=0,ACK=1,序号为seq,确认号ack
- 终止FIN=0,ACK=1,表示同意客户端释放连接,但连接还没有释放
- 第三次挥手
- 此时服务器不再向客户端发送数据,会再向客户端发送确认报文
- 这次报文的首部包含 终止FIN=1,ACK=1
- 第四次挥手
- 客户端收到服务器的报文,最后向服务器发出确认报文,连接彻底释放
- 此次报文的首部包含ACK=1,FIN=0
什么是流量控制?
-
流量控制其实就是控制数据的发送速率,保证接收方来得及接收
-
TCP实现流量控制是通过滑动窗口实现的,接收方可以控制滑动窗口的大小,从而控制数据发送的速率
什么是滑动窗口?
- 滑动窗口就是TCP实现流量控制的一种机制
- 发送方和接收方都有各自的缓冲区域,这个缓冲区域就是滑动窗口,发送方的窗口大小由接收方的TCP首部的窗口字段决定
- 发送方将窗口分为:已发送并确认,已发送未确认,未发送未超出接收方窗口范围,未发送但超出接收方窗口范围,随着接收方的确定,发送方的窗口会不断向前移动
- 接收方将窗口分为,接收并确认,未接收但可以接收,接收方通过改变窗口大小,可以控制发送方的发送速率,从而实现流量控制
TCP和UDP有什么区别?
是否面向连接 | 传输可靠性 | 传输效率 | 所需资源 | |
---|---|---|---|---|
TCP | 面向连接 | 可靠性传输 | 慢 | 多 |
UDP | 无连接 | 不可靠传输 | 快 | 少 |
- TCP 是可靠性传输,面向连接的协议,传输效率慢,所需资源多
- UDP 是不可靠传输,无连接的协议,传输效率高,所需资源少