简单来讲,协议就是计算机与计算机以前经过网络实现通讯事先达成的一种“约定”。这种约定,使不一样设备,不一样系统之间只有遵循相同的协议才能进行通讯。互联网中经常使用的协议有:IP、TCP、UDP、HTTP,局域网:IPX/SPX等缓存
TCP/IP是一种网络体系结构,也能够叫作“TCP/IP”协议族,它不仅是TCP和IP,是IP、TCP、HTTP、FTP等协议的集合(基于TCP/UDP、IP的协议)。服务器
和OSI参考模型联系:网络
物理层是负责数据传输的硬件层,例如:以太网、电话线等物理设备。主要功能是把电压的高低转化成0、1(比特流)。性能
负责把比特流转换成数据帧传输,例如驱动程序担当是操做系统和硬件的桥梁做用。操作系统
负责网络通讯中的寻址和路由的选择,将目标数据传送到目标地址。3d
主要功能是实现程序以前的通讯,运用端口号来区分单个设备多个程序之间的通讯。期间用到的协议TCP、UDP。指针
为应用程序提供服务并规定应用程序中通讯相关细节。包括文件传输、电子邮件、远程登陆等协议。cdn
在网络通讯过程当中,源IP地址和目标IP地址两个因素是识别两端主机。可是,传输层的做用是实现单个设备多个程序之间的通讯,所以加入了源端口号,协议号,目标端口号。经过这五个因素“源IP地址、目标IP地址、源端口号、目标端口号、协议号”来确认是否同一个通讯。视频
UDP是一种面向无链接的传输层协议,不会关注数据是否到达对端。多用在数据少或多播、广播通讯、视频通讯等多媒体领域blog
源端口号:表示发送的端口号,字段长16位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0,可用于不须要返回的通讯中。
目标端口号:表示接收端口号,字段长16位。
包长度: UDP 首部的长度和 UDP 数据长度之和(单位位字节 )
检验和:用来判断数据在传输过程当中是否损坏,除了检验UDP首部的源端口号、目标端口号,还包括源IP地址、目标IP地址、协议号(这三个也叫“UDP伪首部”)。缘由是识别一个通讯必须包括这5大因素,假如UDP伪首部出来问题,极有可能应该收包的应用收不到包。
TCP是一种面向链接的传输层协议,要链接和断开通过“三次握手,四次挥手”,能够保证数据传输的可达,具有可靠性。能处理丢包、传输数据顺序乱的问题,还有经过流控制有效地利用宽度,缓解网络拥堵的做用。
源端口号:表示发送的端口号,字段长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。
窗口大小:该字段长16位,用于通知从相同TCP首部确认应答号所指位置开始可以接收的数据到小。有一种状况,窗口大小为0时,则表示发送窗口探测,以了解最新的窗口大小。但这个数据必须为1字节。
检验和:TCP的校验和与UDP类似,区别在于TCP的校验和没法关闭。
紧急指针:该字段为16位,只有在URG控制位为1是才有效。
选项:该字段用于提升TCP的传输性能。
TCP握手通常由客户端发起,步骤以下:
在三次握手过程当中,服务器发送SYN-ACK以后,收到客户端的ACK以前的TCP链接称为半链接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
为何是三次握手?
由于TCP的可靠的数据传输,且是全双工通讯,在双方进行数据传输前,必须确认双方均可以接收数据。例如:若是是二次握手就创建,当服务端给客户端发送数据时,因为没有第三次的ACK握手,服务端就不肯定客户端可否接收到数据一样给客户端发送数据,就会形成资源的浪费。