计算机网络基础之TCP/IP 协议栈

                       作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.TCP/IP 协议栈概述

1>.什么是TCP/IP协议栈

  1. Transmission Control Protocol/Internet Protocol
  2.   传输控制协议/因特网互联协议
  3.  
  4. TCP/IP是一个Protocol Stack,包括TCPIPUDPICMPRIPTELNETFTPSMTPARP等许多协议
  5.  
  6. 最早发源于美国国防部(缩写为DoD)的因特网的前身ARPA网项目,198311日,TCP/IP取代了旧的网络控制协议NCP,成为今天的互联网和局域网的基石和标准,由互联网工程任务组负责维护
  7.  
  8. 共定义了四层,分别为网络访问层,Internet层,传输层,应用层。
  9.  
  10. ISO参考模型的分层有对应关系如下图所示。

2>.TCP/IP 应用层

3>.传输层

4>.可靠性 vs.高效性

5>.TCP特性

  1. 工作在传输层
  2.  
  3. 面向连接协议
  4.  
  5. 全双工协议
  6.  
  7. 半关闭
  8.  
  9. 错误检查
  10.  
  11. 将数据打包成段,排序
  12.  
  13. 确认机制
  14.  
  15. 数据恢复,重传
  16.  
  17. 流量控制,滑动窗口
  18.  
  19. 拥塞控制,慢启动和拥塞避免算法

二.TCP协议

1>.TCP包头信息

  1. 源端口(source port)、目标端口(dest port):
  2.   计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16
  3.  
  4. 序列号(sequence):
  5.   表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个比特位,就会出现序列号回绕,再次从 开始
  6.  
  7. 确认号(acknowledgment):
  8.   表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
  9.  
  10. 数据偏移:
  11.   表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
  12.  
  13. URG
  14.   表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效
  15.  
  16. ACK
  17.   表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
  18.  
  19. PSH
  20.   提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
  21.  
  22. RST
  23.   如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
  24.  
  25. SYN
  26.   在建立连接时使用,用来同步序号。当SYN=,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=,ACK=1时,表示对方同意建立连接。SYN=,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
  27.  
  28. FIN
  29.   表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
  30.  
  31. 窗口大小:
  32.   表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
  33.  
  34. 校验和:
  35.   提供额外的可靠性
  36.  
  37. 紧急指针:
  38.   标记紧急数据在数据字段中的位置
  39.  
  40. 选项部分:
  41.   其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(^-)*-=40字节
  42.     常见选项:
  43.       最大报文段长度:Maxium Segment SizeMSS,通常1460字节
  44.       窗口扩大:Window Scale
  45.       时间戳: Timestamps

2>.TCP包头选项

  1. 最大报文段长度MSSMaximum Segment Size
  2.   指明自己期望对方发送TCP报文段时那个数据字段的长度。比如:1460字节。数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的太小。若选择太小,极端情况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,网络的利用率就不会超过1/。若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。因此MSS应尽可能大,只要在IP层传输时不需要再分片就行。在连接建立过程中,双方都把自己能够支持的MSS写入这一字段。 MSS只出现在SYN报文中。即:MSS出现在SYN=1的报文段中
  3.   MTUMSS值的关系:MTU=MSS+IP Header+TCP Header
  4.   通信双方最终的MSS值=较小MTU-IP Header-TCP Header
  5.  
  6. 窗口扩大
  7.   为了扩大窗口,由于TCP首部的窗口大小字段长度是16位,所以其表示的最大数是65535。但是随着时延和带宽比较大的通信产生(如卫星通信),需要更大的窗口来满足性能和吞吐率,所以产生了这个窗口扩大选项
  8.  
  9. 时间戳
  10.   可以用来计算RTT(往返时间),发送方发送TCP报文时,把当前的时间值放入时间戳字段,接收方收到后发送确认报文时,把这个时间戳字段的值复制到确认报文中,当发送方收到确认报文后即可计算出RTT。也可以用来防止回绕序号PAWS,也可以说可以用来区分相同序列号的不同报文。因为序列号用32为表示,每2^32个序列号就会产生回绕,那么使用时间戳字段就很容易区分相同序列号的不同报文

3>.映射第四层到应用程序

  1. 常见的应用层服务被分配的默认端口:
  2. FTP:(TCP)
  3. TELNET:(TCP)
  4. HTTTP:(TCP)
  5. DNS:(TCP,UDP)
  6. TFTP:(UDP)
  7. SNMP:(UDP)

4>.TCP协议PORT

  1. 传输层通过port号,确定应用层协议
  2.  
  3. Port number:
  4. tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
  5.       -
  6. udpUser Datagram Protocol,无连接的协议
  7.       -
  8.  
  9. IANA:互联网数字分配机构(负责域名,数字资源,协议分配)
  10. -:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用,/tcp(ssh), /tcp(http), /tcp(https)
  11. -:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用,/tcp(SqlServer), /tcp(oracle),/tcp(mysql),/tcp/udp (memcached)
  12. -:动态端口或私有端口,客户端程序随机使用的端口
  13. 其范围的定义:/proc/sys/net/ipv4/ip_local_port_range
  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_local_port_range
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_local_port_range

5>.TCP三次握手

  1. client端首先发送一个SYN包(在建立连接时使用,用来同步序号)告诉server端我的初始序列号是X
  2.  
  3. client端收到SYN包后回复给Client一个ACK确认包,告诉Client说我收到了。Server端也需要告诉Client端自己的初始序列号,于是server也发送一个SYN包告诉Client端我的序列化时y。这两个包一起发送。
  4.  
  5. client收到后,回复server一个ACK确认包说我知道了。
  6.  
  7. 温馨提示:(Linux抓取现有连接状态及排序)  
  8.   [root@node101.yinzhengjie.org.cn ~]# ss -nt | sed -rn '1!s/^([^ ]+).*/\1/p' | sort | uniq -c

6>.TCP四次挥手

  1. client发送一个FIN包来告诉server需要断开
  2.  
  3. server端收到后回复一个ACK确认FIN包收到
  4.  
  5. server在自己也没有数据发送给client后,server也发送一个FIN包给client,表示也无数据发送了
  6.  
  7. client收到后,就会回复一个ACK确认serverFIN
  8.  
  9. 温馨提示:
  10. 不是只有客户端才能发送断开请求,主动发出Fin包就是主动关闭方,就会进入TIME_WAIT,原因时被动关闭方发来的FIN包需要确认,万一此包丢失,被动关闭方未收到确认会超时重发FIN包,主动关闭方还在,可以重发ACK

7>.有限状态机FSM:Finite State Machine

  1. CLOSED
  2. 没有任何连接状态
  3.  
  4. LISTEN
  5. 侦听状态,等待来自远方TCP端口的连接请求
  6.  
  7. SYN-SENT
  8. 在发送连接请求后,等待对方确认
  9.  
  10. SYN-RECEIVED
  11. 在收到和发送一个连接请求后,等待对方确认
  12.  
  13. ESTABLISHED
  14. 代表传输连接建立,双方进入数据传送状态
  15.  
  16. FIN-WAIT-
  17. 主动关闭,主机已发送关闭连接请求,等待对方确认
  18.  
  19. FIN-WAIT-
  20. 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
  21.  
  22. TIME-WAIT
  23. 完成双向传输连接关闭,等待所有分组消失
  24.  
  25. CLOSE-WAIT
  26. 被动关闭,收到对方发来的关闭连接请求,并已确认
  27.  
  28. LAST-ACK
  29. 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
  30.  
  31. CLOSING
  32. 双方同时尝试关闭传输连接,等待对方确认
  33.   
  34.  
  35. 客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时等待接收服务端的报文,该报文会有三种可能:
  36.   (1)只有服务端的ACK
  37.       只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间, RFC 1122标准的建议值是2min).客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失
  38.   (2)只有服务端的FIN
  39.       只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服务端的ACK时,进入TIME_WAIT状态
  40.   (3)基于服务端的ACK,又有FIN
  41.       同时收到服务端的ACKFIN,直接进入TIME_WAIT状态

8>.客户端的典型状态转移

  1. 客户端通过connect系统调用主动与服务器建立连接connect系统调用首先给服务器发送一个同步报文段,使连接转移到SYN_SENT状态
  2. 此后connect系统调用可能因为如下两个原因失败返回:
  3. 、如果connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME_WAIT状态的连接所占用(见后文),则服务器将给客户端发送一个复位报文段,connect调用失败。
  4. 、如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect调用失败。
  5. connect调用失败将使连接立即返回到初始的CLOSED状态。如果客户端成功收到服务器的同步报文段和确认,则connect调用成功返回,连接转移至ESTABLISHED状态
  6. 当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1状态。若此时客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭连接(发送结束报文段),则客户端将给予确认并进入TIME_WAIT状态
  7. 客户端从FIN_WAIT_1状态可能直接进入TIME_WAIT状态(不经过FIN_WAIT_2状态),前提是处于FIN_WAIT_1状态的服务器直接收到带确认信息的结束报文段(而不是先收到确认报文段,再收到结束报文段)
  8. 处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态。如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在FIN_WAIT_2状态并无益处。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿进程类似)
  9. Linux为了防止孤儿连接长时间存留在内核中,定义了两个内核参数:
  10. /proc/sys/net/ipv4/tcp_max_orphans 指定内核能接管的孤儿连接数目
  11. /proc/sys/net/ipv4/tcp_fin_timeout 指定孤儿连接在内核中生存的时间
  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_orphans
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_orphans

  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout

9>.TCP协议中的三次握手和四次挥手

10>.客户机端的三次握手和四次挥手

11>.服务器端的三次握手和四次挥手

12>.sync半连接和accept全连接队列

  1. ss lnt
  2. /proc/sys/net/ipv4/tcp_max_syn_backlog     #未完成连接(sync半连接)队列大小,建议调整大小为1024以上
  3. /proc/sys/net/core/somaxconn           #完成连接(accept全连接)队列大小,建议调整大小为1024以上
  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog

  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/core/somaxconn
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/core/somaxconn

13>.TCP超时重传

  1. 异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务
  2. TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略
  3. TCP超时重传相关的两个内核参数:
  4. /proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
  5. /proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应1330min
  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries1
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries1

  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries2
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_retries2

14>.TCP确认

15>.固定窗口

16>.TCP滑动窗口

17>.拥塞控制

  1.   网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞
  2.   TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
  3.   TCP拥塞控制的标准文档是RFC ,其中详细介绍了拥塞控制的四个部分:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
  4.   当前所使用的拥塞控制算法
  5.     /proc/sys/net/ipv4/tcp_congestion_control
  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_congestion_control
  2. cubic
  3. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/tcp_congestion_control

三.UDP协议

1>.UDP特性

  1. 工作在传输层
  2. 提供不可靠的网络访问
  3. 非面向连接协议
  4. 有限的错误检查
  5. 传输性能高
  6. 无数据恢复特性

2>.UDP包头

  1.   UDP报文头部的确很简单,如下图所示。

  2.   UDP没有三次握手的繁琐操作,发送数据那是相当的快啊,在网络比较稳定的情况下可以采用UDP协议,比如内网传输数据,其中DNS协议不仅仅是可以使用TCP53端口,还使用了UDP53端口。

 

四.Internet层

1>.Internet Control Message Protocol(简称"ICMP")

  1.   它是基于internet层之上一种协议,但并不是传输层协议,因为它压根就没有传输的功能。
  2.  
  3.   ICMPInternet Control Message ProtocolInternet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
  4.  
  5.   通过抓包工具可以发现当ICMP包的类型为""则表示request请求报文,如果类型为""则表示reply回应报文。因此我们可以根据这个特点在服务器端配置相应的策略来实现禁ping的效果。
  6.  
  7.   Linux系统中,除了上面所说的根据ICMP报文类型编写相应的防火墙策略来实现禁ping的效果,其实也可以直接关闭一个内核参数就可以轻松实现禁ping: 
  8.     [root@node101.yinzhengjie.org.cn ~]# echo > /proc/sys/net/ipv4/icmp_echo_ignore_all
  1. [root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101      #指定ping的次数为10次
  2. PING 172.30.1.101 (172.30.1.101) () bytes of data.
  3. bytes from 172.30.1.101: icmp_seq= ttl= time=0.344 ms
  4. bytes from 172.30.1.101: icmp_seq= ttl= time=0.531 ms
  5. bytes from 172.30.1.101: icmp_seq= ttl= time=0.316 ms
  6. bytes from 172.30.1.101: icmp_seq= ttl= time=0.302 ms
  7. bytes from 172.30.1.101: icmp_seq= ttl= time=0.374 ms
  8. bytes from 172.30.1.101: icmp_seq= ttl= time=0.287 ms
  9. bytes from 172.30.1.101: icmp_seq= ttl= time=0.790 ms
  10. bytes from 172.30.1.101: icmp_seq= ttl= time=0.314 ms
  11. bytes from 172.30.1.101: icmp_seq= ttl= time=0.624 ms
  12. bytes from 172.30.1.101: icmp_seq= ttl= time=0.799 ms
  13.  
  14. --- 172.30.1.101 ping statistics ---
  15. packets transmitted, received, % packet loss, time 9009ms
  16. rtt min/avg/max/mdev = 0.287/0.468/0.799/0.193 ms
  17. [root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# ping -c 10 172.30.1.101      #指定ping的次数为10次

  1. [root@node102.yinzhengjie.org.cn ~]# ping -c -w 172.30.1.101    #无论是否ping通,只ping一次
  2. PING 172.30.1.101 (172.30.1.101) () bytes of data.
  3. bytes from 172.30.1.101: icmp_seq= ttl= time=0.367 ms
  4.  
  5. --- 172.30.1.101 ping statistics ---
  6. packets transmitted, received, % packet loss, time 0ms
  7. rtt min/avg/max/mdev = 0.367/0.367/0.367/0.000 ms
  8. [root@node102.yinzhengjie.org.cn ~]#
  9. [root@node102.yinzhengjie.org.cn ~]#
  10. [root@node102.yinzhengjie.org.cn ~]# ping -w 172.30.1.101      
  11. PING 172.30.1.101 (172.30.1.101) () bytes of data.
  12. bytes from 172.30.1.101: icmp_seq= ttl= time=0.386 ms
  13.  
  14. --- 172.30.1.101 ping statistics ---
  15. packets transmitted, received, % packet loss, time 0ms
  16. rtt min/avg/max/mdev = 0.386/0.386/0.386/0.000 ms
  17. [root@node102.yinzhengjie.org.cn ~]#
  18. [root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# ping -c 10 -w 1 172.30.1.101  #无论是否ping通,只ping一次

  1. [root@node102.yinzhengjie.org.cn ~]# ping -s 172.30.1.101 -c     #指定ICMP数据为5000字节
  2. PING 172.30.1.101 (172.30.1.101) () bytes of data.
  3. bytes from 172.30.1.101: icmp_seq= ttl= time=0.253 ms
  4.  
  5. --- 172.30.1.101 ping statistics ---
  6. packets transmitted, received, % packet loss, time 0ms
  7. rtt min/avg/max/mdev = 0.253/0.253/0.253/0.000 ms
  8. [root@node102.yinzhengjie.org.cn ~]#
  9. [root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# ping -s 5000 172.30.1.101 -c 1   #指定ICMP数据为5000字节

  1. [root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp    #使用tcpdump之抓取ICMP协议的包。从结果上看虽然ping了一次,但是由于一个包最大能传输1500个字节,因此5000个字节被拆除了4个包进行request和reply
  2. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  3. listening on enp0s8, link-type EN10MB (Ethernet), capture size bytes
  4. ::40.069101 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  5. ::40.069116 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: icmp
  6. ::40.069118 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: icmp
  7. ::40.069120 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: icmp
  8. ::40.069135 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: ICMP echo reply, id , seq , length
  9. ::40.069149 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: icmp
  10. ::40.069156 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: icmp
  11. ::40.069163 IP node101.yinzhengjie.org.cn > node102.yinzhengjie.org.cn: icmp

[root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp   #使用tcpdump之抓取ICMP协议的包。

  1. [root@node102.yinzhengjie.org.cn ~]# ping -s 192.168.124.14 -f        #其实我们也可以使用ping发起flood ping攻击。可以ping一下自己的网卡地址,打开操作系统的任务管理器,观察网卡的使用情况。
  2. PING 192.168.124.14 (192.168.124.14) () bytes of data.
  3. .................................................................................................................................................
  4. ...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^X.^@...........................................^C--- 192.168.124.14 ping statistics ---
  5. packets transmitted, received, % packet loss, time 42199ms
  6.  
  7. [root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# ping -s 65507 192.168.124.14 -f  #其实我们也可以使用ping发起flood ping攻击。如果XP系统的话消耗的是CPU,如果是XP系统之上消耗的是网卡使用率。这也是DOS攻击的方式之一,当然在生成环境中一般情况下是多台肉鸡同时攻击一台服务器,即DDOS,然而黑客能攻击手段每秒可达到TB级别的(如果你公司购买的流量是TB级别的那真的的很有钱啊)。网络安全我们运维人员不得忽略啊!

  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#
  4. [root@node101.yinzhengjie.org.cn ~]# echo > /proc/sys/net/ipv4/icmp_echo_ignore_all   #禁ping
  5. [root@node101.yinzhengjie.org.cn ~]#
  6. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
  7.  
  8. [root@node101.yinzhengjie.org.cn ~]#
  9. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all   #禁ping

  1. [root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101  #由于上面已经警ping了,可以ping10次
  2. PING 172.30.1.101 (172.30.1.101) () bytes of data.
  3.  
  4. --- 172.30.1.101 ping statistics ---
  5. packets transmitted, received, % packet loss, time 9004ms
  6.  
  7. [root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# ping -c 10 172.30.1.101      #由于上面已经警ping了,可以ping10次,并在服务器端使用tcpdump工具。

  1. [root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp      #我们发现只接收到了request请求,但由于我们禁ping啦,导致没有回应报文。
  2. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
  3. listening on enp0s8, link-type EN10MB (Ethernet), capture size bytes
  4. ::29.524064 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  5. ::30.523441 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  6. ::31.524017 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  7. ::32.524016 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  8. ::33.524429 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  9. ::34.525335 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  10. ::35.525509 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  11. ::36.526486 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  12. ::37.527528 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length
  13. ::38.528448 IP node102.yinzhengjie.org.cn > node101.yinzhengjie.org.cn: ICMP echo request, id , seq , length

[root@node101.yinzhengjie.org.cn ~]# tcpdump -i enp0s8 icmp        #我们发现只接收到了request请求

2>.Address Resolution Protocol(简称"ARP")

  1.   地址解析协议,即ARPAddress Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
  2.  
  3.   细心的小伙伴可能也发现了,还有一种特殊的Gratuitous ARP,它是在机器开始的时候发出一种ARP,其目的在于询问局域网中是否有对应的主机使用了当前主机所分配的IP地址,从而避免地址冲突。可以用虚拟机模拟此常见(需要用相应的抓包工具)
  1. C:\Users\yinzhengjie>arp -a          #Windows查看ARP列表
  2.  
  3. 接口: 192.168.30.1 --- 0x2
  4. Internet 地址 物理地址 类型
  5. 192.168.30.254 ---fa-b2-5b 动态
  6. 192.168.30.255 ff-ff-ff-ff-ff-ff 静态
  7. 224.0.0.2 --5e--- 静态
  8. 224.0.0.22 --5e--- 静态
  9. 224.0.0.251 --5e---fb 静态
  10. 224.0.0.252 --5e---fc 静态
  11. 239.255.255.250 --5e-7f-ff-fa 静态
  12. 255.255.255.255 ff-ff-ff-ff-ff-ff 静态
  13.  
  14. 接口: 172.30.1.254 --- 0xf
  15. Internet 地址 物理地址 类型
  16. 172.30.1.101 ---c1-c7- 动态
  17. 172.30.1.102 ---1d-d2- 动态
  18. 172.30.1.255 ff-ff-ff-ff-ff-ff 静态
  19. 224.0.0.2 --5e--- 静态
  20. 224.0.0.22 --5e--- 静态
  21. 224.0.0.251 --5e---fb 静态
  22. 224.0.0.252 --5e---fc 静态
  23. 239.255.255.250 --5e-7f-ff-fa 静态
  24.  
  25. 接口: 172.30.1.1 --- 0x10
  26. Internet 地址 物理地址 类型
  27. 172.30.1.255 ff-ff-ff-ff-ff-ff 静态
  28. 224.0.0.2 --5e--- 静态
  29. 224.0.0.22 --5e--- 静态
  30. 224.0.0.251 --5e---fb 静态
  31. 224.0.0.252 --5e---fc 静态
  32. 239.255.255.250 --5e-7f-ff-fa 静态
  33.  
  34. 接口: 192.168.124.14 --- 0x15
  35. Internet 地址 物理地址 类型
  36. 192.168.124.1 --a9-ce-c6- 动态
  37. 192.168.124.255 ff-ff-ff-ff-ff-ff 静态
  38. 224.0.0.2 --5e--- 静态
  39. 224.0.0.22 --5e--- 静态
  40. 224.0.0.251 --5e---fb 静态
  41. 224.0.0.252 --5e---fc 静态
  42. 239.255.255.250 --5e-7f-ff-fa 静态
  43. 255.255.255.255 ff-ff-ff-ff-ff-ff 静态
  44.  
  45. C:\Users\yinzhengjie>
  46. C:\Users\yinzhengjie>

C:\Users\yinzhengjie>arp -a                #Windows查看ARP列表

  1. [root@node101.yinzhengjie.org.cn ~]# arp -n      #Linux查看ARP列表
  2. Address HWtype HWaddress Flags Mask Iface
  3. 172.30.1.254 ether 0a:::::0f C enp0s8
  4. 10.0.2.2 ether ::::: C enp0s3
  5. 172.30.1.102 ether :::1d:d2: C enp0s8
  6. [root@node101.yinzhengjie.org.cn ~]#
  7. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# arp -n        #Linux查看ARP列表

  1. [root@node101.yinzhengjie.org.cn ~]# ip neigh      #Linux查看ARP列表方式二
  2. 172.30.1.254 dev enp0s8 lladdr 0a:::::0f DELAY
  3. 10.0.2.2 dev enp0s3 lladdr ::::: STALE
  4. 172.30.1.102 dev enp0s8 lladdr :::1d:d2: STALE
  5. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# ip neigh      #Linux查看ARP列表方式二

3>.反向ARP

  1.   反向ARP是根据源设备MAC地址通过广播获取IP地址的过程的地址解析协议。

4>.Internet 协议特征

  1. 运行于 OSI 网络层
  2.  
  3. 面向无连接的协议
  4.  
  5. 独立处理数据包
  6.  
  7. 分层编址
  8.  
  9. 尽力而为传输
  10.  
  11. 无数据恢复功能

5>.IP PDU 报头

  1. IP报文头部信息如下图所示:
      版本:
        4位,指 IP 协议的版本目前的IP协议版本号为4
  2.   首部长度:
        4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60字节
  3.   区分服务:
        8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下不使用
  4.   总长度:
        16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 字节.总长度必须不超过最大传送单元 MTU
  5.   标识:
        16位,它是一个计数器,通常,每发送一个报文,该值会加1 也用于数据包分片,在同一个包的若干分片中,该值是相同的
  6.   标志(flag):
        3位,目前只有后两位有意义,分别为DFMF
  7.       DF
            Dont Fragment 中间的一位,只有当 DF= 时才允许分片
  8.       MF
            More Fragment 最后一位,MF=1表示后面还有分片,MF= 表示最后一个分片
  9.   片偏移:
        12位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位
  10.   生存时间:
        8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个bit字段.推荐的初始值由分配数字RFC指定,当前值为.发送ICMP回显应答时经常把TTL设为最大值255
  11.   协议:
        8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1表示为ICMP协议, 2表示为IGMP协议, 6表示为TCP协议,17表示为UDP协议
  12.   首部检验和:
        16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法
  13.   源地址和目的地址:
        都各占4字节,分别记录源地址和目的地址
  1. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_default_ttl     #查看Linux默认的TTL
  2.  
  3. [root@node101.yinzhengjie.org.cn ~]#
  4. [root@node101.yinzhengjie.org.cn ~]# echo > /proc/sys/net/ipv4/ip_default_ttl   #我们将Linux的TTL修改成和Windows一样的TTL,这样别人ping咱们Linux服务器默认还以为咱们使用的是windows呢~
  5. [root@node101.yinzhengjie.org.cn ~]#
  6. [root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_default_ttl
  7.  
  8. [root@node101.yinzhengjie.org.cn ~]#
  9. [root@node101.yinzhengjie.org.cn ~]#

[root@node101.yinzhengjie.org.cn ~]# cat /proc/sys/net/ipv4/ip_default_ttl     #查看Linux默认的TTL

  1. [root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101       #使用Linux默认的TTL,ping该机器观察ttl的值。
  2. PING 172.30.1.101 (172.30.1.101) () bytes of data.
  3. bytes from 172.30.1.101: icmp_seq= ttl= time=0.289 ms
  4. bytes from 172.30.1.101: icmp_seq= ttl= time=0.555 ms
  5. bytes from 172.30.1.101: icmp_seq= ttl= time=0.360 ms
  6. bytes from 172.30.1.101: icmp_seq= ttl= time=0.284 ms
  7. bytes from 172.30.1.101: icmp_seq= ttl= time=0.302 ms
  8. bytes from 172.30.1.101: icmp_seq= ttl= time=0.302 ms
  9. bytes from 172.30.1.101: icmp_seq= ttl= time=0.685 ms
  10. bytes from 172.30.1.101: icmp_seq= ttl= time=0.809 ms
  11. bytes from 172.30.1.101: icmp_seq= ttl= time=0.691 ms
  12. bytes from 172.30.1.101: icmp_seq= ttl= time=0.385 ms
  13.  
  14. --- 172.30.1.101 ping statistics ---
  15. packets transmitted, received, % packet loss, time 9007ms
  16. rtt min/avg/max/mdev = 0.284/0.466/0.809/0.190 ms
  17. [root@node102.yinzhengjie.org.cn ~]#
  18. [root@node102.yinzhengjie.org.cn ~]# ping -c 172.30.1.101       #由于我上面将该机器的TTL修改为128,再次去ping观察ttl的值。
  19. PING 172.30.1.101 (172.30.1.101) () bytes of data.
  20. bytes from 172.30.1.101: icmp_seq= ttl= time=0.217 ms
  21. bytes from 172.30.1.101: icmp_seq= ttl= time=0.322 ms
  22. bytes from 172.30.1.101: icmp_seq= ttl= time=0.437 ms
  23. bytes from 172.30.1.101: icmp_seq= ttl= time=0.534 ms
  24. bytes from 172.30.1.101: icmp_seq= ttl= time=0.757 ms
  25. bytes from 172.30.1.101: icmp_seq= ttl= time=0.401 ms
  26. bytes from 172.30.1.101: icmp_seq= ttl= time=0.726 ms
  27. bytes from 172.30.1.101: icmp_seq= ttl= time=0.285 ms
  28. bytes from 172.30.1.101: icmp_seq= ttl= time=0.750 ms
  29. bytes from 172.30.1.101: icmp_seq= ttl= time=0.443 ms
  30.  
  31. --- 172.30.1.101 ping statistics ---
  32. packets transmitted, received, % packet loss, time 9008ms
  33. rtt min/avg/max/mdev = 0.217/0.487/0.757/0.188 ms
  34. [root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# ping -c 10 172.30.1.101       #使用Linux默认的TTL,ping该机器观察ttl的值。

6>.IP PDU 报头示例

  1.   片偏移以8个字节为偏移单位,假定MTU=
  2.  
  3.   三个包标识 ID都相同,三个包DF都为0,前两个MF=,最后一个MF=0
  4.  
  5.   

7>.IP报文头部协议域

  1. [root@node102.yinzhengjie.org.cn ~]# cat /etc/protocols     #记录了哪个协议对应的数字编号,这个定义是由国际组织IANA来定义的。
  2. # /etc/protocols:
  3. # $Id: protocols,v 1.11 // :: ovasik Exp $
  4. #
  5. # Internet (IP) protocols
  6. #
  7. # from: @(#)protocols 5.1 (Berkeley) //
  8. #
  9. # Updated for NetBSD based on RFC , Assigned Numbers (July ).
  10. # Last IANA update included dated --
  11. #
  12. # See also http://www.iana.org/assignments/protocol-numbers
  13.  
  14. ip IP # internet protocol, pseudo protocol number
  15. hopopt HOPOPT # hop-by-hop options for ipv6
  16. icmp ICMP # internet control message protocol
  17. igmp IGMP # internet group management protocol
  18. ggp GGP # gateway-gateway protocol
  19. ipv4 IPv4 # IPv4 encapsulation
  20. st ST # ST datagram mode
  21. tcp TCP # transmission control protocol
  22. cbt CBT # CBT, Tony Ballardie <A.Ballardie@cs.ucl.ac.uk>
  23. egp EGP # exterior gateway protocol
  24. igp IGP # any private interior gateway (Cisco: for IGRP)
  25. bbn-rcc BBN-RCC-MON # BBN RCC Monitoring
  26. nvp NVP-II # Network Voice Protocol
  27. pup PUP # PARC universal packet protocol
  28. argus ARGUS # ARGUS
  29. emcon EMCON # EMCON
  30. xnet XNET # Cross Net Debugger
  31. chaos CHAOS # Chaos
  32. udp UDP # user datagram protocol
  33. mux MUX # Multiplexing protocol
  34. dcn DCN-MEAS # DCN Measurement Subsystems
  35. hmp HMP # host monitoring protocol
  36. prm PRM # packet radio measurement protocol
  37. xns-idp XNS-IDP # Xerox NS IDP
  38. trunk- TRUNK- # Trunk-
  39. trunk- TRUNK- # Trunk-
  40. leaf- LEAF- # Leaf-
  41. leaf- LEAF- # Leaf-
  42. rdp RDP # "reliable datagram" protocol
  43. irtp IRTP # Internet Reliable Transaction Protocol
  44. iso-tp4 ISO-TP4 # ISO Transport Protocol Class
  45. netblt NETBLT # Bulk Data Transfer Protocol
  46. mfe-nsp MFE-NSP # MFE Network Services Protocol
  47. merit-inp MERIT-INP # MERIT Internodal Protocol
  48. dccp DCCP # Datagram Congestion Control Protocol
  49. 3pc 3PC # Third Party Connect Protocol
  50. idpr IDPR # Inter-Domain Policy Routing Protocol
  51. xtp XTP # Xpress Tranfer Protocol
  52. ddp DDP # Datagram Delivery Protocol
  53. idpr-cmtp IDPR-CMTP # IDPR Control Message Transport Proto
  54. tp++ TP++ # TP++ Transport Protocol
  55. il IL # IL Transport Protocol
  56. ipv6 IPv6 # IPv6 encapsulation
  57. sdrp SDRP # Source Demand Routing Protocol
  58. ipv6-route IPv6-Route # Routing Header for IPv6
  59. ipv6-frag IPv6-Frag # Fragment Header for IPv6
  60. idrp IDRP # Inter-Domain Routing Protocol
  61. rsvp RSVP # Resource ReSerVation Protocol
  62. gre GRE # Generic Routing Encapsulation
  63. dsr DSR # Dynamic Source Routing Protocol
  64. bna BNA # BNA
  65. esp ESP # Encap Security Payload
  66. ipv6-crypt IPv6-Crypt # Encryption Header for IPv6 (not in official list)
  67. ah AH # Authentication Header
  68. ipv6-auth IPv6-Auth # Authentication Header for IPv6 (not in official list)
  69. i-nlsp I-NLSP # Integrated Net Layer Security TUBA
  70. swipe SWIPE # IP with Encryption
  71. narp NARP # NBMA Address Resolution Protocol
  72. mobile MOBILE # IP Mobility
  73. tlsp TLSP # Transport Layer Security Protocol
  74. skip SKIP # SKIP
  75. ipv6-icmp IPv6-ICMP # ICMP for IPv6
  76. ipv6-nonxt IPv6-NoNxt # No Next Header for IPv6
  77. ipv6-opts IPv6-Opts # Destination Options for IPv6
  78. # # any host internal protocol
  79. cftp CFTP # CFTP
  80. # # any local network
  81. sat-expak SAT-EXPAK # SATNET and Backroom EXPAK
  82. kryptolan KRYPTOLAN # Kryptolan
  83. rvd RVD # MIT Remote Virtual Disk Protocol
  84. ippc IPPC # Internet Pluribus Packet Core
  85. # # any distributed file system
  86. sat-mon SAT-MON # SATNET Monitoring
  87. visa VISA # VISA Protocol
  88. ipcv IPCV # Internet Packet Core Utility
  89. cpnx CPNX # Computer Protocol Network Executive
  90. cphb CPHB # Computer Protocol Heart Beat
  91. wsn WSN # Wang Span Network
  92. pvp PVP # Packet Video Protocol
  93. br-sat-mon BR-SAT-MON # Backroom SATNET Monitoring
  94. sun-nd SUN-ND # SUN ND PROTOCOL-Temporary
  95. wb-mon WB-MON # WIDEBAND Monitoring
  96. wb-expak WB-EXPAK # WIDEBAND EXPAK
  97. iso-ip ISO-IP # ISO Internet Protocol
  98. vmtp VMTP # Versatile Message Transport
  99. secure-vmtp SECURE-VMTP # SECURE-VMTP
  100. vines VINES # VINES
  101. ttp TTP # TTP
  102. nsfnet-igp NSFNET-IGP # NSFNET-IGP
  103. dgp DGP # Dissimilar Gateway Protocol
  104. tcf TCF # TCF
  105. eigrp EIGRP # Enhanced Interior Routing Protocol (Cisco)
  106. ospf OSPFIGP # Open Shortest Path First IGP
  107. sprite-rpc Sprite-RPC # Sprite RPC Protocol
  108. larp LARP # Locus Address Resolution Protocol
  109. mtp MTP # Multicast Transport Protocol
  110. ax. AX. # AX. Frames
  111. ipip IPIP # Yet Another IP encapsulation
  112. micp MICP # Mobile Internetworking Control Pro.
  113. scc-sp SCC-SP # Semaphore Communications Sec. Pro.
  114. etherip ETHERIP # Ethernet-within-IP Encapsulation
  115. encap ENCAP # Yet Another IP encapsulation
  116. # # any private encryption scheme
  117. gmtp GMTP # GMTP
  118. ifmp IFMP # Ipsilon Flow Management Protocol
  119. pnni PNNI # PNNI over IP
  120. pim PIM # Protocol Independent Multicast
  121. aris ARIS # ARIS
  122. scps SCPS # SCPS
  123. qnx QNX # QNX
  124. a/n A/N # Active Networks
  125. ipcomp IPComp # IP Payload Compression Protocol
  126. snp SNP # Sitara Networks Protocol
  127. compaq-peer Compaq-Peer # Compaq Peer Protocol
  128. ipx-in-ip IPX-in-IP # IPX in IP
  129. vrrp VRRP # Virtual Router Redundancy Protocol
  130. pgm PGM # PGM Reliable Transport Protocol
  131. # # any -hop protocol
  132. l2tp L2TP # Layer Two Tunneling Protocol
  133. ddx DDX # D-II Data Exchange
  134. iatp IATP # Interactive Agent Transfer Protocol
  135. stp STP # Schedule Transfer
  136. srp SRP # SpectraLink Radio Protocol
  137. uti UTI # UTI
  138. smp SMP # Simple Message Protocol
  139. sm SM # SM
  140. ptp PTP # Performance Transparency Protocol
  141. isis ISIS # ISIS over IPv4
  142. fire FIRE
  143. crtp CRTP # Combat Radio Transport Protocol
  144. crudp CRUDP # Combat Radio User Datagram
  145. sscopmce SSCOPMCE
  146. iplt IPLT
  147. sps SPS # Secure Packet Shield
  148. pipe PIPE # Private IP Encapsulation within IP
  149. sctp SCTP # Stream Control Transmission Protocol
  150. fc FC # Fibre Channel
  151. rsvp-e2e-ignore RSVP-E2E-IGNORE
  152. mobility-header Mobility-Header # Mobility Header
  153. udplite UDPLite
  154. mpls-in-ip MPLS-in-IP
  155. manet manet # MANET Protocols
  156. hip HIP # Host Identity Protocol
  157. shim6 Shim6 # Shim6 Protocol
  158. wesp WESP # Wrapped Encapsulating Security Payload
  159. rohc ROHC # Robust Header Compression
  160. # - Unassigned [IANA]
  161. # Use for experimentation and testing [RFC3692]
  162. # Use for experimentation and testing [RFC3692]
  163. # Reserved [IANA]
  164. [root@node102.yinzhengjie.org.cn ~]#
  165. [root@node102.yinzhengjie.org.cn ~]#
  166. [root@node102.yinzhengjie.org.cn ~]#
  167. [root@node102.yinzhengjie.org.cn ~]# cat /etc/protocols | wc -l
  168.  
  169. [root@node102.yinzhengjie.org.cn ~]#
  170. [root@node102.yinzhengjie.org.cn ~]#

[root@node102.yinzhengjie.org.cn ~]# cat /etc/protocols     #记录了哪个协议对应的数字编号,这个定义是由国际组织IANA来定义的。

8>.IP地址详解

  1. 博主推荐阅读:
  2.   https://www.cnblogs.com/yinzhengjie/p/11854562.html

五.主机到主机的包传递(数据包的通讯过程,其实抓个包就知道了,下图画的就比较人性化而且忽略了路由,ARP,DNS,实际情况可能比较复杂,比如涉及到HTTP请求过程)

1>.客户端发送SYN给服务端

2>.客户端开始编写部分数据包报文

3>.编写帧报文需要目标地址的mac,检查客户端主机的ARP表,查询是否有对应的记录关系

4>.将自己的mac地址封装

5>.开始ARP广播以获得对端的mac地址

6>.目标服务端收到广播

7>.收到数据帧后进行拆解

8>.将接收到的结果(源地址及MAC信息)添加到当前操作系统

9>.开始编写数据帧想要告诉对方自己的mac地址

10>.将自己编写的数据帧发送给对端主机进行响应

11>.等待接收ARP消息

12>.从广播中捕捉到属于当前主机的消息

13>.将收到的消息解封装之后把对应的IP及mac添加到操作系统中的ARP表

14>.将获取到的目标MAC地址继续编写数据帧并发送

15>.目标主机接收到数据帧后进行拆封获取到SYN信息

16>.收到SYN信息后开始响应对方,发送ACK来建立连接

17>.客户端收到服务端响应的ACK消息

18>.客户端收到消息后需要响应服务端0

19>.TCP三次握手建立成功

20>.客户端开始发送数据

21>.服务端接收到数据

22>.继续响应客户端说自己接收到数据

计算机网络基础之TCP/IP 协议栈的更多相关文章

  1. 【计算机网络基础】TCP/IP、HTTP、Socket的概念

    TCP/IP协议是一个协议簇.里面包括很多协议的.UDP也是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.(资料来源: http://www.cnb ...

  2. UNIX/Linux网络编程基础:图解TCP/IP协议栈

    目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...

  3. -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp

    计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...

  4. TCP/IP协议栈---网络基础篇(3)

    TCP/IP协议栈 在网络中实际使用的是TCP/IP,OSI是参考模型. TCP/IP协议栈 – 是由一组不同功能的协议组合在一起构成的协议栈 – 利用一组协议完成OSI所实现的功能 应用层协议 传输 ...

  5. 【转】TCP/IP协议栈及OSI参考模型详解

    OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...

  6. 渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)

    前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅.在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握. ...

  7. TCP/IP协议栈及OSI参考模型详解

    OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...

  8. 浅谈TCP IP协议栈(一)入门知识【转】

    说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...

  9. TCP/IP 协议栈及 OSI 参考模型详解

    OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...

随机推荐

  1. echo的色彩处理

    在Shell脚本中,可以使用echo的-e选项使显示内容呈现出不同的颜色. 格式1:echo -e "\033[背景颜色代码;文字颜色代码m 输出的字符串 \033[0m" 格式2 ...

  2. echarts柱状图坐标文字显示不完整解决方式

    echarts柱状图坐标文字显示不完整解决方式 本文转载自:https://jingyan.baidu.com/article/ab69b2707a9aeb2ca7189f0c.html echart ...

  3. phpspreadsheet 中文文档(五)节约内存+PHPExcel迁移

    2019年10月11日14:03:31 节省内存 PhpSpreadsheet在工作表中平均每个单元格使用约1k,因此大型工作簿可以迅速用尽可用内存.单元缓存提供了一种机制,使PhpSpreadshe ...

  4. Xshell连接SqlPlus无法使用退格、删除键

    问题:在使用xshell连接CentOS7,进入SQLPLUS进行命令操作时,如果输错了信息,无法进行退格键删除(显示“^H”),同样按删除键,显示“^[[3~”. 解决:网上查找了相关资料,可以通过 ...

  5. Windows版的OpenJDK下载(Red Hat 提供)

    OpenJDK 在linux下安装很简单(yum安装),但是OpenJDK的官网没有为我们提供Windows版的安装软件.庆幸的是,Red Hat(红帽)为我们提供了windows版的安装软件. 下载 ...

  6. oracle全库查找是否有某个值

    在scott用户下面,搜索含有'要找的值'的数据的表和字段穷举法: declare v_Sql ); v_count number; begin for xx in (select t.OWNER, ...

  7. git merge合并分支; already up to date 现象, merger算法

    https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA% ...

  8. [转帖]spring cloud架构

    spring cloud架构 https://www.cnblogs.com/xuzhaoyang/p/11010859.html 我们首先来说一下spring cloud的诞生的背景和意义 1 背景 ...

  9. ajax中如何使用全局变量?

    在ajax中一般都是采取默认的异步请求,但是有时候参数是需要做到全局通用,这时候发起同步请求. 如下: $.ajax({ type:"post", url:"url路径& ...

  10. C语言return返回值深入理解

    C语言使用return关键字返回函数值,可以很好对函数做封装,此处的疑问是:函数内部创建的变量都是局部变量,即私有的,作用域就在函数之内,为什么却可以把值传给调用函数? 解释这个问题还需要从C语言调用 ...