netWork

netWork

OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不一样计算机互联的标准,是设计和描述计算机网络通讯的基本框架。OSI模型把网络通讯的工做分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 首先来看看OSI的七层模型:缓存

OSI七层网络模型

sevenlayer

TCP/IP 参考模型

TCP/IP是传输控制协议/网络互联协议的简称。早期的TCP/IP模型是一个四层结构,从下往上依次是网络接口层、互联网层、传输层和应用层。后来在使用过程当中,借鉴OSI七层参考模型,将网络接口层划分为了物理层和数据链路层,造成五层结构。服务器

fivelayer

传输层

传输层是面向链接的、可靠的的进程到进程通讯的协议。TCP提供全双工服务,即数据可在同一时间双向传播。TCP将若干个字节构成一个分组,此分组称为报文段(Segment)。提供了一种端到端的链接。 传输层的协议主要是TCP ,TCP(Transimision Control Protocal)是一种可靠的、面向链接的协议,传输效率低。网络

TCP协议

http协议其实就是TCP连接和一些使用连接得规则。
TCP 提供了可靠得比特传输管道
ip分组承载了tcp片断, 每一个ip分组都包括:框架

  • 一个ip分组首部
  • 一个tcp段首部
  • 一个tcp数据块

ip首部包含了来源和目的地ip地址,长度和其余得一些标记。
TCP段首部包含了TCP端口号、 tcp控制标记、以及用于数据排序和完整性检查得一些数字值
image.pngtcp

  • 如何保证TCP连接得正确性

经过 <源ip地址、 源端口号、目的ip地址、目的端口号> 保证了惟一性spa

  • 验证数据是否接收到计算机网络

    1. 32位序列号 TCP用序列号对数据包进行标记,以便在到达目的地后从新重装,假设当前的序列号为 s,发送数据长度为 l,则下次发送数据时的序列号为 s + l。在创建链接时一般由计算机生成一个随机数做为序列号的初始值
    2. 确认应答号 它等于下一次应该接收到的数据的序列号。假设发送端的序列号为 s,发送数据的长度为 l,那么接收端返回的确认应答号也是 s + l。发送端接收到这个确认应答后,能够认为这个位置之前全部的数据都已被正常接收。
  • 控制位 TCP的链接、传输和断开都受这六个控制位的指挥设计

    1. PSH(push急迫位) 缓存区将满,马上传输速度
    2. RST(reset重置位) 链接断了从新链接
    3. URG(urgent紧急位) 紧急信号
    4. ACK(acknowledgement 确认)为1表示确认号
    5. SYN(synchronous创建联机) 同步序号位 TCP创建链接时要将这个值设为1
    6. FIN发送端完成位,提出断开链接的一方把FIN置为1表示要断开链接

这里写图片描述

三次握手

TCP是面向链接的,不管哪一方向另外一方发送数据以前,都必须先在双方之间创建一条链接。在TCP/IP协议中,TCP 协议提供可靠的链接服务,链接是经过三次握手进行初始化的。三次握手的目的是同步链接双方的序列号和确认号 并交换 TCP窗口大小信息。
handshake23d

  • 客户端先向服务器发送数据,该数据报是长度为159的数据。
  • 服务器收到报文后, 也向客户端发送了一个数据进行确认(ACK),而且返回客户端要请求的数据,数据的长度为111,将seq设置为1,ack设置为160(1 + 159)。
  • 客户端收到服务器返回的数据后进行确认(ACK),将seq设置为160, ack设置为112(1 + 111)。
为何不能两次:

当客户端想要创建链接时发送一个SYN,而后等待ACK,结果这个SYN由于网络问题没有及时到达B,因此客户端在一段时间内没收到ACK后,在发送一个SYN,服务器也成功收到,而后客户端也收到ACK,这时客户端发送的第一个SYN终于到了服务器,对于服务器来讲这是一个新链接请求,而后服务器又为这个链接申请资源,返回ACK,然而这个SYN是个无效的请求,客户端收到这个SYN的ACK后也并不会理会它,而服务器殊不知道,服务器会一直为这个链接维持着资源,形成资源的浪费blog

四次挥手

  • 第一次挥手:客户端向服务器发送一个FIN报文段,将设置seq为160和ack为112,;此时,客户端进入 FIN_WAIT_1状态,这表示客户端没有数据要发送服务器了,请求关闭链接;
  • 第二次挥手:服务器收到了客户端发送的FIN报文段,向客户端回一个ACK报文段,ack设置为1,seq设置为112;服务器进入了CLOSE_WAIT状态,客户端收到服务器返回的ACK报文后,进入FIN_WAIT_2状态;
  • 第三次挥手:服务器会观察本身是否还有数据没有发送给客户端,若是有,先把数据发送给客户端,再发送FIN报文;若是没有,那么服务器直接发送FIN报文给客户端。请求关闭链接,同时服务器进入LAST_ACK状态;
  • 第四次挥手:客户端收到服务器发送的FIN报文段,向服务器发送ACK报文段,将seq设置为161,将ack设置为113,而后客户端进入TIME_WAIT状态;服务器收到客户端的ACK报文段之后,就关闭链接;此时,客户端等待2MSL后依然没有收到回复,则证实Server端已正常关闭,客户端也能够关闭链接了。

参考资料

珠峰培训《http权威指南》《图解http》

相关文章
相关标签/搜索