TCP/IP的简介

关于协议

简单来讲,协议就是计算机与计算机以前经过网络实现通讯事先达成的一种“约定”。这种约定,使不一样设备,不一样系统之间只有遵循相同的协议才能进行通讯。互联网中经常使用的协议有:IP、TCP、UDP、HTTP,局域网:IPX/SPX等缓存

关于TCP/IP

TCP/IP是一种网络体系结构,也能够叫作“TCP/IP”协议族,它不仅是TCP和IP,是IP、TCP、HTTP、FTP等协议的集合(基于TCP/UDP、IP的协议)。服务器

image

TCP/IP的参考模型

和OSI参考模型联系:网络

image

  • 物理层

物理层是负责数据传输的硬件层,例如:以太网、电话线等物理设备。主要功能是把电压的高低转化成0、1(比特流)。性能

  • 数据链路层

负责把比特流转换成数据帧传输,例如驱动程序担当是操做系统和硬件的桥梁做用。操作系统

  • 网络层

负责网络通讯中的寻址和路由的选择,将目标数据传送到目标地址。3d

  1. IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。使用IP地址做为主机的标识;
  2. ICMP在IP数据包发送途中发生异常没法到达对端的目标地址是,会向发送端发送一个异常的通知的协议。
  3. ARP是经过IP地址解析出物理地址(MAC地址)的协议。
  • 传输层

主要功能是实现程序以前的通讯,运用端口号来区分单个设备多个程序之间的通讯。期间用到的协议TCP、UDP。指针

  • 应用层

为应用程序提供服务并规定应用程序中通讯相关细节。包括文件传输、电子邮件、远程登陆等协议。cdn

传输层的协议

在网络通讯过程当中,源IP地址和目标IP地址两个因素是识别两端主机。可是,传输层的做用是实现单个设备多个程序之间的通讯,所以加入了源端口号,协议号,目标端口号。经过这五个因素“源IP地址、目标IP地址、源端口号、目标端口号、协议号”来确认是否同一个通讯。视频

  • UDP

UDP是一种面向无链接的传输层协议,不会关注数据是否到达对端。多用在数据少或多播、广播通讯、视频通讯等多媒体领域blog

  1. UDP的首部

image

  • 源端口号:表示发送的端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0,可用于不须要返回的通讯中。

  • 目标端口号:表示接收端口号,字段长16位。

  • 包长度: UDP 首部的长度和 UDP 数据长度之和(单位位字节 )

  • 检验和:用来判断数据在传输过程当中是否损坏,除了检验UDP首部的源端口号、目标端口号,还包括源IP地址、目标IP地址、协议号(这三个也叫“UDP伪首部”)。缘由是识别一个通讯必须包括这5大因素,假如UDP伪首部出来问题,极有可能应该收包的应用收不到包。

  • TCP

TCP是一种面向链接的传输层协议,要链接和断开通过“三次握手,四次挥手”,能够保证数据传输的可达,具有可靠性。能处理丢包、传输数据顺序乱的问题,还有经过流控制有效地利用宽度,缓解网络拥堵的做用。

  1. TCP的首部

image

  • 源端口号:表示发送的端口号,字段长16位。

  • 目标端口号:表示接收端口号,字段长16位。

  • 序列号:指凡事数据的位置,字段长32位,每发送一次数据就累加一次该数据字节数的大小。序列号是在创建链接时由计算机随机生成的随机数做为初始值,经过SYN包传给接收端。

  • 确认应答号:它等于下一次应该接收到的数据的序列号。假设发送端的序列号为 s,发送数据的长度为 l,那么接收端返回的确认应答号也是 s + l。发送端接收到这个确认应答后,能够认为这个位置之前全部的数据都已被正常接收。

  • 数据偏移:该字段表示TCP所传输的数据部分应该从TCP包的哪一个位开始计算,也就是TCP首部的长度。该字段的长度单位为 4 字节,若是没有可选字段,那么这里的值就是 5,表示 TCP 首部的长度为 20 字节。

  • 保留:该字段主要为了之后扩展是使用,其长度位4位。通常设置位0,但即便收到的包的在该字段不为0,此包也不会被丢弃。

  • 控制位:改字段长度为 8 比特,分别有 8 个控制标志。依次是 CWR,ECE,URG,ACK,PSH,RST,SYN 和 FIN。

    • CWR(Congestion Window Reduced):CWR与ECE都用于IP地址首部的ECN字段。ECE标志为1是,则通知对方已将拥堵窗口缩小。
    • ECE(ECN-Echo):为1时,通知对方,从对方到这边有网络拥塞的状况。
    • URG(Urgent Flag):为1时,表示包中有须要紧急处理的数据。
    • ACK(Acknowledgement Flag): 为1时,确认应答的字段变为有效。TCP规定处理最初创建链接是的SYN包以外该为必须设置为1。
    • PSH(Push Flag):为1时,表示须要将收到的数据马上传给上层应用协议。PSH为 0是则不用当即传是先进行缓存。
    • RST(Reset Flag):为1时,表示TCP链接中出现一次必须强制断开链接。例如,一个没有被使用的端口即便发来链接请求,也没法进行通讯,这时能够返回一个RET为1的包,端口链接。
    • SYN(Synchronize Flag):用于创建链接。SYN为1表示但愿创建链接,并在其序列号的字段进行序列号初始值的设定,创建链接的 双方,序列号和趣儿应答号要保持同步。
    • FIN(Fin Flag):为1时,表示从此不会再有数据发送,但愿断开链接。通讯双方的主机之间经过发送FIN位置为1的TCP段,且每一个主机对对方的FIN包进行确认应答之后就能够断开链接。不过,不用立刻做出应答,而是等缓存区的全部数据发送完成后再发确认应答。
  • 窗口大小:该字段长16位,用于通知从相同TCP首部确认应答号所指位置开始可以接收的数据到小。有一种状况,窗口大小为0时,则表示发送窗口探测,以了解最新的窗口大小。但这个数据必须为1字节。

  • 检验和:TCP的校验和与UDP类似,区别在于TCP的校验和没法关闭。

  • 紧急指针:该字段为16位,只有在URG控制位为1是才有效。

  • 选项:该字段用于提升TCP的传输性能。

  1. TCP三次握手

image

TCP握手通常由客户端发起,步骤以下:

  1. 第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明客户打算链接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里,并进入SYN_SEND状态,等待服务器确认.
  2. 第二次握手: 服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为X+1,服务器进入SYN_RECV状态
  3. 第三次握手. 客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.而且把服务器发来ACK的序号字段+1,放在肯定字段中发送给对方

在三次握手过程当中,服务器发送SYN-ACK以后,收到客户端的ACK以前的TCP链接称为半链接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.

为何是三次握手?

由于TCP的可靠的数据传输,且是全双工通讯,在双方进行数据传输前,必须确认双方均可以接收数据。例如:若是是二次握手就创建,当服务端给客户端发送数据时,因为没有第三次的ACK握手,服务端就不肯定客户端可否接收到数据一样给客户端发送数据,就会形成资源的浪费。

  1. 四次挥手

image

  1. 客户端主动关闭,向服务端发送FIN包,包首部FIN=1,seq(序列号) = u,进入FIN-WAIT状态。
  2. 服务端收到客户端的FIN包后,向客服端发送一个ACK包,包首部ACK=1,seq = v,ack = u+1,进入等待关闭状态
  3. 等服务端的缓存数据所有发送完是向客服端发送一个FIN包,包首部FIN=1,ACK=1,seq=w,ack=u+1,进入Last-Ack状态,等待客户端的回复再关闭。
  4. 客服端收到服务端的FIN包后,返回一个ACK包,包的首部ACK=1,seq=u+1,ack = w+1,服务端收到ACK后就关闭TCP链接,而客户端进入等待关闭,等待2MSL的时间后没有收到服务端的数据,再关闭链接
相关文章
相关标签/搜索