网络基础总结

网络分层

TCP的四层web

  • 应用层: 规定向用户提供应用服务时通讯协议。 如DNS
  • 传输层: 提供处于网路链接中两台计算机之间的数据传输所使用的协议。在传输层有两个性质不一样的协议TCP和UDP
  • 网络层: 规定了数据经过怎么样的传输路线到对方计算机传送给对方。如IP协议
  • 链路层: 用来处理链接网络硬件的部分,包括操做系统、硬件设备的驱动、网卡等

OSI七层模型
SI七层模型|功能|对应的网络协议|TCP/IP四层概念模型
:--:|:--:|:--:|:--:
应用层|文件传输,文件管理,电子邮件的信息处理——apdu|HTTP、TFTP, FTP, NFS, WAIS、SMTP|应用层
表示层|确保一个系统的应用层发送的消息能够被另外一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密,最小单位——ppdu|Telnet, Rlogin, SNMP, Gopher|应用层
会话层|负责在网络中的两节点创建,维持和终止通讯,在一层协议中,能够解决节点链接的协调和管理问题。包括通讯链接的创建,保持会话过程通讯链接的畅通,两节点之间的对话,决定通讯是否被终端一斤通讯终端是决定从何处从新发送,最小单位——spdu|SMTP, DNS|应用层
传输层|定义一些传输数据的协议和端口。传输协议同时进行流量控制,或是根据接收方接收数据的快慢程度,规定适当的发送速率,解决传输效率及能力的问题——tpdu|TCP, UDP|传输层
网络层|控制子网的运行,如逻辑编址,分组传输,路由选择最小单位——分组(包)报文|IP, ICMP, ARP, RARP, AKP, UUCP|网络层
数据链路层|主要是对物理层传输的比特流包装,检测保证数据传输的可靠性,将物理层接收的数据进行MAC(媒体访问控制)地址的封装和解封装,也能够简单的理解为物理寻址。交换机就处在这一层,最小的传输单位——帧|FDDI, Ethernet, Arpanet, PDN, SLIP, PPP,STP。HDLC,SDLC,帧中继|数据链路层
物理层|定义物理设备的标准,主要对物理链接方式,电气特性,机械特性等制定统一标准,传输比特流,所以最小的传输单位——位(比特流)|IEEE 802.1A, IEEE 802.2到IEEE 802.|数据链路层浏览器

1、TCP

简介

TCP是传输控制协议,基于TCP的应用层有HTTP、SMTP、FTP协议等服务器

特色

  • 面向链接、面向字节流、全双共通道、可靠。
  • 面向链接:使用TCP传输数据前,必须先创建TCP链接,传输完成后在释放链接
  • 全双共通道:创建TCP链接后,通讯双方都能发送数据
  • 可靠:经过TCP链接传送的数据:不丢失、无差错、不重复、按序到达
  • 面向字节流:数据以流的形式进行传输

优缺点

  • 优势:数据传输可靠
  • 缺点:效率慢(因需创建链接、发送确认包等)

创建链接 3次握手

  • 第一次握手:客户端向服务器发送一个链接请求的报文段。报文段信息包括:同步标志位(SYN)设为一、随机选择一个起始序号(seq)为x、不携带数据。客户端进入同步已发送状态(SYN_SEND),等待服务器的确认
  • 第二次握手:服务器收到请求链接报文段后,若赞成创建链接,则向客户端发回链接确认的报文段。报文段信息包括:同步标志位(SYN)设为一、确认标记位(ACK)为一、随机选择一个起始序号(seq)为y、确认号字段(ack)为x+一、不携带数据。服务器进入同步已接受状态(SYN_RCVD)
  • 第三次握手:客户端收到确认报文字段后,向服务器再次发出链接确认报文段。报文段信息包括:确认标记位(ACK)为一、序号(seq)为x+一、确认号字段(ack)为y+一、可携带数据。客户端、服务段都进如已建立状态,可开始发送数据

注意:成功进行TCP的三次握手后,就创建一条TCP链接,可传送应用层数据。网络

由于TCP提供的全双工通讯,故通讯双发的应用进程在任什么时候候都能发送数据。三次握手期间,任何一次未收到对面的回复,则都会重发。tcp

为何TCP创建链接须要三次握手?

防止服务器端因接收了早已失效的链接请求报文,从而一只等待客户端请求,最终致使造成死锁、浪费资源编码

描述以下加密

  • 客户端发出的第一个链接请求报文段无丢失,而是在某个网络结点长时间滞留了,致使延误到链接释放后的某个时间才到达服务器。
  • 致使延误到链接释放后的某个时间才到达服务器
  • 这是一个早已失效的报文段,可是服务器不知道,服务器收到此失效的链接请求报文段后,就误觉得是客户端再次发出的一个新的请求,因而向客户端发出了确认报文段,赞成创建TCP链接
  • 假设不采用“三次握手”,即服务器发出确认报文段后,TCP链接就创建了,但因为客户端并没有发出创建链接的请求,所以不会向服务器发送数据,因对于客户端来讲,该报文已失效了,可是服务器却觉得新的TCP链接已创建,因而一直等待客户端发送数据,即死锁状态
  • 创建链接= 采用“三次握手”,即关键是第三次握手。
  • 在上面的状况,客户端不会向服务器的确认报文信息,再次发出确认。服务器因为收不到客户端的确认信息,即知道客户端并没有要求创建TCP链接,故服务器不会一直等待客户端发送数据,即不会造成死锁状态

SYN洪泛滥操作系统

服务器的TCP资源分配时刻=完成第二次握手时,而客户端的TCP资源分配时刻 = 完成第三次握手时,这使得服务器易于受到SYN洪泛攻击,即同时多个客户端发起链接请求,从而需进行多个请求的TCP链接资源分配。3d

断开须要四次挥手

在通讯结束后,双方均可以释放链接,共需四次握手。
释放TCP链接前。TCP客户端、服务器都处于已建立状态(ESTABLISHED),直到客户端主动关闭TCP链接blog

  • 第一次挥手:客户端向服务器发起一个链接释放的报文段(中止在发送数据)。报文段信息:终止控制(FIN)设为一、报文段序号,设为前面传送数据最后一个字节的序号加1(seq = u),可携带数据(FIN = 1的报文几时不携带数据也消耗一个序号)。客户端进入终止等待1状态。(FIN-WAIT-1)
  • 第二次握手:服务器收到链接释放报文段后,则向客户端发回链接释放确认的报文段。报文段信息:确认标记位设为1: ACK=一、报文段序号,设为前面传送数据最后一个字节的序号加1(seq = v),确认号字段设为:ack= u+1。服务器进入关闭等待状态(CLOSE-WAIT),客户端收到服务器的确认后,进入终止等待2状态(FIN-WAIT-2),等待服务器发出释放链接请求。至此,客户端->服务器的TCP链接已断开,即TCP链接处于半关闭的状态,即客户端->服务器断开,但服务器->客户端未断开
  • 第三次握手:若服务器已无要向客户端发送数据,则发出释放链接的报文段。报文段信息:终止控制(FIN)设为一、确认标记位设为1:ACK=1,报文段序号,设为(seq = w),重复上次已发送的确认号字段设为:ack = u+一、可携带数据(FIN = 1的报文即便不携带数据也消耗一个序号)。服务器进入最后确认状态(LAST-ACK)
  • 第四次握手:客户端收到链接释放报文段后,则向服务器发回链接释放确认的报文段。报文段信息:确认标记位设为1:ACK=一、报文段序号:seq = u + 一、确认号字段为:ack = w + 一、可携带数据(FIN = 1的报文几时不携带数据也消耗一个序号)。 客户端进入等待时间状 态(TIME-WAIT),服务器进入关闭状态(COLSE),此时TCP链接还未释放,必须通过时间等待计时器设置的时间2MSL后,客户端才进入链接关闭状态(CLOSED),即服务器进入关闭状态比客户端要早一些。

为何TCP释放链接需4次挥手?

  • 为了保证通讯双方都能通知对方。需释放和断开链接。
  • 当主机1发出“释放链接请求”、主机2返回“确认释放链接”信息时,只表示主机1已无数据要发送到主机2,但主机2仍是能够发送数据给主机1,主机1仍是能够接受主机2的数据,即单向断开
  • 当主机2也发送了“释放链接请求”、主机1返回“确认释放链接”信息时,表示主机2已无数据要发送到主机1,此时双发都没法通讯,即TCP链接才算真正释放(双向)

为何客户端关闭链接前要等待2MSL时间?

即TIME-WAIT状态的做用是什么?MSL = 最长报文寿命(Maximum Segment Lifttime)

缘由1:为了保证客户端发送的最后一个请求链接释放确认报文能到达服务器,从而使得服务器能正常释放链接。解析:以下:

  • 客户端发送的最后一个链接释放确认报文可能会丢失,当服务器收不到最后一个链接释放确认报文时,则不会进入关闭状态,但会超时重发,链接释放报文。
  • 假设:客户端不等待2MSL时间就直接进行关闭状态(CLOSED),当最后一个链接释放确认报文丢失、服务器重发链接释放报文时,客户端则没法接收到服务器从新发送的链接释放报文时,客户端则没法接收到服务器从新发送的链接释放报文,所以也不会发送链接释放确认报文段,最终致使服务没法进入关闭状态(CLOSED)。
  • 客户端发送最后一个链接释放确认后哦,先等待2MSL时间,在进入关闭状态(CLOSE),此时客户端则接收到服务器从新发送的链接释放报文,从而发送链接释放确认报文段,会从新启动2MSL计时器,使得服务器能正常进入关闭状态(CLOSED)

缘由2:防止上文提到的早已失效的链接请求报文出如今本链接中,客户端发送了最后一个链接释放请求确认报文后,再通过2MSL时间,则可以使本链接持续时间内所产生的全部报文段都从网络中消失。即在下一个新的链接中就不会出现早已失效的链接请求报文。

TCP无差错传输?

相对于UDP,TCP的传输是可靠的、无差错的。

对于发送端:每收到一个确认帧,发送窗口就向前滑动一个帧的距离,当发送窗口内无可发送的帧时(即窗口内的帧所有是已发送但未收到确认的帧),发送方就会中止发送,直到收到接收方发送的确认帧使窗口移动,窗口内有能够发送的帧,以后才能够继续发送。

对于接收端:当收到数据帧后,将串口向前移动一个位置,并返回确认帧,若收到的数据落在窗口以后,则一概丢弃。

发送窗口:定义:任意时刻,发送方维持的一组连续的、容许发送帧的帧序号。做用:对发送方进行流量控制。

接收串口:定义:任意时刻,接收方维持的一组连续的、容许接收帧的帧序号。做用:控制可接收哪些数据,不可接收哪些数据帧;接收方只有当收到的数据的序号落入接收窗口内才容许将该数据帧手下;不然,一概丢弃。

TCP和UDP的区别

TCP:面向链接、可靠、字节流(传输形式)、传输速率慢、所需资源多、要求通讯数据可靠,首部字节在20-60

UPD:无链接、不可靠、数据报文段(传输形式)、传输速率快、所需资源少、要求通讯速度快,首部字8个字节(由4个字段组成)

2、UDP

面向无链接

UDP是不须要和 TCP 同样在发送数据前进行三次握手创建链接的,想发数据就能够开始发送了。而且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操做。

具体来讲:

  • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增长一个 UDP 头标识下是 UDP 协议,而后就传递给网络层了
  • 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操做

不可靠性

  • 不可靠性体如今无链接上,通讯都不须要创建链接,想发就发。
  • 收到什么数据就传递什么数据,而且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。
  • 网络环境时好时坏,可是 UDP 由于没有拥塞控制,一直会以恒定的速度发送数据。即便网络条件很差,也不会对发送速率进行调整。这样实现的弊端就是在网络条件很差的状况下可能会致使丢包,可是优势也很明显,在某些实时性要求高的场景(好比电话会议)就须要使用 UDP 而不是 TCP。

高效

UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。
UDP 头部包含了如下几个数据

  • 两个十六位的端口号,分别为源端口(可选字段)和目标端口
  • 整个数据报文的长度
  • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

传输方式
UDP 不止支持一对一的传输方式,一样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

3、HTTP

1.简介和特色

http:超文本传输协议,完成从客户端到服务器等一些系列运做流程。web是创建在http协议上的通讯。

特色:

  • http是不保存状态的协议,既无状态协议。协议自己对于请求或响应之间的通讯状态不进行保存,所以链接双方不能知晓对方当前的身份和状态。这也是Cookie技术产生的重要缘由之一:客户端的状态管理。浏览器会根据从服务器端发送的响应报文内 Set-Cookie 首部字段信息自动保持 Cookie。而每次客户端发送 HTTP 请求,都会在请求报文中携带 Cookie,做为服务端识别客户端身份状态的标识。
  • 无链接,即交换http报文前,不须要创建HTTP链接http协议是TCP/IP协议的一个子集.http采用TCP做为运输层协议。

2.http请求报文。

http的请求报文有请求行、请求头、请求体组成
请求行: 声明请求方法、主机域名、路径资源、协议版本
请求头:声明客户端、服务器、等报文的部分信息
请求体:存放需发送的数据信息

报文结构以下:

相关文章
相关标签/搜索