1、TCP
①概念
面向连接的、可靠的、基于字节流的传输层通信协议。
②报文
SYN:SYN= 1 表示这是一个连接请求或连接接受报文。在建立连接时用来进行同步序号(个人理解是,在建立连接的时候,提醒对方记录本方的起始序号)。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若是同意建立连接,则应响应的报文段中使SYN=1、ACK=1。因此SYN=1表示该报文是一个连接请求报文或者是一个连接请求接收报文。
ACK:确认号只有在该位设置为1的时候才生效,当该位为0是表示确认号无效。TCP规定,在TCP连接建立后所有传送的数据报文段ACK都必须设置为1。
FIN:当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
序号:占4个字节,它的范围在0-2^32-1,序号随着通信的进行不断的递增,当达到最大值的时候重新回到0在开始递增。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按照顺序编号。整个要传送的字节流的起始号必须在连接建立时设置。首部中的序列号字段指的是本报文段所发送的数据的第一个字节的序号。例如,一个报文序号是301,而携带的数据共有100字节。则表示本次报文中的序号是301,下一个报文的序号是401.重复一下,每一个报文的序号是该报文包含的字节中第一个字节的编号。
确认号:占4个字节,确认号,是对下一个想要接受的字节的期望,这里隐式确认了对上一个数据包的成功接收。如上例,在成功接收了序号为301的数据包,想要接收下一个数据包因为上个数据包包含100字节,所以此时的确认号应该是401,表示希望接收下一个序号是401的数据包。
③三次握手创建连接
步骤:
首先由Client发出请求连接即 SYN=1 ACK=0 (请看头字段的介绍),TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x。
然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y,ack=x+1。
再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1,ack=y+1。
为什么要进行三次握手(两次确认):
为什么A还要发送一侧确认呢?这主要是为了防止已失效的连接请求报文突然又传送到了B,因而产生错误。
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攻击了,使用如下命令可以让之现行:
#netstat -nap | grep SYN_RECV
④四次挥手释放连接
当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1, 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。 A收到B的确认后进入等待状态,等待B请求释放连接, B数据发送完成后就向A请求连接释放,也是用FIN=1 表示, 并且用 ack = u+1(如图), A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等待 2MSL 时间。
l 为什么要等待呢?
l 为了防止这种情况:A接到B的释放连接请求后会发送一个确认信息,但是如果这个确认信息丢了,也就是B没有收到确认释放连接,那么B就会重发一个释放连接请求,这时候A还处于TIME_WAIT状态,所以会再次发送一个确认信息。
l Q2为什么TIME_WAIT 状态还需要等2*MSL秒之后才能返回到CLOSED 状态呢?
l A2因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED 状态(就好比从SYN_SENT 状态到ESTABLISH 状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK 状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT 状态的作用就是用来重发可能丢失的ACK报文。
⑤为什么可靠?
参考:https://blog.csdn.net/liuchenxia8/article/details/80428157
- 校验和
- 序列号
- 确认应答
- 超时重传
- 连接管理 : 3次握手与4次挥手
- 流量控制: 根据接收端对数据的处理能力,决定发送端的发送速度
- 拥塞控制: 控制发送端一次发送的数据量
2、HTTP
①概念
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
②报文
请求报文:
响应报文:
3、IP
①概念
不可靠的、无连接的传送机制。
②报文
③分片与重组
链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度,不同的网络类型都有一个上限值。以太网的MTU是1500。如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。
分片后的IP数据包,只有到达目的地才能重新组装。重新组装由目的地的IP层来完成,其目的是使分片和重新组装过程对传输层(TCP和UDP)是透明的。已经分片过的数据包有可能会再次进行分片(不止一次)。
4、应用层到传输层到网络层数据封装
5、交换机与路由器
①交换机:可以实现局域网,多台机器最终有一个网络输出口,但是不能访问外网(现在交换机可以)。例:猫
②路由器:路由器包含交换机功能,可以访问外网(代价是比较贵的),但是网络接口少(3个)