网络方面总结(自备)

版权声明:转载请注明出处^_^ https://blog.csdn.net/zhou307/article/details/81159063

TCP

这里写图片描述

  • 窗口大小的作用:就是流量控制和拥塞控制用的。

TCP包类型

  • SYN:建立连接
  • FIN:表示关闭连接
  • ACK:表示响应,ACK位置1时,确认号才有用。
  • PSH:表示有DATA数据传输
  • RST:表示连接重置

TCP三次握手

3次握手

客户端发送SYN包告知服务器建立连接,同时包中帧序号为(算法生成的)初始M值,也叫ISN。服务器收到SYN标志后即可知道是建立连接的操作,然后会回复一条帧,该帧将SYN、ACK都置位了(因为在数据包中加入ACK也只是将ACK置1,并携带上确认号。并且该SYN + ACK的这种其他类型包携带ACK的现象也叫做延迟确认)。服务器回复帧中帧序号N是服务器端生成的,而确认号则是客户端传入的M + 1。因为TCP是全双工的,所以两端都需要有各自独立的帧序号。最后,客户端回复服务器一个ACK(该ACK也可能携带有数据),表示建立完成。

为什么要存在帧序号机制

双方独立的帧序号,都是通过一定的算法生成一个初试ISN。并且请求和ACK帧会携带确认号

  • 防止伪造TCP包
  • 防止新老数据混淆。(发数据断网,然后重连TCP,结果老数据到达引起的)
  • 断网重传(在重试限制次数到达前网络恢复了,那么服务器可继续解析ACK,将缓存的数据发给应用程序)

TCP四次挥手

四次挥手

这里其实不应该分为客户端和服务器,应该是哪个主动关闭哪个就是左边的

因为TCP连接是双向的,客户端发送一个FIN,仅表示该客户端不再发送数据了(但是可以接收),那么服务器会响应。然后如果服务端发送完了数据,他就会发送FIN来告知客户端服务器的连接也终止了。

TCP状态转换图

ESTABLISHED 状态再往下转移时,下面的虚线实线就不是区别服务器客户端的了(失去了区分的作用),而是说谁发起主动关闭,谁就会进入FIN_WAIT1状态,谁被动关闭,谁就会进入CLOSE_WAIT状态。

  • CLOSING状态是指双发同时发送了关闭,双方都是主动方,那么双方都会进入TIME_WAIT状态

双方主动关闭的过程:

这样服务器才会有TIME_WAIT的限制。

扫描二维码关注公众号,回复: 3036092 查看本文章
  • 服务器端主动关闭则服务器端的TCP就会进入TIME_WAIT状态

TCP补充

流量控制

防止快速的发送者将慢速的接收者击垮。主要是控制接收缓冲区,每次收到数据在回复确认消息时,需要带上发送者可以发送多少字节,采用滑动窗口算法。

拥塞控制

防止快速的发送者将整个网络击垮。TCP采用了慢启动和拥塞避免算法,最终的作用是让数据传输快速到达一个平衡的状态,即发送者发送速度和接收确认的速度一致.

整个算法组合的感觉就是一条s型曲线,一开始平缓,然后指数增长,再回归平缓

粘包

造成问题的原因:1.发送端需要等到缓冲区满了才会发送出去(TCP的Nagle算法造成的)。2.接收方不及时接收缓冲区内的包

HTTP协议

基础

URI

URI:统一资源标识符。相当于一个抽象概念,其目前有两种实现:

  • URL:统一资源定位符:精确的说明了某资源的位置以及如何去访问它。现在基本所有的URI都是URL。
  • URN:(目前处于实验阶段),统一资源名。根据唯一名称来访问资源,而与资源所在地无关

HTTP报文格式

  1. 请求报文

    起始行:<method> <URL> <version> CRLF
    首部:<header> CRLF
    CRLF
    主体:<entity-body>
    

其中:CRLF表示回车换行符

2.响应报文

    <version> <status> <reason>CRLF
    <header>CRLF
    CRLF
    <entity-body>

系统状态码

  • 1xx:信息提示
  • 2xx:成功
  • 3xx:重定向
  • 4xx:客户端错误
  • 5xx:服务器端错误

常见状态码

  • 302:临时重定向;资源换到了其他位置,可能还会再变
  • 400:bad request;请求参数等不正确
  • 401:没带认证信息或者认证失败
  • 403:资源禁止访问
  • 404:未找到

HTTP性能

TCP连接的握手延迟

因为要三次握手,所以如果建立连接后就发送少量数据随即关闭就不好。所以现在HTTP1.1以后默认开启持久连接,即HTTP请求完成后不会关闭连接,然后客户端又会实现类似连接池的功能,二者配合,再加上管道化技术,即不必等一条请求响应后再发送下一条,可以连续发送多条。

TCP慢启动

TCP允许传输的最大速度起初会有限制,随后时间的推移,传输速度会逐渐加大。所以新连接的速度会比已经在的要慢。

延迟确认

TCP协议规定:每收到一个TCP段时,都需要向发送方回复一个ack。而TCP允许将ack和发送信息结合在一起。

所以,当接收端回复ack时,会有一个最大延迟时间(100~200ms),在该时间内如果接收方有发往上次发送方的数据,那么就将ack和数据一起发送。否则,在超出该时间后,再回复一个单独的ack.

Nagle算法

试图在发送一个TCP段前,将多个TCP数据绑定在一起,以提高网络效率。所以如果HTTP报文较小,可能需要等待多个报文才进行发送,而又由于延迟确认的限制,导致整个发送会有较大延迟。

TIME_WAIT累积

主要是为了保证连接的正确关闭,由此带来的是在关闭连接后,会在2MSL周期内不允许相同的TCP连接再进行建立。所以如果存在大量的快速的建立关闭连接,那么会导致服务器上的TCP连接大都处于TIME_WAIT状态,所以就无法及时建立连接。

猜你喜欢

转载自blog.csdn.net/zhou307/article/details/81159063
今日推荐