TCP/IP协议栈
四次网络结构的划分、及各层的重要协议、报文头部、…
TCP/IP协议栈
-
Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议
-
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
-
目前局域网或者互联网被TCP/IP协议一统,基本上都使用的是TCP/IP协议;如果问什么协议属于哪一层,一般指的是TCP/IP协议的哪一层
应用层
- 应用层协议:http、https、ftp、TFTP、nfs、DNS…等等(简单来说就是启动该应用程序,此应用程序将开启某端口号处于监听状态的协议均属于应用层协议)
传输层
-
传输层的功能:
①Session multiplexing
②Segmentation
③Flow control (when required)
④Connection-oriented (when required)
⑤Reliability (when required) -
传输层的两个核心协议TCP/UDP
-
TCP/UDP对比:
TCP协议
-
(1)TCP协议的特点:
①工作在传输层
②面向连接协议
③全双工协议
④半关闭
⑤错误检查
⑥将数据打包成段,排序
⑦确认机制
⑧数据恢复,重传
⑨流量控制,滑动窗口
⑩拥塞控制,慢启动和拥塞避免算法
⑪更多关于tcp的内核参数,可参看man 7 tcp -
(2)TCP协议包头
https://blog.csdn.net/wdirdo/article/details/99706085 -
(3)TCP超时重传
①异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
②TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略
③与TCP超时重传相关的两个内核参数:
④/proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
⑤/proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min) -
(4)拥塞控制
网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性
能就会变坏。此情况称为拥塞
TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制四个部分:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
当前所使用的拥塞控制算法
/proc/sys/net/ipv4/tcp_congestion_control
UDP协议
(1)UDP协议特点
①工作在传输层
②提供不可靠的网络访问
③非面向连接协议
④有限的错误检查
⑤传输性能高
⑥无数据恢复特性
⑦更多关于udp的内核参数,可参看man 7 udp
(2)UDP包头
Internet层
- internet层包含许多协议:其中最重要的是ip协议
ICMP协议
-
ICMP协议:(Internet Control Message Protocol)Internet控制报文协议。(搜索释义):它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
-
ICMP协议:用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。可以判断网络状态,根据不同的网络状态将返回不同的响应信息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1.
-
ping 用的就是ICMP协议,ICMP协议的每个包是有状态的,向对方发出一个包,对方会回应一个包,抓包中可以看到一方请求,一方回应
request:
reply:
ARP协议
-
ARP协议:ARP(Address Resolution Protocol)地址解析协议。可根据IP地址获取物理地址的一个TCP/IP协议。(搜索释义):主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
-
arp的工作机制是:只要广播谁响应,询问主机就会相信,记录在自己的arp表中,没有任何校验;因此存在ARP攻击。
-
根据IP地址获取物理地址的一个TCP/IP协议,数据链路层帧结构中包含目标的MAC地址和源MAC地址,但是主机通讯时如何获取对方主机的MAC地址呢?
-
ARP是利用广播实现的;如下图
①处于同一条链路中的主机AB,主机A需要获取B的MAC地址,此时A将发一广播寻找B的MAC地址;报文内容如下:
②当B收到A的ARP广播时,将在B主机的缓存空间中保存A的IP与A的MAC对应关系,称为ARP表
③A收到回复后,A也会构建自己的ARP表
大致过程如下:
主机ARP查看:通信过就会生成此表,先重启网络,然后arp表被清空,利用抓包软件查看ARP广播过程:
重启网络服务后:可以看到192.168.38.7的Mac与ip的对应记录没了
然后重新去ping一下192.168.38.7,利用tcpdump抓包可见:
Wireshark抓包
图中框出来的即为ARP广播过程,当然最开始本机即192.168.38.6需要广播一下确认此ip没有使用,然后使用192.168.38.6这个ip。只要网络一重启,就会发生免费arp确认。
确认自己ip的ARP称为免费arp:其中报文详情如下:
此时ARP表再生产arp信息:(过一会儿不通信mac也清)
-
因此不再同一链路时的通信过程
中间帧MAC地址不断变化,但是源IP和目标IP始终不变
反向ARP
Internet 层核心协议:IP协议
-
ip协议即Internet Protocol,IP协议也称“因特网协议”
-
Internet 协议特征
①运行于 OSI 网络层
②面向无连接的协议
③独立处理数据包
④分层编址
⑤尽力而为传输
⑥无数据恢复功能 -
ip协议报文头部
①固定长度20字节
②报文头部
https://blog.csdn.net/wdirdo/article/details/99706116 -
ip地址
①标识ip网络中的设备
②IPv4地址格式:点分十进制
③查看ipv4
物理层
- 当把物理层分开:分为数据链路层和物理层则TCP/IP一般也称为5层
- 相当于OSI模型的物理层和数据链路层,此处不再累述
- 主要介绍一下数据连接层帧结构
帧结构※※※※※
-
Ethernet Frame结构 (以太网的帧结构)
以太网是工作在数据链路层的,以太网定义了帧的标准格式:
8个字节:7个字节的前导信息+1个字节的SOF(帧开始的分隔符)
6个字节:6个字节的目标MAC地址
6个字节:6个字节的源MAC地址
2个字节:2个字节的上层协议类型(2代以太网)(1代以太网为2个字节的长度)
DATA字节:数据的字节范围(46-1500)注:此时的数据包含了数据链路层以上层的封装头部
4个字节:4字节的校验位;FSC
注意: 前8个字节和最后4个字节一般不关心;一般关心中间的部分;
MAC地址:eg:00:0c:29:05:29:6e
广播: 目标MAC地址全是1(brd ff:ff:ff:ff:ff:ff)
单播: 目标MAC地址为具体设备的MAC(00:0c:29:05:29:6e)
多播/组播:目标MAC的前三位的高八位的最后一位可以区分多播和单播
-
Wireshark - Windows抓包
抓包时选择网卡–选择的是VMnet8(因为在VMware安装Linux时选择的是NAT模式)
网络中的包都是一个一个发的,一条记录就表现为数据链路层一帧。
每个帧都有自己的编号Frame #
Wireshark 前8个字节和最后4个字节一般不关心;因此在此软件抓包的length中显示的范围是60–1514之间;若数据包没有那么多数据,将会凑足60字节。
总结
- 数据报文头部信息:data – tcp/udp – IP – frame head
- frame的前8字节前导信息和最后四个字节的校验一般不关心
- tcp / ip 的头部信息固定长度为20字节,还包括可变部分