一、网络层协议
- arp协议 :在网络中发送广播,获取某个主机的mac地址
- icmp协议:ping 命令就是icmp协议,可以用来测试网络是否通畅,pathping 可以完成的显示经过的路由器
- ip协议
首先是IP数据包格式:
各个字段的含义:
- 版本:是ipv4还是IP v6
- 首部长度:首部长度固定部分为20个字节,还有可选部分,但是一般不使用
- 生存时间:指定了该数据包最多可以经过多少个路由器,当生存时间变为0 时该数据包将被丢弃
- 协议:协议字段指出给数据将会交给哪个进程
- 协议号 :ICMP协议 协议号1 IGMP协议 2 TCP 6 UDP 17 IPv6 41 OSPF 89
- 首部校验和:只是首部参与校验,数据部分不参与校验,判断传输的过程中首部是否发生差错。有错误则直接丢弃。
IP数据包总长度用来个字节来指出,故最长可以有65535个字节,但是数据链路层传输的数据最小46个字节最大1500个字节,因此有可能需要将数据包分片发送。
因此有些黑客就会发送破损的数据包,让计算机等待分片的到来,占用计算机资源。
网络层涉及的一些东西:
- 通过抓包排除网络故障:当局域网堵塞的时候,就可以抓包分析是否有某个主机不断的发广播,找出设备的ip地址或mac地址
- 网络畅通的条件:数据包有去有回--因此每个路由器都得知道下一跳给谁,每个设备都得配网关。
- 使用tracert + 主机ip:可以查看沿途经过哪些路由器
- 静态路由
- 需要管理员告诉路由器所有没有直连的网络下一跳给谁
- 缺点: 适合小规模网络。不能够自动调整路由
- 动态路由
- RIP协议 周期性广播路由表 根据跳数最少为最佳 30 秒更新一次路由信息 最大跳数为15
二、传输层:TCP UDP协议
- 查看会话:netstat -n
- 查看会话所对应的进程: netstat -nb
- 传输层协议和应用层协议对应的关系:传输层协议 + 端口号 —> 应用层协议
- HTTP = tcp + 80
- https = tcp + 443
- RDP(远程桌面协议) = tcp + 3389
- ftp = tcp + 21
- telnet = tcp + 23
- 服务和应用层协议的关系
- 计算机开启某个服务就会监听对应的端口,看是否有客户端连接
- 如web 服务: tcp 80端口
- ftp 服务: tcp 21 端口
- 客户端使用IP地址定位服务器,使用目标端口定位具体的服务
- 可以在网卡中设置只开放特定的端口,实现服务器的网络安全
- 计算机开启某个服务就会监听对应的端口,看是否有客户端连接
那么TCP 报文格式是怎样的呢?
如图:
源端口、目的端口很显然不用说
序号:指示数据包的第一个字节是所有数据中的第几个字节
确认号:已经确认收到的字节的下一个字节
TCP建立连接的过程:
首先客户机发送连接请求信号:SYN=1,ACK=0,客户机状态变为已发送(SYN-SENT)
服务器收到信号,发送确认信号,服务器状态变成已收到
客户端收到信号,也发送确认信号,此时客户机变成已连接(ESTABLISHED)
服务器收到客户机的确认信号,此时服务器也变成已连接(ESTABLISHED)。
当两者都变成已建立连接状态时就可以进行通信了。
释放TCP连接的过程(四次挥手)
为什么有四次?
简单理解就是:客户端说一次我要断开连接了,服务器收到之后说一次我同意(但是还没有断开,要双方都提出断开连接且都同意才行)
过了一会,服务器终于也说我也要断开连接了,客户端也同意一次。这就总共四次了。
- 1、客户端发送一个关闭的信号,客户端变成FIN-WAIT-1状态
- 2、服务端收到客户端关闭信号,发送一个同意关闭的信号,服务端变为CLOSE-WAIT状态。(服务器可能还有一些事情要做,不是立马关闭)
- 3、客户端收到服务器的同意信号,变成FIN-WAIT-2状态
- 4、服务器最后事情干完了,也发送一个我要关闭的信号给客户端,服务器变为最后确认状态(LAST-ACK)
- 客户端收到服务器我要关闭的信号,发送一个我同意的信号。客户端变为TIME-WAIT状态。该状态等两MSL之后客户端自动变成关闭状态,防止服务器没收到我的信号,以便重发。
- 服务器收到客户端我同意的信号之后,关闭服务。