1,分层:物理层→链路层→网络层(IP)→传输层(TCP)→应用层
2,传输层的主要协议:TCP/UDP
UDP只能确认数据是否有错。发送方无法判断数据是否送达,接收方也无法重新请求数据
3,TCP在不可靠的IP层上提供了一个可靠的传输层。
三次握手:c_s:syn:客户端请求连接、s_c:syn+ack:服务端允许连接、c_s:ack:客户端确认
补充:第一次握手完成,服务端确认可以接收信息;第二次握手完成,客户端确认既可以发送信息也可以接收信息;第三次握手完成,服务端确认可以发送信息。三次握手完成,双方都确认了既可以发送信息也可以收到对方的响应,因此一个安全的连接被建立了。
四次挥手:c_s:fin:客户端停止数据请求,希望关闭连接、s_c:ack:服务端确认收到关闭连接请求、s_c:fin:服务端确认数据已完全传输、c_s:ack:客户端确认
补充:第一次挥手完成,客户端结束数据请求,请求停止连接;第二次挥手完成,服务端确认请求,此时服务端继续传输之前请求的尚未完成传输的数据;第三次挥手完成,服务端确认数据传输完毕,发送了一个fin包;第四次挥手完成,客户端确认服务端发出的“数据已完全传输”的信息,之后客户端经过超时等待时间后关闭,服务端在收到客户端发出的ack后立即关闭。
为什么客户端需要一个超时等待时间?这是因为如果客户端在发送了ack包后就断开连接而服务端因为网络问题没有接收到客户端的ack包,那么服务端会一直停留在最后的确认状态。而事实上服务端在没有收到ack包后会重发fin包,客户端在超时等待时间内如果响应到重发的fin包后就会重发ack包并刷新超时时间,直到在超时等待时间内没有收到fin包。这样的机制有利于在网络不稳定的情况下安全结束连接。