概述
网络层
网络层功能
- 定义了基于IP协议的逻辑地址
- 连接不同的媒介类型(路由器)
- 选择数据通过网络的最佳路径
ICMP协议(控制报文协议)
-
ICMP是一个“错误侦测(用ping命令)与回馈机制(Linux系统用traceroute;Windows系统用tracert)"
-
通过IP数据包封装的
-
用来发送错误和控制消息
ICMP协议的封装
ICMP协议属于网络层协议,下图是ICMP数据的封装过程。
ICMP消息类型和编码类型
类型 | 编码 | 描述 |
---|---|---|
0 | 0 | Echo Reply |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
5 | 0 | 重定向 |
8 | 0 | Echo Request |
Ping命令
- ping命令的基本格式为
- -a参数可以显示主机名称
- -l参数可以设定ping包的大小(单位为字节;可用于简单测试通信质量)
- -t是重复不停地ping
- ping命令的返回信息
ARP协议概述
Address Resolution Protocol,地址解析协议。它是将一个已知的IP地址解析成MAC地址,是局域网中主机的通信(IP地址与MAC地址)
IP地址解析为MAC地址
- PC1发送数据给PC2,查看缓存(ARP)没有PC2的MAC
- PC1发送ARP请求消息(广播)
- 所以主机收到ARP请求消息
- PC2回复ARP应答(单播)
- 其他主机丢弃
就是PC1要发送数据给PC2,但它不知道PC2的MAC地址(即ARP没有PC2的MAC),所以它向其他3个PC机广播,其他的3个主机收到PC1的请求消息,然后它们的ARP会记录PC1的MAC同时查看自己是否是PC1请求的目的MAC,PC2就会通过单播向PC1回复应答,PC3、PC4不会回复。
ARP的报文格式
ARP相关命令
ARP攻击与欺骗原理
ARP攻击原理:PC2向PC1发送一个虚假的网关MAC地址,PC1向PC2发送数据时,就会发送到虚假的MAC地址当中,不会传到正常internet网关,而虚假位置不提供internet网络服务,所以PC1的数据一直发不出去,导致无法通信。
ARP欺骗的原理:PC1和PC2建立通信时,PC3分别向PC1和PC2提供虚假MAC地址,PC3向PC1发送一个PC2的虚假的网关MAC地址,PC3向PC2发送一个PC1的虚假的网关MAC地址,PC1向PC2发送数据时,就会发送到虚假的MAC地址(PC3)当中,PC3就会收到并查看PC1发送的数据,之后PC3将数据原封不变的转发给PC2,PC1和PC2之间仍然可以通信,只是通信信息被PC3获取了。
传输层
TCP和UDP协议
- TCP(Transmission Control Protocol)传输控制协议
- UDP(User Datagram Protocol)用户数据报协议
TCP协议
- TCP是面向连接的、可靠的进程到进程通信的协议
- TCP提供全双工服务,即数据可在同一时间双向传输
- TCP报文段(TCP将若干个字节构成一个分组,叫报文段,TCP报文段封装在IP数据报中)
TCP报文段
源端口号(16) | 目标端口号(16) | |||||||
序号(32) | ||||||||
确认号(32) | ||||||||
首部长度(4) | 保留(6) | URG | ACK | PSH | RST | SYN | FIN | 窗口大小(16) |
校验和(16) | 紧急指针(16) | |||||||
选项 |
- URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
- ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
- PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
- RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
- SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
- FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
TCP三次握手四次挥手
三次握手:
1.首先客户端向服务器端发送一段TCP报文,标志位为SYN,表示“请求建立新连接”,序号为Seq=X,随后客户端进入SYN-SENT阶段。
2.服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文。标志位为SYN和ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”;序号为Seq=y;确认号为Ack=x+1,表示收到客户端的序号Seq并将其值加1作为自己确认号Ack的值。
3.客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段TCP报文。标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);序号为Seq=x+1,表示收到服务器端的确认号Ack,并将其值作为自己的序号值;确认号为Ack=y+1,表示收到服务器端序号Seq,并将其值加1作为自己的确认号Ack的值。
4次挥手:
1.首先客户端想要释放连接,向服务器端发送一段TCP报文。标记位为FIN,表示“请求释放连接“,序号为ACK=1,随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据。
2.服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文,标记位为ACK,表示“接收到客户端发送的释放连接的请求”。
3.服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文,标记位为FIN,ACK,表示“已经准备好释放连接了”。
4.客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文,标记位为ACK,表示“接收到服务器准备好释放连接的信号”。
常用的TCP端口号及其功能
端口 | 协议 | 说明 |
20 | FTP | 数据传输端口 |
21 | FTR服务器所开放的控制端口 | |
23 | TELNET | 用于远程登陆,可以远程控制管理目标计算机 |
25 | SMTP | STMP服务器开放的端口,用于发送邮件 |
80 | HTTP | 超文本传输协议 |
110 | POP3 | 用于邮件的接收 |
UDP协议
无连接、不可靠的传输协议但花费的开销小。
UDP报文的首部格式:
源端口号(16) | 目标端口号(16) |
UDP长度(16) | UDP校验和(16) |
UDP长度:用来指出UDP的总长度,为首部加上数据
校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一的可靠机制
常用的UDP端口号及其功能
端口 | 协议 | 说明 |
69 | TFTP | 简单文件传输协议 |
111 | RPC | 远程过程调用 |
123 | NTP | 网络时间协议 |
最后
以上就是激动大树为你收集整理的网络--网络层和传输层网络层传输层的全部内容,希望文章能够帮你解决网络--网络层和传输层网络层传输层所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复