了解背景
协议的产生,是为了世界各地的计算机用相同的方式有效的去进行沟通。好比不同国家的人使用英语交流。
模型分层
- TCP/IP协议的四层划分
- TCP/IP协议的五层划分
- OSI七层划分
物理层:确保原始数据可在物理媒介上传输。
数据链路层:将网络层接收到的数据可靠的传输到相邻节点的目标机网络层。
网络层:实现不同计算机之间数据透明传送;路径选择、路由和逻辑寻址。IP协议非常简单,仅仅提供不可靠无连接的传输。协议:IP协议。设备:路由器。协议:以太网协议。设备:网桥、交换机。
传输层:负责将上层(应用层)数据分段并提供端到端、可靠或不可靠的传输。以及端到端差错控制和流量控制。协议:TCP、TUP。设备:网关。
会话层:负责进程的建立、管理、粽子进程之间的会话。
表示层:对上层信息进行数据转化保证一个计算主机能被另外一个计算主机接受和理解。转化方式:加密、解压、格式转化。
应用层:最靠近用户的OSI层。为用户的应用程序提供协议,将用户的操作转化为服务发,并匹配一个相应的服务协议送给传输层。
IP
用于计算机之间通信;无连接的通信协议;通过IP,将数据割分成不同的包在因特网上传送。IP负责将没有包路由到它的目的地。
IP地址
没个计算机必须有IP地址才能连接因特网,每一个IP包必须有一个地址才能传送到另外一个计算机。IP地址(网络号+主机号)。TCP/IP使用32比特进行编码。计算机一个字节是8比特,所以TCP/IP使用4个字节做地址,一个字节(00000000)可以有256种形式。所以我们的IP地址为0-255。255.255.255.255样式。
TCP/IP
TCP/IP:TCP和IP共同工作。
HTTP(货物)
TCP(货车):负责应用软件之间网络软件之间的通信。
IP(高速公路):负责计算机之间的通信。
过程:TCP把数据分割成并装入IP包,然后在他们到达的时候重新组合它。IP负责把这个包发送到目标计算机。
TCP报文形式
TCP三次握手和四次挥手
TCP三次握手
TCP三次握手是指发送三次包才能完成连接,同步连接双方的序列号和确认号并交换TCP窗口大小的信息。
第一次握手:客户端发送SIN(随机数seq=J)给到服务器。客户端进入SYN_SENT
第二次握手:服务器接收SIN=J。发送一个确定收到ACK=J+1和自己的SIN(随机数seq=K)给到客户端。服务器进入SYN_RCVD;
第三次握手:检查ACK是否正确,如果正确发送一个ACK=K+1给到服务器。服务器确认后。两者都进入ESTABLISHED
TCP四次挥手
第一次挥手:客户端发送FIN(随机seq=M)给到服务器,客户端进入FIN_WAIT。
第二次挥手:服务器接受FIN=M,发送一个ACK=M+1给到客户端,服务器进入LOSE_WAIT。
第三次挥手:服务器发送一个自己的FIN(随机seq=N)给到客户端,服务器进入LASR_ACK。
第四次挥手:客户端接收到ACK并确定正确,当自己不需要再接受信息时自己发送一个ACK=N+1给到服务器,进入TIME_WAIT。服务器接收确认,变成CLOSE状态。
为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
一、保证TCP协议的全双工连接能够可靠关闭
二、保证这次连接的重复数据段从网络中消失
先说第一点,如果Client直接CLOSED了,那么由于IP协议的不可靠性或者是其它网络原因,导致Server没有收到Client最后回复的ACK。那么Server就会在超时之后继续发送FIN,此时由于Client已经CLOSED了,就找不到与重发的FIN对应的连接,最后Server就会收到RST而不是ACK,Server就会以为是连接错误把问题报告给高层。这样的情况虽然不会造成数据丢失,但是却导致TCP协议不符合可靠连接的要求。所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。
再说第二点,如果Client直接CLOSED,然后又再向Server发起一个新连接,我们不能保证这个新连接与刚关闭的连接的端口号是不同的。也就是说有可能新连接和老连接的端口号是相同的。一般来说不会发生什么问题,但是还是有特殊情况出现:假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是socket pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失。
SYN攻击
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
TCP和DUP的区别
- TCP面向连接(如打电话需要先链接了才能通话);UDP不需要连接就可以发送信息,发数据前不需要建立连接。
- TCP提供可靠服务,信息无差错、不丢失、无重复、且按序到达;UDP是不可靠传输,不确定信息是否送到。
- TCP面象字节流,把数据看成无结构的字节流;DUP面象报文,没有做阻塞控制,不会影响源主机的发送频率(在一些应用上显得很重要,如IP电话、实时会议等)
- TCP首部开销20字节;UDP首部开销8字节,相对来说开销小。
- TCP是一对一点对点;UDP可以一对多、多对一、一对一。
- TCP是全双工可靠通道;UDP是不可靠通道。
TCP可靠性
- 校验和
- 确认应答与序列号
- 超时重传
- 连接管理
- 流量控制
- 拥塞控制(慢启动,拥塞避免,快重传,快恢复)
参考文章
如何针对App弱网情况优化
HTTPS和HTTP有什么区别,HTTPS加密过程是什么样的,对称加密和非对称解密各有什么优缺点?
HTTPS是拥有SSL/TLS加密的HTTP网络协议。加密传输、身份认证,是比HTTP安全的网络协议。
作用 提供安全的传输通道;确认网站的真实性。
参考文章
Socket和Http通信原理
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议,主要利用三元组【ip地址,协议,端口】。
HTTP协议即超文本传输协议,是Web联网的基础,也是手机联网常用的协议之一,http协议是建立在TCP协议之上的一种应用。
Socket和HTTP区别
socket连接:socket连接即是所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;
Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。