websocket和socket的区别:
1.socket: 套接字,socket是在应用层和传输层之间的一个抽象层,把TCP/IP的复杂操作抽象为几个简单接口供应用层使用。
2.websocket:基于TCP的一种新的网络协议,和http协议一样属于应用层协议,让客户端和服务器之间进行双向实时通信的技术。
七层网络模型,
从底层到上层: 物理层-数据链路层(MAC地址、网卡的物理标识)-网络层(ip协议)-传输层-应用层(会话层,表示层,应用层)。。
网络层(主机之间):
IP协议非常简单,仅仅提供不可靠、无连接的传送服务
无连接:
是指通信之前,不需要先建立连接,直接发送数据,简化了协议。
不可靠:
不保证数据包一定能到达目的地,也不保证数据包能按顺序到达,也不保证数据包不重复。“尽力而为”的去交付。
(可靠性主要由上层TCP来保障)
IP的核心职责
1.寻址:通过ip地址,唯一标识网络中的每一台设备;
2.分段和重组:将上层传输层传来的数据包(segment)封装成ip数据包(datagram)。如果数据包大小超过了底层数据链路层最大传输单元(MTU),ip协议会将其分割成多个片段,并在目的地重新组装。
3.路由:根据目标ip地址,通过路由器选择最佳路径,将数据包转发到目的地,
1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;
2> 基本数据单位为IP数据报;
3> 包含的主要协议:
IP协议(Internet Protocol,因特网互联协议);
ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
在IP主机和路由器之间传递控制消息和差错报告。
IP协议本身不可靠,弥补IP协议的不足,提供一种反馈问题的机制。通常被认为是IP协议的一部分。
(1)差错报告: 处理IP数据包时遇到问题(超时、目标主机不可达),向源主机发送ICMP报文,
(2)网络探询: 查询和诊断网络状态,如ping。
ARP协议(Address Resolution Protocol,地址解析协议)可看成是跨网络层和数据链路层的协议; 作用:通过同一个局域网内,通过IP地址找到对应的物理地址的协议;数据包封装成数据帧,头部需要MAC地址。
ARP缓存表,提高效率。
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
ARP的逆过程。 基本被淘汰了,BOOTP 和现在的 DHCP取代了RARP协议。
重要设备:路由器。。
IP协议如何保证数据接收完毕?
IP协议是无连接协议,不会考虑对方是否“发送完毕”。如果IP数据报被分片发送,那么只有最后一个分片的“还有分片(M)”flag置为0,之前的分片相应flag都置为1。
ip地址分类::
ip地址分网络号和主机号, ip地址由4段组成,每一段是一个字节(8位),最大值是255
网络号表示其属于互联网的哪一个网络,主机地址表示其属于该网络的哪一台主机。(主从关系)
ip共32位,4个字节,点分十进制记法。
(1)A类地址:1个字节(8位,0+7位)表示网络号,网络号取值范围1~126,一般用于大型网络
后3个字节是主机号,(子网掩码255.0.0.0)
(2)B类地址:2个字节(16位,10+14位)表示网络号
网络号取值为128~191,一般用于中等规模网络。子网掩码(255.255.0.0)
(3)C类地址:3个字节(24位,110+21位)表示网络号,网络取值192~223,一般用于小型网络,子网掩码(255.255.255.0)
(4)D类:以1110开始,用于组播(网络取值224~239,用于多路广播用户)
E特殊地址(用于科研),全1和全0保留不用。
子网掩码(subnet mask),又叫网络掩码、地址掩码、子网络遮罩,
也是32位的二进制数字,和前面的IP地址一般成对出现。
子网掩码的作用: 也是唯一作用,告诉设备,IP地址中的哪部分是网络位,哪部分是主机位。
子网掩码的原理: 通过按位与运算来实现的。 连续的1对应网络位,连续的0对应主机位。
子网掩码的表示方法,一般有2种:
(1)点分十进制法, 如:255.255.255.0; 和IP地址的格式相同。
(2)CIDR表示法(前缀长度), IP地址后面加斜杠/和数字,数字表示掩码中1的个数。
如:192.168.1.10/24 等同于 192.168.1.10 掩码 255.255.255.0(因为有24个连续的1)。
子网掩码必须结合ip地址一起使用。 作用是将某个ip地址划分为网络地址和主机地址2部分,屏蔽ip的一部分来区分网络标识和主机标识,并说明该ip在局域网还是在公网。
屏蔽ip的网络部分,A类默认子网掩码255.0.0.0
网络层和传输层的区别:
(1)网络层:只是根据网络地址将源结点发出的数据包传送到目的结点,
(2)传输层:则负责将数据可靠地传送到相应的端口。
传输层(具体的端口,具体应用):TCP、UDP
为应用进程之间提供端到端的逻辑通信。
1> 传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
2> 包含的主要协议:TCP协议(Transmission Control Protocol,传输控制协议,传输的是报文)、UDP协议(User Datagram Protocol,用户数据报协议,传输的是数据报);
3> 重要设备:网关。
TCP协议
TCP应用场景:网页 邮件等等。(http、ftp、telnet、
TCP数据格式: (如下图所示)面向字节流,将信息分割成组,接收端进行重组。
TCP是基于字节流,没有边界,容易发生tcp 粘包和拆包
1.TCP粘包:指的是发送方在发送数据时,将多个逻辑上独立的数据包粘合在一起发送,导致接收方在接收时无法正确地区分这些数据包。造成TCP粘包的原因有多种,包括网络传输的延迟、缓冲区的限制、发送方的发送策略等。
多个数据包粘合在一起,形成一个大的数据包。
多个数据包合并成一个数据包,但是在接收端无法正确地解析出每个数据包。
2.TCP拆包: 发送方在发送数据时,将一个逻辑上独立的数据包拆分成多个小的数据包发送,导致接收方在接收时无法正确地组装这些数据包。TCP拆包的原因主要是由于发送方发送数据的速度过快,接收方处理数据的速度没有跟上。
一个数据包被拆分成多个小的数据包,接收方无法正确地组装这些数据包。
一个数据包被拆分成多个小的数据包,但是在接收端可以正确地解析出每个数据包。
解决TCP粘包和拆包的方式:
1.定长包:固定长度发送,根据固定的长度进行数据的解析;
2.分隔符包:发送方在发送数据时,在每个数据包的末尾添加一个特定的分隔符,接收方按照这个分隔符进行接收和解析。这样可以保证每个数据包的完整性,但是需要选择一个合适的分隔符,避免与数据内容冲突。
3.消息头部包含长度信息。即发送方在发送数据时,在每个数据包的头部添加一个固定长度的字段,表示该数据包的长度,接收方先接收这个长度字段,再根据长度字段接收相应长度的数据。这样可以确保接收方能够正确地区分和组装数据包。
4.序列化和反序列化:即发送方在发送数据之前,将数据对象序列化为字节流,接收方在接收数据之后,将字节流反序列化为数据对象。通过序列化和反序列化,可以确保数据的完整性和正确性。
报文格式:报头header+数据
TCP格式:
(1)报头 16位源端口号 + 16位目的端口号,
(2)32位序号(标识TCP发送端向TCP接收端发送的数据字节流)
(3)32位确认序号(SYN报文,ACK标志为0,没有确认序号)
(4)首部