一。ip协议原理(网络层)
1.网络地址转换NAT
我们上网是通过运营商向我们提供的IP地址来上网的,并不是自身的IP地址,所以这就需要网络地址转换NAT的帮助。即内网访问外网所需要的ip转换装置。
2.ip数据报
(1)版本
占据4bit空间,定义IPv4与ipv6,对应的值分别为4与6
(2)首部长度
占4bit空间,单位字,最大记录 60个字节的数据(15*4=60)
(3)服务类型(TOS)
占据 8bit空间,包含在 IPv4首部中,表示不同类型的ip数据报。通过TOS可以更好的选择数据报的传递路径。
(4)数据报长度
占据 16bit空间,以字节为单位, IP 数据报的理论最大长度为 65535字节,实际小于1500字节。注意最小需要46字节,所以不够时需要填充字符。
(5)标识
数据报可能会分片,所以会需要表示是那一片,以便恢复。
(6)标志
第一位未使用,第二位为0表示允许分片,第三位为0表示整个数据报最后一个分片。
(7)分片偏移量
占据 13bit空间,表示当前分片所携带的数据在整个 IP 数据报中的相对偏移位置(以 8 字节为单位)
(8)生存空间
该字段用来确保数据报不会永远在网络中循环,即在路由器中每传递一次TTL减一,如果为零表示数据已到期,需丢弃。
(9)上层协议
字段的值指示了 IP 数据报的数据部分应交给哪个特定的传输层协议。例如,值为 6表明数据部分要交给 TCP,而值为 17表明数据要交给 UDP。
(10)首部检验和
占据 16bit空间,判断首部是否出错。
(11)源ip与目标ip
(12)数据区域
数据字段包含要交付给目标 IP 地址的运输层(TCP 协议或 UDP 协议) ,也可以承载其他类型的报文如,ICMP报文。
如何分析ip数据包?
使用抓包工具,wireshark
二。UDP协议原理(传输层)
1.UDP封装
传输层就是在网络层ip报的基础上继续封装,类似于快递包装,数据链路层同理。那么到别人的主机下,自然就是拆解的过程。
(1)源端口:在需要对方回信时选用。不需要时可用全0。
(2)目的端口:交付报文需要用到
(3)总长度: UDP用户数据报的长度,其最小值是8(仅有首部),发送一个带0字节数据的UDP数据报是允许的。
(4)校验和:差错检验
三。TCP协议原理
1.报文封装
同udp,区别在于tcp为可靠传输,所谓的可靠传输,就是在主机向从机发送数据,从机向接受到以后,需要向主机发送一个ACK,确认自己已经收到数据。从机向主机发送数据也是一样的。
2.报文结构
(1)源端口和目标端口
TCP 报文段都包含源主机和目标主机的端口号。两个端口号加上两个IP地址就能唯一确定一个TCP连接。
(2)序号
序号字段用来标识从 TCP发送端向 TCP 接收端发送的数据字节流, TCP 协议会对发送或者接收的数据进行编号(按字节的形式),那么使用序号对每个字节进行计数,就能很轻易管理这些数据。 序号是 32 bit的无符号整数。
(3)首部长度
首部长度字段占据 4bit空间,它指出了 TCP 报文段首部长度,以字节为单位,最大能记录 15*4=60 字节的首部长度
(4)标注字段
URG:首部中的紧急指针字段标志,如果是 1 表示紧急指针字段有效。
ACK:首部中的确认序号字段标志,如果是 1 表示确认序号字段有效。
PSH:该字段置一表示接收方应该尽快将这个报文段交给应用层。
RST:重新建立 TCP 连接。
SYN:用同步序号发起连接。
FIN:中止连接。
(5)窗口大小
TCP 的流量控制由连接的每一端通过声明的窗口大小来提供,窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端正期望接收的数据序号,发送方根据窗口大小调整发送数据,以实现流量控制。窗口大小是一个占据 16 bit空间的字段,因而窗口最大为 65535 字节,当接收方告诉发送方一个大小为 0 的窗口时,将完全阻止发送方的数据发送。
(6)校验和
检验和覆盖了整个的 TCP 报文段:TCP 首部和 TCP 数据区域,由发送端计算和填写,并由接收端进行验证。
(7)紧急字段
只有当 URG标志置 1 时紧急指针才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。简单来说,本 TCP 报文段的紧急数据在报文段数据区域中,从序号字段开始,偏移紧急指针的值结束。
(8)选择字段
kind=2,最大报文段长度(MSS)选项
TCP连接初始化时,通信双方使用该选项来协商最大报文段长度。TCP模块通常将MSS设置为(MTU-40)字节(减掉的这40字节包括20字节的TCP头部和20字节的IP头部)。这样携带TCP报文段的IP数据报的长度就不会超过MTU(假设TCP头部和IP头部都不包含选项字段,并且这也是一般情况),从而避免本机发生IP分片。对以太网而言,MSS值是1460(1500-40)字节
kind=3,窗口扩大因子选项
TCP连接初始化时,通信双方使用该选项来协商接收窗口的扩大因子。在TCP的头部中,接收窗口大小是用16位表示的,故最大为65535字节,但实际上TCP模块允许的接收窗口大小远不止这个数(为了提高TCP通信的吞吐量)。窗口扩大因子解决了这个问题。
假设TCP头部中的接收通告窗口大小是N,窗口扩大因子(移位数)是M,那么TCP报文段的实际接收通告窗口大小是N*2M,或者说N左移M位。
四。tcp的握手与重发
观察上述图片,我们得到以下结论。
1.一共有十条线,每条线都是一次t数据报发送。
2.包括SYN开始连接,ACK确认码,FIN关闭连接字段,mss窗口最大尺寸(单位不是字节)。
具体解释每一条数据流的功能
(1)client向server发送SYN开始连接字段,标号为1000
(2)server向client发送SYN开始连接字段,标号为8000,并返回ACK=1001(表示标号1000已经接受,下一次请发送1001标号)
(3)client发送ACK=8001表示已经接受8000标号的数据
注意:这就是tcp连接的三次握手
(4)-(6)client与server相互发送数据,每次都需要发送ack表示接受到的数据标号
(7)client向server发送FIN字段(表示连接结束),ACK8011(表示已经接受8011)
(8)server向client发送ACK1022(表示已经接受1021)
(9)server端如果有数据要发送,会继续发送,如果没有,那么发送FIN字段(表示连接结束)
(10)client向server发送ack8012表示接受,tcp连接结束。
五。TCP流控机制
1.滑动窗口时序
1.TCP报头有个字段叫window,表示自己还有多少缓存区。不可超发数据。