课程名称:(打造简历金牌项目)Vue+Go 开发企业级微服务网关项目
课程章节:第二章
课程讲师:牛儿吃草
课程内容
HTTP协议
- GET /HTTP/1.1
- HOST www.baidu.com
- User-Agent: curl/7.55.1
- Accept: */
- HTTP/1.1 200 OK
- Accept-Ranges bytes
- Cache-Control: private,no-cache,no-store,proxy-revalidate,no-transform
- Connection: keep-alive
- Content-Length: 2381
- Content-Type: text/html
WebSocket 握手协议
- Get /chat HTTP/1.1
- Host: server.example.com
- Upgrade: websocket
- Connection: Upgrade
- Sec-WebSocket-Key: dGhlIHN…==…
- …
TCP为啥需要三次握手以及四次挥手?
- 三次握手的最主要的目的是保证连接是双工的,可靠更多的是通过重传的机制来保证的。(双工是指数据发送和接收是可以同时执行的,并且连接的双方都可以进行发送和接收)
- 因为连接是全双工的,所以双方必须都收到对方的FINISH包以及确认才可以关闭。所以才有了四次挥手。
为啥time_wait要等待2MSL?
- MSL:Maximum Segument Lifetime,30秒——1分钟
- 保证TCP协议的全双工连接能够可靠关闭
- 保证这次连接的重复数据段从网络中消失
为啥会出现大量的close_wait?
- 首先close_wait一般出现在被动关闭方。
- 并发请求太多导致。(如果发送大量的请求,然后服务端对应的间隙的数据处理时间没有跟上它这个并发,就会出现一个close_wait状态)。
- 被动关闭方没有及时释放端口导致。
TCP——流量控制(UDP不需要)
- 因为UDP是一种非连接的一种不可靠的通讯,所以在UDP上每一次发送都需要绑定一个IP和端口,但发送出去之后就不需要确认了,也就是不需要进行三次握手,流量控制和拥塞控制也就不需要了
- 由于通讯双方,网速不同。通讯方任意一方发送过快都会导致对方消息处理不过来,所以就需要把数据放到缓冲区当中。
- 如果缓冲区满了,发送方还在疯狂发送,那接收方只能把数据包丢弃,因此我们需要控制发送速率。
- 我们缓冲区剩余大小称之为接收窗口,用变量win表示。如果win=0,则表示发送方停止发送。
TCP为啥需要拥塞控制?
- 流量控制和拥塞控制是两个概念,拥塞控制是调节网络的负载。
- 接收方的网络资源繁忙,因未及时相应ACK导致发送方重传大量数据,这样将会导致网络更加拥堵。
- 拥塞控制是动态调整win的大小,不只是以来缓冲区大小,确定窗口大小。
TCP拥塞控制
- 慢开始和拥塞避免
- 快速重传和快速恢复
课程收获: 感谢老师讲解了经典的网络协议,包括经典协议与数据包,HTTP,WebSocket等等,以及TCP三次握手,四次挥手,流量控制,拥塞控制等,加深了我对计算机网络的理解。