- 为什么需要TCP协议?工作在哪一层?
- 需要保证包交付的可靠、按序、完整,因此有TCP协议
- IP层不可靠,因此在传输层
- 什么是TCP连接
- 面向连接(一对一)、可靠、字节流(无边界、有序)
- 如何唯一确定一个TCP连接
- 源地址+端口,目的地址+端口确定一个唯一的连接
- TCP UDP 的区别及应用场景
- 从连接的角度,TCP先建立连接再传,UDP直接传
- 从对象的角度,TCP一对一传,UDP一对多(一对一,多对多)
- 从可靠的角度,TCP可靠交付,UDP尽力交付不保证
- 从拥塞、流量控制的角度,TCP有拥塞控制与流量控制,UDP没有
- 从首部开销的角度,TCP长且可变,UDP固定八个字节
- 应用场景:TCP(FTP、HTTP等)UDP(视屏、音频、广播通信)
- 三次握手
- 客户端发送(表示向服务器端发起连接)
- 服务器端收到,发回“确认应答”
- 客户端发送,变成established状态,服务器端收到后也变成established状态(仅此次可以带数据发送,前两次都不行,因为established了)
- 为什么是三次握手
- 避免历史连接(假设一个旧的报文比新报文先到server,server回了,client收到的旧报文的回复,可以发现是个过期报文,然后发RST回去终止这个连接,而如果是两次,这个连接就建立了,就离谱)
- 同步初始序列号
- 避免资源浪费(新旧SYN报文先后到达,若二次握手会导致多个连接建立)
- 什么是四次挥手
- 客户端打算关闭,发送关闭的FIN_WAIT_1报文
- server发送ACK应答报文,并进入CLOSED_WAIT状态
- client收到后进入FIN_WAIT2状态
- server处理完数据后,向client发送FIN
- client收到后,回ACK
- server收到后,关闭了
- 最后client等2MSL后,也关闭
- 为什么需要四次挥手
- 关闭连接时,client不发送,但是要接收数据
- 服务器回ACK后,可能还有数据需要发送和处理,要发的发完了,再发FIN
- TIME_WAIT时间为2MSL的理由
- 1MSL为一个报文的最大生存时间
- 但有可能万罗中存在来自发送方的报文,还需要接收方响应再回,一来一回2MSL
- TIME_WAIT存在的理由
- 防止旧连接的数据包(旧连接的数据,由于TIME_WAIT时间过短,第二个连接开始了,他被接收了,离谱)
- 保证连接的正确关闭(等待足够的时间确保最后的ACK能让被动关闭方接收,帮助其正常关闭)
- 待续